+ override val pageListParseSelector = "div.page-break:not([style*=\"display:\"])"
+
+ override fun mangaDetailsParse(response: Response): SManga {
+ if (response.request.url.encodedPath == "/giris-yapiniz/") {
+ throw Exception("WebView'de oturum açarak erişin")
+ }
+ return super.mangaDetailsParse(response)
+ }
+
+ override fun chapterListParse(response: Response): List
{
+ if (response.request.url.encodedPath == "/giris-yapiniz/") {
+ throw Exception("WebView'de oturum açarak erişin")
+ }
+ return super.chapterListParse(response)
+ }
+}
diff --git a/multisrc/overrides/madara/skymangaxyz/res/mipmap-hdpi/ic_launcher.png b/multisrc/overrides/madara/skymangaxyz/res/mipmap-hdpi/ic_launcher.png
new file mode 100644
index 000000000..c30fb00bc
Binary files /dev/null and b/multisrc/overrides/madara/skymangaxyz/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/skymangaxyz/res/mipmap-mdpi/ic_launcher.png b/multisrc/overrides/madara/skymangaxyz/res/mipmap-mdpi/ic_launcher.png
new file mode 100644
index 000000000..241fd875d
Binary files /dev/null and b/multisrc/overrides/madara/skymangaxyz/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/skymangaxyz/res/mipmap-xhdpi/ic_launcher.png b/multisrc/overrides/madara/skymangaxyz/res/mipmap-xhdpi/ic_launcher.png
new file mode 100644
index 000000000..12206912b
Binary files /dev/null and b/multisrc/overrides/madara/skymangaxyz/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/skymangaxyz/res/mipmap-xxhdpi/ic_launcher.png b/multisrc/overrides/madara/skymangaxyz/res/mipmap-xxhdpi/ic_launcher.png
new file mode 100644
index 000000000..d0d1d10a1
Binary files /dev/null and b/multisrc/overrides/madara/skymangaxyz/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/skymangaxyz/res/mipmap-xxxhdpi/ic_launcher.png b/multisrc/overrides/madara/skymangaxyz/res/mipmap-xxxhdpi/ic_launcher.png
new file mode 100644
index 000000000..de68b0d04
Binary files /dev/null and b/multisrc/overrides/madara/skymangaxyz/res/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/skymangaxyz/src/SkyMangaXyz.kt b/multisrc/overrides/madara/skymangaxyz/src/SkyMangaXyz.kt
new file mode 100644
index 000000000..0b5afebfb
--- /dev/null
+++ b/multisrc/overrides/madara/skymangaxyz/src/SkyMangaXyz.kt
@@ -0,0 +1,7 @@
+package eu.kanade.tachiyomi.extension.en.skymangaxyz
+
+import eu.kanade.tachiyomi.multisrc.madara.Madara
+
+class SkyMangaXyz : Madara("SkyManga.xyz", "https://skymanga.xyz", "en") {
+ override val useNewChapterEndpoint = true
+}
diff --git a/multisrc/overrides/madara/sleepytranslations/res/mipmap-hdpi/ic_launcher.png b/multisrc/overrides/madara/sleepytranslations/res/mipmap-hdpi/ic_launcher.png
new file mode 100644
index 000000000..c0bc387f3
Binary files /dev/null and b/multisrc/overrides/madara/sleepytranslations/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/sleepytranslations/res/mipmap-mdpi/ic_launcher.png b/multisrc/overrides/madara/sleepytranslations/res/mipmap-mdpi/ic_launcher.png
new file mode 100644
index 000000000..6b7730adb
Binary files /dev/null and b/multisrc/overrides/madara/sleepytranslations/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/sleepytranslations/res/mipmap-xhdpi/ic_launcher.png b/multisrc/overrides/madara/sleepytranslations/res/mipmap-xhdpi/ic_launcher.png
new file mode 100644
index 000000000..fed1b166e
Binary files /dev/null and b/multisrc/overrides/madara/sleepytranslations/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/sleepytranslations/res/mipmap-xxhdpi/ic_launcher.png b/multisrc/overrides/madara/sleepytranslations/res/mipmap-xxhdpi/ic_launcher.png
new file mode 100644
index 000000000..21ed88280
Binary files /dev/null and b/multisrc/overrides/madara/sleepytranslations/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/sleepytranslations/res/mipmap-xxxhdpi/ic_launcher.png b/multisrc/overrides/madara/sleepytranslations/res/mipmap-xxxhdpi/ic_launcher.png
new file mode 100644
index 000000000..8a75bf364
Binary files /dev/null and b/multisrc/overrides/madara/sleepytranslations/res/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/sololeveling/res/mipmap-hdpi/ic_launcher.png b/multisrc/overrides/madara/sololeveling/res/mipmap-hdpi/ic_launcher.png
new file mode 100644
index 000000000..e2d2edd06
Binary files /dev/null and b/multisrc/overrides/madara/sololeveling/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/sololeveling/res/mipmap-mdpi/ic_launcher.png b/multisrc/overrides/madara/sololeveling/res/mipmap-mdpi/ic_launcher.png
new file mode 100644
index 000000000..a3648ccad
Binary files /dev/null and b/multisrc/overrides/madara/sololeveling/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/sololeveling/res/mipmap-xhdpi/ic_launcher.png b/multisrc/overrides/madara/sololeveling/res/mipmap-xhdpi/ic_launcher.png
new file mode 100644
index 000000000..8f100a8f9
Binary files /dev/null and b/multisrc/overrides/madara/sololeveling/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/sololeveling/res/mipmap-xxhdpi/ic_launcher.png b/multisrc/overrides/madara/sololeveling/res/mipmap-xxhdpi/ic_launcher.png
new file mode 100644
index 000000000..39c8e3654
Binary files /dev/null and b/multisrc/overrides/madara/sololeveling/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/sololeveling/res/mipmap-xxxhdpi/ic_launcher.png b/multisrc/overrides/madara/sololeveling/res/mipmap-xxxhdpi/ic_launcher.png
new file mode 100644
index 000000000..c7b40599c
Binary files /dev/null and b/multisrc/overrides/madara/sololeveling/res/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/sugarbabies/res/mipmap-hdpi/ic_launcher.png b/multisrc/overrides/madara/sugarbabies/res/mipmap-hdpi/ic_launcher.png
new file mode 100644
index 000000000..002db4979
Binary files /dev/null and b/multisrc/overrides/madara/sugarbabies/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/sugarbabies/res/mipmap-mdpi/ic_launcher.png b/multisrc/overrides/madara/sugarbabies/res/mipmap-mdpi/ic_launcher.png
new file mode 100644
index 000000000..34c2aba6e
Binary files /dev/null and b/multisrc/overrides/madara/sugarbabies/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/sugarbabies/res/mipmap-xhdpi/ic_launcher.png b/multisrc/overrides/madara/sugarbabies/res/mipmap-xhdpi/ic_launcher.png
new file mode 100644
index 000000000..141711da4
Binary files /dev/null and b/multisrc/overrides/madara/sugarbabies/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/sugarbabies/res/mipmap-xxhdpi/ic_launcher.png b/multisrc/overrides/madara/sugarbabies/res/mipmap-xxhdpi/ic_launcher.png
new file mode 100644
index 000000000..f44088c33
Binary files /dev/null and b/multisrc/overrides/madara/sugarbabies/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/sugarbabies/res/mipmap-xxxhdpi/ic_launcher.png b/multisrc/overrides/madara/sugarbabies/res/mipmap-xxxhdpi/ic_launcher.png
new file mode 100644
index 000000000..072109fe8
Binary files /dev/null and b/multisrc/overrides/madara/sugarbabies/res/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/summanga/res/mipmap-hdpi/ic_launcher.png b/multisrc/overrides/madara/summanga/res/mipmap-hdpi/ic_launcher.png
new file mode 100644
index 000000000..90bd92fb2
Binary files /dev/null and b/multisrc/overrides/madara/summanga/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/summanga/res/mipmap-mdpi/ic_launcher.png b/multisrc/overrides/madara/summanga/res/mipmap-mdpi/ic_launcher.png
new file mode 100644
index 000000000..ce80c73ff
Binary files /dev/null and b/multisrc/overrides/madara/summanga/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/summanga/res/mipmap-xhdpi/ic_launcher.png b/multisrc/overrides/madara/summanga/res/mipmap-xhdpi/ic_launcher.png
new file mode 100644
index 000000000..0febbb7c8
Binary files /dev/null and b/multisrc/overrides/madara/summanga/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/summanga/res/mipmap-xxhdpi/ic_launcher.png b/multisrc/overrides/madara/summanga/res/mipmap-xxhdpi/ic_launcher.png
new file mode 100644
index 000000000..6f4fb1d7a
Binary files /dev/null and b/multisrc/overrides/madara/summanga/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/summanga/res/mipmap-xxxhdpi/ic_launcher.png b/multisrc/overrides/madara/summanga/res/mipmap-xxxhdpi/ic_launcher.png
new file mode 100644
index 000000000..323bf2bf4
Binary files /dev/null and b/multisrc/overrides/madara/summanga/res/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/sunshinebutterflyscans/res/mipmap-hdpi/ic_launcher.png b/multisrc/overrides/madara/sunshinebutterflyscans/res/mipmap-hdpi/ic_launcher.png
new file mode 100644
index 000000000..4f95c2d51
Binary files /dev/null and b/multisrc/overrides/madara/sunshinebutterflyscans/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/sunshinebutterflyscans/res/mipmap-mdpi/ic_launcher.png b/multisrc/overrides/madara/sunshinebutterflyscans/res/mipmap-mdpi/ic_launcher.png
new file mode 100644
index 000000000..2fce0fef9
Binary files /dev/null and b/multisrc/overrides/madara/sunshinebutterflyscans/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/sunshinebutterflyscans/res/mipmap-xhdpi/ic_launcher.png b/multisrc/overrides/madara/sunshinebutterflyscans/res/mipmap-xhdpi/ic_launcher.png
new file mode 100644
index 000000000..fd1ed35a5
Binary files /dev/null and b/multisrc/overrides/madara/sunshinebutterflyscans/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/sunshinebutterflyscans/res/mipmap-xxhdpi/ic_launcher.png b/multisrc/overrides/madara/sunshinebutterflyscans/res/mipmap-xxhdpi/ic_launcher.png
new file mode 100644
index 000000000..5aeb11255
Binary files /dev/null and b/multisrc/overrides/madara/sunshinebutterflyscans/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/sunshinebutterflyscans/res/mipmap-xxxhdpi/ic_launcher.png b/multisrc/overrides/madara/sunshinebutterflyscans/res/mipmap-xxxhdpi/ic_launcher.png
new file mode 100644
index 000000000..d5ff8c82d
Binary files /dev/null and b/multisrc/overrides/madara/sunshinebutterflyscans/res/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/sweettimescan/res/mipmap-hdpi/ic_launcher.png b/multisrc/overrides/madara/sweettimescan/res/mipmap-hdpi/ic_launcher.png
new file mode 100644
index 000000000..af11c58fd
Binary files /dev/null and b/multisrc/overrides/madara/sweettimescan/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/sweettimescan/res/mipmap-mdpi/ic_launcher.png b/multisrc/overrides/madara/sweettimescan/res/mipmap-mdpi/ic_launcher.png
new file mode 100644
index 000000000..b80041521
Binary files /dev/null and b/multisrc/overrides/madara/sweettimescan/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/sweettimescan/res/mipmap-xhdpi/ic_launcher.png b/multisrc/overrides/madara/sweettimescan/res/mipmap-xhdpi/ic_launcher.png
new file mode 100644
index 000000000..10f3766b8
Binary files /dev/null and b/multisrc/overrides/madara/sweettimescan/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/sweettimescan/res/mipmap-xxhdpi/ic_launcher.png b/multisrc/overrides/madara/sweettimescan/res/mipmap-xxhdpi/ic_launcher.png
new file mode 100644
index 000000000..8f07e15b1
Binary files /dev/null and b/multisrc/overrides/madara/sweettimescan/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/sweettimescan/res/mipmap-xxxhdpi/ic_launcher.png b/multisrc/overrides/madara/sweettimescan/res/mipmap-xxxhdpi/ic_launcher.png
new file mode 100644
index 000000000..d283da9b1
Binary files /dev/null and b/multisrc/overrides/madara/sweettimescan/res/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/sweettimescan/src/SweetTimeScan.kt b/multisrc/overrides/madara/sweettimescan/src/SweetTimeScan.kt
new file mode 100644
index 000000000..b2c4cf017
--- /dev/null
+++ b/multisrc/overrides/madara/sweettimescan/src/SweetTimeScan.kt
@@ -0,0 +1,41 @@
+package eu.kanade.tachiyomi.extension.pt.sweettimescan
+
+import eu.kanade.tachiyomi.multisrc.madara.Madara
+import eu.kanade.tachiyomi.network.interceptor.rateLimit
+import eu.kanade.tachiyomi.source.model.MangasPage
+import okhttp3.OkHttpClient
+import okhttp3.Response
+import org.jsoup.nodes.Element
+import java.text.SimpleDateFormat
+import java.util.Locale
+import java.util.concurrent.TimeUnit
+
+class SweetTimeScan : Madara(
+ "Sweet Time Scan",
+ "https://sweetscan.net",
+ "pt-BR",
+ SimpleDateFormat("MMMMM dd, yyyy", Locale("pt", "BR")),
+) {
+
+ override val client: OkHttpClient = super.client.newBuilder()
+ .rateLimit(1, 2, TimeUnit.SECONDS)
+ .build()
+
+ // The source has novels in text format, so we need to filter them.
+ override fun searchMangaParse(response: Response): MangasPage {
+ val mangaPage = super.searchMangaParse(response)
+ val filteredResult = mangaPage.mangas.filter { it.title.contains(NOVEL_REGEX).not() }
+
+ return MangasPage(filteredResult, mangaPage.hasNextPage)
+ }
+
+ // The site uses some image cache plugin that made the thumbnails don't load.
+ // This removes the plugin site base URL and returns the direct image URL.
+ override fun imageFromElement(element: Element): String {
+ return baseUrl + super.imageFromElement(element)?.substringAfter(baseUrl)
+ }
+
+ companion object {
+ private val NOVEL_REGEX = "novel|livro".toRegex(RegexOption.IGNORE_CASE)
+ }
+}
diff --git a/multisrc/overrides/madara/tankouhentai/src/TankouHentai.kt b/multisrc/overrides/madara/tankouhentai/src/TankouHentai.kt
new file mode 100644
index 000000000..1be556545
--- /dev/null
+++ b/multisrc/overrides/madara/tankouhentai/src/TankouHentai.kt
@@ -0,0 +1,22 @@
+package eu.kanade.tachiyomi.extension.pt.tankouhentai
+
+import eu.kanade.tachiyomi.multisrc.madara.Madara
+import eu.kanade.tachiyomi.network.interceptor.rateLimit
+import okhttp3.OkHttpClient
+import java.text.SimpleDateFormat
+import java.util.Locale
+import java.util.concurrent.TimeUnit
+
+class TankouHentai : Madara(
+ "Tankou Hentai",
+ "https://tankouhentai.com",
+ "pt-BR",
+ SimpleDateFormat("dd 'de' MMMMM 'de' YYYY", Locale("pt", "BR")),
+) {
+
+ override val client: OkHttpClient = super.client.newBuilder()
+ .rateLimit(1, 2, TimeUnit.SECONDS)
+ .build()
+
+ override val useNewChapterEndpoint = true
+}
diff --git a/multisrc/overrides/madara/tappytoonnet/res/mipmap-hdpi/ic_launcher.png b/multisrc/overrides/madara/tappytoonnet/res/mipmap-hdpi/ic_launcher.png
new file mode 100644
index 000000000..fecb0adac
Binary files /dev/null and b/multisrc/overrides/madara/tappytoonnet/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/tappytoonnet/res/mipmap-mdpi/ic_launcher.png b/multisrc/overrides/madara/tappytoonnet/res/mipmap-mdpi/ic_launcher.png
new file mode 100644
index 000000000..cb332133a
Binary files /dev/null and b/multisrc/overrides/madara/tappytoonnet/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/tappytoonnet/res/mipmap-xhdpi/ic_launcher.png b/multisrc/overrides/madara/tappytoonnet/res/mipmap-xhdpi/ic_launcher.png
new file mode 100644
index 000000000..293aed14c
Binary files /dev/null and b/multisrc/overrides/madara/tappytoonnet/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/tappytoonnet/res/mipmap-xxhdpi/ic_launcher.png b/multisrc/overrides/madara/tappytoonnet/res/mipmap-xxhdpi/ic_launcher.png
new file mode 100644
index 000000000..223691495
Binary files /dev/null and b/multisrc/overrides/madara/tappytoonnet/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/tappytoonnet/res/mipmap-xxxhdpi/ic_launcher.png b/multisrc/overrides/madara/tappytoonnet/res/mipmap-xxxhdpi/ic_launcher.png
new file mode 100644
index 000000000..4e5bcaae2
Binary files /dev/null and b/multisrc/overrides/madara/tappytoonnet/res/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/tappytoonnet/src/Tappytoonnet.kt b/multisrc/overrides/madara/tappytoonnet/src/Tappytoonnet.kt
new file mode 100644
index 000000000..e9b66f598
--- /dev/null
+++ b/multisrc/overrides/madara/tappytoonnet/src/Tappytoonnet.kt
@@ -0,0 +1,13 @@
+package eu.kanade.tachiyomi.extension.en.tappytoonnet
+
+import eu.kanade.tachiyomi.multisrc.madara.Madara
+import eu.kanade.tachiyomi.network.GET
+import okhttp3.Request
+import java.text.SimpleDateFormat
+import java.util.Locale
+
+class Tappytoonnet : Madara("TappyToon.Net", "https://tappytoon.net", "en", SimpleDateFormat("MMMM d, yyyy", Locale.US)) {
+ private fun pagePath(page: Int) = if (page > 1) "page/$page/" else ""
+ override fun popularMangaRequest(page: Int): Request = GET("$baseUrl/all-mangas/${pagePath(page)}?m_orderby=views", headers)
+ override fun latestUpdatesRequest(page: Int): Request = GET("$baseUrl/all-mangas/${pagePath(page)}?m_orderby=latest", headers)
+}
diff --git a/multisrc/overrides/madara/tatakaescan/res/mipmap-hdpi/ic_launcher.png b/multisrc/overrides/madara/tatakaescan/res/mipmap-hdpi/ic_launcher.png
new file mode 100644
index 000000000..2a6303921
Binary files /dev/null and b/multisrc/overrides/madara/tatakaescan/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/tatakaescan/res/mipmap-mdpi/ic_launcher.png b/multisrc/overrides/madara/tatakaescan/res/mipmap-mdpi/ic_launcher.png
new file mode 100644
index 000000000..f0afbe3d1
Binary files /dev/null and b/multisrc/overrides/madara/tatakaescan/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/tatakaescan/res/mipmap-xhdpi/ic_launcher.png b/multisrc/overrides/madara/tatakaescan/res/mipmap-xhdpi/ic_launcher.png
new file mode 100644
index 000000000..280da5f0e
Binary files /dev/null and b/multisrc/overrides/madara/tatakaescan/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/tatakaescan/res/mipmap-xxhdpi/ic_launcher.png b/multisrc/overrides/madara/tatakaescan/res/mipmap-xxhdpi/ic_launcher.png
new file mode 100644
index 000000000..4563bc2b1
Binary files /dev/null and b/multisrc/overrides/madara/tatakaescan/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/tatakaescan/res/mipmap-xxxhdpi/ic_launcher.png b/multisrc/overrides/madara/tatakaescan/res/mipmap-xxxhdpi/ic_launcher.png
new file mode 100644
index 000000000..e15f29a69
Binary files /dev/null and b/multisrc/overrides/madara/tatakaescan/res/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/tatakaescan/src/TatakaeScan.kt b/multisrc/overrides/madara/tatakaescan/src/TatakaeScan.kt
new file mode 100644
index 000000000..11a086777
--- /dev/null
+++ b/multisrc/overrides/madara/tatakaescan/src/TatakaeScan.kt
@@ -0,0 +1,20 @@
+package eu.kanade.tachiyomi.extension.pt.tatakaescan
+
+import eu.kanade.tachiyomi.multisrc.madara.Madara
+import eu.kanade.tachiyomi.network.interceptor.rateLimit
+import okhttp3.OkHttpClient
+import java.text.SimpleDateFormat
+import java.util.Locale
+import java.util.concurrent.TimeUnit
+
+class TatakaeScan : Madara(
+ "Tatakae Scan",
+ "https://tatakaescan.com",
+ "pt-BR",
+ SimpleDateFormat("dd 'de' MMMMM 'de' yyyy", Locale("pt", "BR")),
+) {
+
+ override val client: OkHttpClient = super.client.newBuilder()
+ .rateLimit(1, 2, TimeUnit.SECONDS)
+ .build()
+}
diff --git a/multisrc/overrides/madara/taurusfansub/res/mipmap-hdpi/ic_launcher.png b/multisrc/overrides/madara/taurusfansub/res/mipmap-hdpi/ic_launcher.png
new file mode 100644
index 000000000..78a949d83
Binary files /dev/null and b/multisrc/overrides/madara/taurusfansub/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/taurusfansub/res/mipmap-mdpi/ic_launcher.png b/multisrc/overrides/madara/taurusfansub/res/mipmap-mdpi/ic_launcher.png
new file mode 100644
index 000000000..4f2af480c
Binary files /dev/null and b/multisrc/overrides/madara/taurusfansub/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/taurusfansub/res/mipmap-xhdpi/ic_launcher.png b/multisrc/overrides/madara/taurusfansub/res/mipmap-xhdpi/ic_launcher.png
new file mode 100644
index 000000000..5201eaf37
Binary files /dev/null and b/multisrc/overrides/madara/taurusfansub/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/taurusfansub/res/mipmap-xxhdpi/ic_launcher.png b/multisrc/overrides/madara/taurusfansub/res/mipmap-xxhdpi/ic_launcher.png
new file mode 100644
index 000000000..1dd883dac
Binary files /dev/null and b/multisrc/overrides/madara/taurusfansub/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/taurusfansub/res/mipmap-xxxhdpi/ic_launcher.png b/multisrc/overrides/madara/taurusfansub/res/mipmap-xxxhdpi/ic_launcher.png
new file mode 100644
index 000000000..bd68ecf0d
Binary files /dev/null and b/multisrc/overrides/madara/taurusfansub/res/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/taurusfansub/src/TaurusFansub.kt b/multisrc/overrides/madara/taurusfansub/src/TaurusFansub.kt
new file mode 100644
index 000000000..aeb7b6928
--- /dev/null
+++ b/multisrc/overrides/madara/taurusfansub/src/TaurusFansub.kt
@@ -0,0 +1,60 @@
+package eu.kanade.tachiyomi.extension.es.taurusfansub
+
+import eu.kanade.tachiyomi.multisrc.madara.Madara
+import eu.kanade.tachiyomi.network.POST
+import eu.kanade.tachiyomi.network.interceptor.rateLimit
+import okhttp3.FormBody
+import okhttp3.Request
+import java.text.SimpleDateFormat
+import java.util.Locale
+import java.util.concurrent.TimeUnit
+
+class TaurusFansub : Madara(
+ "Taurus Fansub",
+ "https://taurusmanga.com",
+ "es",
+ dateFormat = SimpleDateFormat("dd/MM/yyy", Locale.ROOT),
+) {
+ override val client = super.client.newBuilder()
+ .rateLimit(2, 1, TimeUnit.SECONDS)
+ .build()
+
+ override val useNewChapterEndpoint = true
+
+ override fun popularMangaNextPageSelector() = "body:not(:has(.no-posts))"
+ override val mangaDetailsSelectorDescription = "div.tab-summary > div.tab-content > div#tab-reducir > div.contenedor"
+
+ private fun loadMoreRequest(page: Int, metaKey: String): Request {
+ val formBody = FormBody.Builder().apply {
+ add("action", "madara_load_more")
+ add("page", page.toString())
+ add("template", "madara-core/content/content-archive")
+ add("vars[paged]", "1")
+ add("vars[orderby]", "meta_value_num")
+ add("vars[template]", "archive")
+ add("vars[sidebar]", "right")
+ add("vars[post_type]", "wp-manga")
+ add("vars[post_status]", "publish")
+ add("vars[meta_key]", metaKey)
+ add("vars[order]", "desc")
+ add("vars[meta_query][relation]", "OR")
+ add("vars[manga_archives_item_layout]", "big_thumbnail")
+ }.build()
+
+ val xhrHeaders = headersBuilder()
+ .add("Content-Length", formBody.contentLength().toString())
+ .add("Content-Type", formBody.contentType().toString())
+ .add("X-Requested-With", "XMLHttpRequest")
+ .build()
+
+ return POST("$baseUrl/wp-admin/admin-ajax.php", xhrHeaders, formBody)
+ }
+
+ override fun popularMangaRequest(page: Int): Request {
+ return loadMoreRequest(page - 1, "_wp_manga_views")
+ }
+
+ override fun latestUpdatesRequest(page: Int): Request {
+ return loadMoreRequest(page - 1, "_latest_update")
+ }
+}
diff --git a/multisrc/overrides/madara/teenmanhua/res/mipmap-hdpi/ic_launcher.png b/multisrc/overrides/madara/teenmanhua/res/mipmap-hdpi/ic_launcher.png
new file mode 100644
index 000000000..45cc3d4c7
Binary files /dev/null and b/multisrc/overrides/madara/teenmanhua/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/teenmanhua/res/mipmap-mdpi/ic_launcher.png b/multisrc/overrides/madara/teenmanhua/res/mipmap-mdpi/ic_launcher.png
new file mode 100644
index 000000000..73909ff0d
Binary files /dev/null and b/multisrc/overrides/madara/teenmanhua/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/teenmanhua/res/mipmap-xhdpi/ic_launcher.png b/multisrc/overrides/madara/teenmanhua/res/mipmap-xhdpi/ic_launcher.png
new file mode 100644
index 000000000..94b930f27
Binary files /dev/null and b/multisrc/overrides/madara/teenmanhua/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/teenmanhua/res/mipmap-xxhdpi/ic_launcher.png b/multisrc/overrides/madara/teenmanhua/res/mipmap-xxhdpi/ic_launcher.png
new file mode 100644
index 000000000..2ec88038a
Binary files /dev/null and b/multisrc/overrides/madara/teenmanhua/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/teenmanhua/res/mipmap-xxxhdpi/ic_launcher.png b/multisrc/overrides/madara/teenmanhua/res/mipmap-xxxhdpi/ic_launcher.png
new file mode 100644
index 000000000..69e8e5ac4
Binary files /dev/null and b/multisrc/overrides/madara/teenmanhua/res/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/teenmanhua/src/TeenManhua.kt b/multisrc/overrides/madara/teenmanhua/src/TeenManhua.kt
new file mode 100644
index 000000000..b010c54ee
--- /dev/null
+++ b/multisrc/overrides/madara/teenmanhua/src/TeenManhua.kt
@@ -0,0 +1,14 @@
+package eu.kanade.tachiyomi.extension.en.teenmanhua
+
+import eu.kanade.tachiyomi.multisrc.madara.Madara
+import java.text.SimpleDateFormat
+import java.util.Locale
+
+class TeenManhua : Madara(
+ "TeenManhua",
+ "https://teenmanhua.com",
+ "en",
+ dateFormat = SimpleDateFormat("dd/MM/yy", Locale.US),
+) {
+ override val filterNonMangaItems = false
+}
diff --git a/multisrc/overrides/madara/thebeginningaftertheend/res/mipmap-hdpi/ic_launcher.png b/multisrc/overrides/madara/thebeginningaftertheend/res/mipmap-hdpi/ic_launcher.png
new file mode 100644
index 000000000..b4c72cd68
Binary files /dev/null and b/multisrc/overrides/madara/thebeginningaftertheend/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/thebeginningaftertheend/res/mipmap-mdpi/ic_launcher.png b/multisrc/overrides/madara/thebeginningaftertheend/res/mipmap-mdpi/ic_launcher.png
new file mode 100644
index 000000000..76b9b9ebd
Binary files /dev/null and b/multisrc/overrides/madara/thebeginningaftertheend/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/thebeginningaftertheend/res/mipmap-xhdpi/ic_launcher.png b/multisrc/overrides/madara/thebeginningaftertheend/res/mipmap-xhdpi/ic_launcher.png
new file mode 100644
index 000000000..ad631bdf0
Binary files /dev/null and b/multisrc/overrides/madara/thebeginningaftertheend/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/thebeginningaftertheend/res/mipmap-xxhdpi/ic_launcher.png b/multisrc/overrides/madara/thebeginningaftertheend/res/mipmap-xxhdpi/ic_launcher.png
new file mode 100644
index 000000000..d2617f2a4
Binary files /dev/null and b/multisrc/overrides/madara/thebeginningaftertheend/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/thebeginningaftertheend/res/mipmap-xxxhdpi/ic_launcher.png b/multisrc/overrides/madara/thebeginningaftertheend/res/mipmap-xxxhdpi/ic_launcher.png
new file mode 100644
index 000000000..5e3548dce
Binary files /dev/null and b/multisrc/overrides/madara/thebeginningaftertheend/res/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/thebeginningaftertheend/src/TheBeginningAfterTheEnd.kt b/multisrc/overrides/madara/thebeginningaftertheend/src/TheBeginningAfterTheEnd.kt
new file mode 100644
index 000000000..6d89f4839
--- /dev/null
+++ b/multisrc/overrides/madara/thebeginningaftertheend/src/TheBeginningAfterTheEnd.kt
@@ -0,0 +1,7 @@
+package eu.kanade.tachiyomi.extension.fr.thebeginningaftertheend
+
+import eu.kanade.tachiyomi.multisrc.madara.Madara
+import java.text.SimpleDateFormat
+import java.util.Locale
+
+class TheBeginningAfterTheEnd : Madara("The Beginning After The End", "https://www.thebeginningaftertheend.fr", "fr", SimpleDateFormat("MMMMM dd, yyyy", Locale("fr")))
diff --git a/multisrc/overrides/madara/theblank/res/mipmap-hdpi/ic_launcher.png b/multisrc/overrides/madara/theblank/res/mipmap-hdpi/ic_launcher.png
new file mode 100644
index 000000000..88c253755
Binary files /dev/null and b/multisrc/overrides/madara/theblank/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/theblank/res/mipmap-mdpi/ic_launcher.png b/multisrc/overrides/madara/theblank/res/mipmap-mdpi/ic_launcher.png
new file mode 100644
index 000000000..4c10fb340
Binary files /dev/null and b/multisrc/overrides/madara/theblank/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/theblank/res/mipmap-xhdpi/ic_launcher.png b/multisrc/overrides/madara/theblank/res/mipmap-xhdpi/ic_launcher.png
new file mode 100644
index 000000000..1810a81fc
Binary files /dev/null and b/multisrc/overrides/madara/theblank/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/theblank/res/mipmap-xxhdpi/ic_launcher.png b/multisrc/overrides/madara/theblank/res/mipmap-xxhdpi/ic_launcher.png
new file mode 100644
index 000000000..a57fc1069
Binary files /dev/null and b/multisrc/overrides/madara/theblank/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/theblank/res/mipmap-xxxhdpi/ic_launcher.png b/multisrc/overrides/madara/theblank/res/mipmap-xxxhdpi/ic_launcher.png
new file mode 100644
index 000000000..a2765f05c
Binary files /dev/null and b/multisrc/overrides/madara/theblank/res/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/theblank/src/TheBlank.kt b/multisrc/overrides/madara/theblank/src/TheBlank.kt
new file mode 100644
index 000000000..a28fb4075
--- /dev/null
+++ b/multisrc/overrides/madara/theblank/src/TheBlank.kt
@@ -0,0 +1,47 @@
+package eu.kanade.tachiyomi.extension.en.theblank
+
+import eu.kanade.tachiyomi.multisrc.madara.Madara
+import eu.kanade.tachiyomi.network.interceptor.rateLimit
+import eu.kanade.tachiyomi.source.model.MangasPage
+import okhttp3.Response
+import java.text.SimpleDateFormat
+import java.util.Locale
+
+class TheBlank : Madara(
+ "The Blank Scanlation",
+ "https://theblank.net",
+ "en",
+ dateFormat = SimpleDateFormat("dd/MM/yy", Locale.US),
+) {
+
+ override val client = super.client.newBuilder()
+ .rateLimit(1)
+ .build()
+
+ override val useNewChapterEndpoint = true
+
+ override fun searchPage(page: Int): String {
+ return if (page > 1) {
+ "page/$page/"
+ } else {
+ ""
+ }
+ }
+
+ override fun popularMangaParse(response: Response) =
+ super.popularMangaParse(response).fixNextPage()
+
+ override fun latestUpdatesParse(response: Response) =
+ super.latestUpdatesParse(response).fixNextPage()
+
+ override fun searchMangaParse(response: Response) =
+ super.searchMangaParse(response).fixNextPage()
+
+ private fun MangasPage.fixNextPage(): MangasPage {
+ return if (mangas.size < 12) {
+ MangasPage(mangas, false)
+ } else {
+ this
+ }
+ }
+}
diff --git a/multisrc/overrides/madara/theguild/res/mipmap-hdpi/ic_launcher.png b/multisrc/overrides/madara/theguild/res/mipmap-hdpi/ic_launcher.png
new file mode 100644
index 000000000..613478a7e
Binary files /dev/null and b/multisrc/overrides/madara/theguild/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/theguild/res/mipmap-mdpi/ic_launcher.png b/multisrc/overrides/madara/theguild/res/mipmap-mdpi/ic_launcher.png
new file mode 100644
index 000000000..ece1857b3
Binary files /dev/null and b/multisrc/overrides/madara/theguild/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/theguild/res/mipmap-xhdpi/ic_launcher.png b/multisrc/overrides/madara/theguild/res/mipmap-xhdpi/ic_launcher.png
new file mode 100644
index 000000000..10a9ed5cd
Binary files /dev/null and b/multisrc/overrides/madara/theguild/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/theguild/res/mipmap-xxhdpi/ic_launcher.png b/multisrc/overrides/madara/theguild/res/mipmap-xxhdpi/ic_launcher.png
new file mode 100644
index 000000000..1cb58adff
Binary files /dev/null and b/multisrc/overrides/madara/theguild/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/theguild/res/mipmap-xxxhdpi/ic_launcher.png b/multisrc/overrides/madara/theguild/res/mipmap-xxxhdpi/ic_launcher.png
new file mode 100644
index 000000000..44a089e23
Binary files /dev/null and b/multisrc/overrides/madara/theguild/res/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/threesixtyfivemanga/src/ThreeSixtyFiveManga.kt b/multisrc/overrides/madara/threesixtyfivemanga/src/ThreeSixtyFiveManga.kt
new file mode 100644
index 000000000..0d375b494
--- /dev/null
+++ b/multisrc/overrides/madara/threesixtyfivemanga/src/ThreeSixtyFiveManga.kt
@@ -0,0 +1,10 @@
+package eu.kanade.tachiyomi.extension.en.threesixtyfivemanga
+
+import eu.kanade.tachiyomi.multisrc.madara.Madara
+import eu.kanade.tachiyomi.network.GET
+import okhttp3.Request
+
+class ThreeSixtyFiveManga : Madara("365Manga", "https://365manga.com", "en") {
+ override fun popularMangaRequest(page: Int): Request = GET("$baseUrl/manga/page/$page/?m_orderby=views", headers)
+ override fun latestUpdatesRequest(page: Int): Request = GET("$baseUrl/manga/page/$page/?m_orderby=latest", headers)
+}
diff --git a/multisrc/overrides/madara/timenaight/res/mipmap-hdpi/ic_launcher.png b/multisrc/overrides/madara/timenaight/res/mipmap-hdpi/ic_launcher.png
new file mode 100644
index 000000000..93c644c48
Binary files /dev/null and b/multisrc/overrides/madara/timenaight/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/timenaight/res/mipmap-mdpi/ic_launcher.png b/multisrc/overrides/madara/timenaight/res/mipmap-mdpi/ic_launcher.png
new file mode 100644
index 000000000..8d7cd2897
Binary files /dev/null and b/multisrc/overrides/madara/timenaight/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/timenaight/res/mipmap-xhdpi/ic_launcher.png b/multisrc/overrides/madara/timenaight/res/mipmap-xhdpi/ic_launcher.png
new file mode 100644
index 000000000..3701c266f
Binary files /dev/null and b/multisrc/overrides/madara/timenaight/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/timenaight/res/mipmap-xxhdpi/ic_launcher.png b/multisrc/overrides/madara/timenaight/res/mipmap-xxhdpi/ic_launcher.png
new file mode 100644
index 000000000..8f40cfd25
Binary files /dev/null and b/multisrc/overrides/madara/timenaight/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/timenaight/res/mipmap-xxxhdpi/ic_launcher.png b/multisrc/overrides/madara/timenaight/res/mipmap-xxxhdpi/ic_launcher.png
new file mode 100644
index 000000000..23e949578
Binary files /dev/null and b/multisrc/overrides/madara/timenaight/res/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/todaymic/res/mipmap-hdpi/ic_launcher.png b/multisrc/overrides/madara/todaymic/res/mipmap-hdpi/ic_launcher.png
new file mode 100644
index 000000000..ed0d1af77
Binary files /dev/null and b/multisrc/overrides/madara/todaymic/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/todaymic/res/mipmap-mdpi/ic_launcher.png b/multisrc/overrides/madara/todaymic/res/mipmap-mdpi/ic_launcher.png
new file mode 100644
index 000000000..6f2a32cc4
Binary files /dev/null and b/multisrc/overrides/madara/todaymic/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/todaymic/res/mipmap-xhdpi/ic_launcher.png b/multisrc/overrides/madara/todaymic/res/mipmap-xhdpi/ic_launcher.png
new file mode 100644
index 000000000..1c7715fcc
Binary files /dev/null and b/multisrc/overrides/madara/todaymic/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/todaymic/res/mipmap-xxhdpi/ic_launcher.png b/multisrc/overrides/madara/todaymic/res/mipmap-xxhdpi/ic_launcher.png
new file mode 100644
index 000000000..31614f210
Binary files /dev/null and b/multisrc/overrides/madara/todaymic/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/todaymic/res/mipmap-xxxhdpi/ic_launcher.png b/multisrc/overrides/madara/todaymic/res/mipmap-xxxhdpi/ic_launcher.png
new file mode 100644
index 000000000..8b19bf81d
Binary files /dev/null and b/multisrc/overrides/madara/todaymic/res/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/tonizutoon/res/mipmap-hdpi/ic_launcher.png b/multisrc/overrides/madara/tonizutoon/res/mipmap-hdpi/ic_launcher.png
new file mode 100644
index 000000000..95ca5b266
Binary files /dev/null and b/multisrc/overrides/madara/tonizutoon/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/tonizutoon/res/mipmap-mdpi/ic_launcher.png b/multisrc/overrides/madara/tonizutoon/res/mipmap-mdpi/ic_launcher.png
new file mode 100644
index 000000000..b1408961f
Binary files /dev/null and b/multisrc/overrides/madara/tonizutoon/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/tonizutoon/res/mipmap-xhdpi/ic_launcher.png b/multisrc/overrides/madara/tonizutoon/res/mipmap-xhdpi/ic_launcher.png
new file mode 100644
index 000000000..99f81a56f
Binary files /dev/null and b/multisrc/overrides/madara/tonizutoon/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/tonizutoon/res/mipmap-xxhdpi/ic_launcher.png b/multisrc/overrides/madara/tonizutoon/res/mipmap-xxhdpi/ic_launcher.png
new file mode 100644
index 000000000..d40896f83
Binary files /dev/null and b/multisrc/overrides/madara/tonizutoon/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/tonizutoon/res/mipmap-xxxhdpi/ic_launcher.png b/multisrc/overrides/madara/tonizutoon/res/mipmap-xxxhdpi/ic_launcher.png
new file mode 100644
index 000000000..5c7be4ed7
Binary files /dev/null and b/multisrc/overrides/madara/tonizutoon/res/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/tonizutoon/src/TonizuToon.kt b/multisrc/overrides/madara/tonizutoon/src/TonizuToon.kt
new file mode 100644
index 000000000..65e061210
--- /dev/null
+++ b/multisrc/overrides/madara/tonizutoon/src/TonizuToon.kt
@@ -0,0 +1,12 @@
+package eu.kanade.tachiyomi.extension.tr.tonizutoon
+
+import eu.kanade.tachiyomi.multisrc.madara.Madara
+import java.text.SimpleDateFormat
+import java.util.Locale
+
+class TonizuToon : Madara(
+ "TonizuToon",
+ "https://tonizutoon.com",
+ "tr",
+ SimpleDateFormat("MMMMM d, yyyy", Locale("tr")),
+)
diff --git a/multisrc/overrides/madara/toonchill/res/mipmap-hdpi/ic_launcher.png b/multisrc/overrides/madara/toonchill/res/mipmap-hdpi/ic_launcher.png
new file mode 100644
index 000000000..fb1c0b5e6
Binary files /dev/null and b/multisrc/overrides/madara/toonchill/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/toonchill/res/mipmap-mdpi/ic_launcher.png b/multisrc/overrides/madara/toonchill/res/mipmap-mdpi/ic_launcher.png
new file mode 100644
index 000000000..6fb525d35
Binary files /dev/null and b/multisrc/overrides/madara/toonchill/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/toonchill/res/mipmap-xhdpi/ic_launcher.png b/multisrc/overrides/madara/toonchill/res/mipmap-xhdpi/ic_launcher.png
new file mode 100644
index 000000000..12d9b1e5d
Binary files /dev/null and b/multisrc/overrides/madara/toonchill/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/toonchill/res/mipmap-xxhdpi/ic_launcher.png b/multisrc/overrides/madara/toonchill/res/mipmap-xxhdpi/ic_launcher.png
new file mode 100644
index 000000000..06262b948
Binary files /dev/null and b/multisrc/overrides/madara/toonchill/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/toonchill/res/mipmap-xxxhdpi/ic_launcher.png b/multisrc/overrides/madara/toonchill/res/mipmap-xxxhdpi/ic_launcher.png
new file mode 100644
index 000000000..7a910c0df
Binary files /dev/null and b/multisrc/overrides/madara/toonchill/res/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/toongod/res/mipmap-hdpi/ic_launcher.png b/multisrc/overrides/madara/toongod/res/mipmap-hdpi/ic_launcher.png
new file mode 100644
index 000000000..e6d86155e
Binary files /dev/null and b/multisrc/overrides/madara/toongod/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/toongod/res/mipmap-mdpi/ic_launcher.png b/multisrc/overrides/madara/toongod/res/mipmap-mdpi/ic_launcher.png
new file mode 100644
index 000000000..38ff9f106
Binary files /dev/null and b/multisrc/overrides/madara/toongod/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/toongod/res/mipmap-xhdpi/ic_launcher.png b/multisrc/overrides/madara/toongod/res/mipmap-xhdpi/ic_launcher.png
new file mode 100644
index 000000000..35c99c9d8
Binary files /dev/null and b/multisrc/overrides/madara/toongod/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/toongod/res/mipmap-xxhdpi/ic_launcher.png b/multisrc/overrides/madara/toongod/res/mipmap-xxhdpi/ic_launcher.png
new file mode 100644
index 000000000..daf7264f0
Binary files /dev/null and b/multisrc/overrides/madara/toongod/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/toongod/res/mipmap-xxxhdpi/ic_launcher.png b/multisrc/overrides/madara/toongod/res/mipmap-xxxhdpi/ic_launcher.png
new file mode 100644
index 000000000..ce3df8654
Binary files /dev/null and b/multisrc/overrides/madara/toongod/res/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/toongod/src/ToonGod.kt b/multisrc/overrides/madara/toongod/src/ToonGod.kt
new file mode 100644
index 000000000..9f8bbb409
--- /dev/null
+++ b/multisrc/overrides/madara/toongod/src/ToonGod.kt
@@ -0,0 +1,12 @@
+package eu.kanade.tachiyomi.extension.en.toongod
+
+import eu.kanade.tachiyomi.multisrc.madara.Madara
+import java.text.SimpleDateFormat
+import java.util.Locale
+
+class ToonGod : Madara("ToonGod", "https://www.toongod.org", "en", SimpleDateFormat("d MMM yyyy", Locale.US)) {
+ override val mangaSubString = "webtoons"
+ override val useNewChapterEndpoint = false
+
+ override fun searchPage(page: Int): String = if (page == 1) "" else "page/$page/"
+}
diff --git a/multisrc/overrides/madara/toonily/res/mipmap-hdpi/ic_launcher.png b/multisrc/overrides/madara/toonily/res/mipmap-hdpi/ic_launcher.png
new file mode 100644
index 000000000..b3f0ad673
Binary files /dev/null and b/multisrc/overrides/madara/toonily/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/toonily/res/mipmap-mdpi/ic_launcher.png b/multisrc/overrides/madara/toonily/res/mipmap-mdpi/ic_launcher.png
new file mode 100644
index 000000000..ab5c8f6fe
Binary files /dev/null and b/multisrc/overrides/madara/toonily/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/toonily/res/mipmap-xhdpi/ic_launcher.png b/multisrc/overrides/madara/toonily/res/mipmap-xhdpi/ic_launcher.png
new file mode 100644
index 000000000..da6a4dff0
Binary files /dev/null and b/multisrc/overrides/madara/toonily/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/toonily/res/mipmap-xxhdpi/ic_launcher.png b/multisrc/overrides/madara/toonily/res/mipmap-xxhdpi/ic_launcher.png
new file mode 100644
index 000000000..256f180a2
Binary files /dev/null and b/multisrc/overrides/madara/toonily/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/toonily/res/mipmap-xxxhdpi/ic_launcher.png b/multisrc/overrides/madara/toonily/res/mipmap-xxxhdpi/ic_launcher.png
new file mode 100644
index 000000000..6b38a55f9
Binary files /dev/null and b/multisrc/overrides/madara/toonily/res/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/toonily/src/CookieInterceptor.kt b/multisrc/overrides/madara/toonily/src/CookieInterceptor.kt
new file mode 100644
index 000000000..e73d3f1ba
--- /dev/null
+++ b/multisrc/overrides/madara/toonily/src/CookieInterceptor.kt
@@ -0,0 +1,46 @@
+package eu.kanade.tachiyomi.extension.en.toonily
+
+import android.util.Log
+import android.webkit.CookieManager
+import okhttp3.Interceptor
+import okhttp3.Response
+
+class CookieInterceptor(
+ private val domain: String,
+ private val key: String,
+ private val value: String,
+) : Interceptor {
+
+ init {
+ val url = "https://$domain/"
+ val cookie = "$key=$value; Domain=$domain; Path=/"
+ setCookie(url, cookie)
+ }
+
+ override fun intercept(chain: Interceptor.Chain): Response {
+ val request = chain.request()
+ if (!request.url.host.endsWith(domain)) return chain.proceed(request)
+
+ val cookie = "$key=$value"
+ val cookieList = request.header("Cookie")?.split("; ") ?: emptyList()
+ if (cookie in cookieList) return chain.proceed(request)
+
+ setCookie("https://$domain/", "$cookie; Domain=$domain; Path=/")
+ val prefix = "$key="
+ val newCookie = buildList(cookieList.size + 1) {
+ cookieList.filterNotTo(this) { it.startsWith(prefix) }
+ add(cookie)
+ }.joinToString("; ")
+ val newRequest = request.newBuilder().header("Cookie", newCookie).build()
+ return chain.proceed(newRequest)
+ }
+
+ private fun setCookie(url: String, value: String) {
+ try {
+ CookieManager.getInstance().setCookie(url, value)
+ } catch (e: Exception) {
+ // Probably running on Tachidesk
+ Log.e("Toonily", "failed to set cookie", e)
+ }
+ }
+}
diff --git a/multisrc/overrides/madara/toonily/src/Toonily.kt b/multisrc/overrides/madara/toonily/src/Toonily.kt
new file mode 100644
index 000000000..f8c2bafe0
--- /dev/null
+++ b/multisrc/overrides/madara/toonily/src/Toonily.kt
@@ -0,0 +1,89 @@
+package eu.kanade.tachiyomi.extension.en.toonily
+
+import eu.kanade.tachiyomi.multisrc.madara.Madara
+import eu.kanade.tachiyomi.network.GET
+import eu.kanade.tachiyomi.source.model.FilterList
+import okhttp3.HttpUrl.Companion.toHttpUrlOrNull
+import okhttp3.OkHttpClient
+import okhttp3.Request
+import java.text.SimpleDateFormat
+import java.util.Locale
+
+private const val domain = "toonily.com"
+class Toonily : Madara(
+ "Toonily",
+ "https://$domain",
+ "en",
+ SimpleDateFormat("MMM d, yy", Locale.US),
+) {
+
+ private val cookieInterceptor = CookieInterceptor(domain, "toonily-mature", "1")
+ override val client: OkHttpClient = super.client.newBuilder()
+ .addNetworkInterceptor(cookieInterceptor)
+ .build()
+
+ override val mangaSubString = "webtoon"
+
+ override fun searchPage(page: Int): String {
+ return if (page > 1) {
+ "page/$page/"
+ } else {
+ ""
+ }
+ }
+
+ private fun searchPage(page: Int, query: String): String {
+ val urlQuery = query.trim()
+ .lowercase(Locale.US)
+ .replace(titleSpecialCharactersRegex, "-")
+ .replace(trailingHyphenRegex, "")
+ .let { if (it.isNotEmpty()) "$it/" else it }
+ return if (page > 1) {
+ "search/${urlQuery}page/$page/"
+ } else {
+ "search/$urlQuery"
+ }
+ }
+
+ override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request {
+ val request = super.searchMangaRequest(page, query, filters)
+
+ val queries = request.url.queryParameterNames
+ .filterNot { it == "s" }
+
+ val newUrl = "$baseUrl/${searchPage(page, query)}".toHttpUrlOrNull()!!.newBuilder().apply {
+ queries.map { q ->
+ request.url.queryParameterValues(q).map {
+ this.addQueryParameter(q, it)
+ }
+ }
+ }.build()
+
+ return request.newBuilder()
+ .url(newUrl)
+ .build()
+ }
+
+ override fun genresRequest(): Request {
+ return GET("$baseUrl/search/?post_type=wp-manga", headers)
+ }
+
+ // The source customized the Madara theme and broke the filter.
+ override val filterNonMangaItems = false
+
+ override val useNewChapterEndpoint: Boolean = true
+
+ override fun searchMangaSelector() = "div.page-item-detail.manga"
+
+ override val pageListParseSelector = "div.reading-content div"
+
+ override fun parseChapterDate(date: String?): Long {
+ val formattedDate = if (date?.contains("UP") == true) "today" else date
+ return super.parseChapterDate(formattedDate)
+ }
+
+ companion object {
+ val titleSpecialCharactersRegex = "[^a-z0-9]+".toRegex()
+ val trailingHyphenRegex = "-+$".toRegex()
+ }
+}
diff --git a/multisrc/overrides/madara/toonizy/res/mipmap-hdpi/ic_launcher.png b/multisrc/overrides/madara/toonizy/res/mipmap-hdpi/ic_launcher.png
new file mode 100644
index 000000000..85890f979
Binary files /dev/null and b/multisrc/overrides/madara/toonizy/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/toonizy/res/mipmap-mdpi/ic_launcher.png b/multisrc/overrides/madara/toonizy/res/mipmap-mdpi/ic_launcher.png
new file mode 100644
index 000000000..c78e313f0
Binary files /dev/null and b/multisrc/overrides/madara/toonizy/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/toonizy/res/mipmap-xhdpi/ic_launcher.png b/multisrc/overrides/madara/toonizy/res/mipmap-xhdpi/ic_launcher.png
new file mode 100644
index 000000000..2d21e7e90
Binary files /dev/null and b/multisrc/overrides/madara/toonizy/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/toonizy/res/mipmap-xxhdpi/ic_launcher.png b/multisrc/overrides/madara/toonizy/res/mipmap-xxhdpi/ic_launcher.png
new file mode 100644
index 000000000..edcac38ca
Binary files /dev/null and b/multisrc/overrides/madara/toonizy/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/toonizy/res/mipmap-xxxhdpi/ic_launcher.png b/multisrc/overrides/madara/toonizy/res/mipmap-xxxhdpi/ic_launcher.png
new file mode 100644
index 000000000..9c722cb0e
Binary files /dev/null and b/multisrc/overrides/madara/toonizy/res/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/toonizy/src/Toonizy.kt b/multisrc/overrides/madara/toonizy/src/Toonizy.kt
new file mode 100644
index 000000000..fce888281
--- /dev/null
+++ b/multisrc/overrides/madara/toonizy/src/Toonizy.kt
@@ -0,0 +1,16 @@
+package eu.kanade.tachiyomi.extension.en.toonizy
+
+import eu.kanade.tachiyomi.multisrc.madara.Madara
+import java.text.SimpleDateFormat
+import java.util.Locale
+
+class Toonizy : Madara(
+ "Toonizy",
+ "https://toonizy.com",
+ "en",
+ dateFormat = SimpleDateFormat("MMM d, yy", Locale.ENGLISH),
+) {
+ override val useNewChapterEndpoint = true
+
+ override fun searchPage(page: Int): String = if (page == 1) "" else "page/$page/"
+}
diff --git a/multisrc/overrides/madara/toonmany/res/mipmap-hdpi/ic_launcher.png b/multisrc/overrides/madara/toonmany/res/mipmap-hdpi/ic_launcher.png
new file mode 100644
index 000000000..5c143058e
Binary files /dev/null and b/multisrc/overrides/madara/toonmany/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/toonmany/res/mipmap-mdpi/ic_launcher.png b/multisrc/overrides/madara/toonmany/res/mipmap-mdpi/ic_launcher.png
new file mode 100644
index 000000000..365f45fce
Binary files /dev/null and b/multisrc/overrides/madara/toonmany/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/toonmany/res/mipmap-xhdpi/ic_launcher.png b/multisrc/overrides/madara/toonmany/res/mipmap-xhdpi/ic_launcher.png
new file mode 100644
index 000000000..34b071227
Binary files /dev/null and b/multisrc/overrides/madara/toonmany/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/toonmany/res/mipmap-xxhdpi/ic_launcher.png b/multisrc/overrides/madara/toonmany/res/mipmap-xxhdpi/ic_launcher.png
new file mode 100644
index 000000000..2cba52706
Binary files /dev/null and b/multisrc/overrides/madara/toonmany/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/toonmany/res/mipmap-xxxhdpi/ic_launcher.png b/multisrc/overrides/madara/toonmany/res/mipmap-xxxhdpi/ic_launcher.png
new file mode 100644
index 000000000..69bddcb46
Binary files /dev/null and b/multisrc/overrides/madara/toonmany/res/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/toonmany/src/ToonMany.kt b/multisrc/overrides/madara/toonmany/src/ToonMany.kt
new file mode 100644
index 000000000..a2128f8de
--- /dev/null
+++ b/multisrc/overrides/madara/toonmany/src/ToonMany.kt
@@ -0,0 +1,7 @@
+package eu.kanade.tachiyomi.extension.en.toonmany
+
+import eu.kanade.tachiyomi.multisrc.madara.Madara
+import java.text.SimpleDateFormat
+import java.util.Locale
+
+class ToonMany : Madara("ToonMany", "https://toonmany.com", "en", dateFormat = SimpleDateFormat("MMMM d, yyyy", Locale.US))
diff --git a/multisrc/overrides/madara/topmanhua/res/mipmap-hdpi/ic_launcher.png b/multisrc/overrides/madara/topmanhua/res/mipmap-hdpi/ic_launcher.png
new file mode 100644
index 000000000..9ed6f05a7
Binary files /dev/null and b/multisrc/overrides/madara/topmanhua/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/topmanhua/res/mipmap-mdpi/ic_launcher.png b/multisrc/overrides/madara/topmanhua/res/mipmap-mdpi/ic_launcher.png
new file mode 100644
index 000000000..472e50e31
Binary files /dev/null and b/multisrc/overrides/madara/topmanhua/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/topmanhua/res/mipmap-xhdpi/ic_launcher.png b/multisrc/overrides/madara/topmanhua/res/mipmap-xhdpi/ic_launcher.png
new file mode 100644
index 000000000..3aa7a50bb
Binary files /dev/null and b/multisrc/overrides/madara/topmanhua/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/topmanhua/res/mipmap-xxhdpi/ic_launcher.png b/multisrc/overrides/madara/topmanhua/res/mipmap-xxhdpi/ic_launcher.png
new file mode 100644
index 000000000..703f0df3d
Binary files /dev/null and b/multisrc/overrides/madara/topmanhua/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/topmanhua/res/mipmap-xxxhdpi/ic_launcher.png b/multisrc/overrides/madara/topmanhua/res/mipmap-xxxhdpi/ic_launcher.png
new file mode 100644
index 000000000..879c77e5b
Binary files /dev/null and b/multisrc/overrides/madara/topmanhua/res/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/topmanhua/src/TopManhua.kt b/multisrc/overrides/madara/topmanhua/src/TopManhua.kt
new file mode 100644
index 000000000..4a8b4a366
--- /dev/null
+++ b/multisrc/overrides/madara/topmanhua/src/TopManhua.kt
@@ -0,0 +1,10 @@
+package eu.kanade.tachiyomi.extension.en.topmanhua
+
+import eu.kanade.tachiyomi.multisrc.madara.Madara
+import java.text.SimpleDateFormat
+import java.util.Locale
+
+class TopManhua : Madara("Top Manhua", "https://topmanhua.com", "en", SimpleDateFormat("MM/dd/yy", Locale.US)) {
+ // The website does not flag the content.
+ override val filterNonMangaItems = false
+}
diff --git a/multisrc/overrides/madara/topreadmanhwa/res/mipmap-hdpi/ic_launcher.png b/multisrc/overrides/madara/topreadmanhwa/res/mipmap-hdpi/ic_launcher.png
new file mode 100644
index 000000000..5dbb6b0b3
Binary files /dev/null and b/multisrc/overrides/madara/topreadmanhwa/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/topreadmanhwa/res/mipmap-mdpi/ic_launcher.png b/multisrc/overrides/madara/topreadmanhwa/res/mipmap-mdpi/ic_launcher.png
new file mode 100644
index 000000000..0292c1856
Binary files /dev/null and b/multisrc/overrides/madara/topreadmanhwa/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/topreadmanhwa/res/mipmap-xhdpi/ic_launcher.png b/multisrc/overrides/madara/topreadmanhwa/res/mipmap-xhdpi/ic_launcher.png
new file mode 100644
index 000000000..ea170dec2
Binary files /dev/null and b/multisrc/overrides/madara/topreadmanhwa/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/topreadmanhwa/res/mipmap-xxhdpi/ic_launcher.png b/multisrc/overrides/madara/topreadmanhwa/res/mipmap-xxhdpi/ic_launcher.png
new file mode 100644
index 000000000..41948cbe5
Binary files /dev/null and b/multisrc/overrides/madara/topreadmanhwa/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/topreadmanhwa/res/mipmap-xxxhdpi/ic_launcher.png b/multisrc/overrides/madara/topreadmanhwa/res/mipmap-xxxhdpi/ic_launcher.png
new file mode 100644
index 000000000..6c2749808
Binary files /dev/null and b/multisrc/overrides/madara/topreadmanhwa/res/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/topreadmanhwa/src/TopReadManhwa.kt b/multisrc/overrides/madara/topreadmanhwa/src/TopReadManhwa.kt
new file mode 100644
index 000000000..c73820f18
--- /dev/null
+++ b/multisrc/overrides/madara/topreadmanhwa/src/TopReadManhwa.kt
@@ -0,0 +1,56 @@
+package eu.kanade.tachiyomi.extension.en.topreadmanhwa
+
+import eu.kanade.tachiyomi.multisrc.madara.Madara
+import eu.kanade.tachiyomi.network.interceptor.rateLimit
+import eu.kanade.tachiyomi.source.model.SManga
+import okhttp3.OkHttpClient
+import org.jsoup.nodes.Document
+import java.text.SimpleDateFormat
+import java.util.Locale
+
+class TopReadManhwa : Madara(
+ "TopReadManhwa",
+ "https://topreadmanhwa.com",
+ "en",
+ SimpleDateFormat("MM/dd/yyyy", Locale.ENGLISH),
+) {
+
+ override val client: OkHttpClient = super.client.newBuilder()
+ .rateLimit(1)
+ .build()
+
+ override val useNewChapterEndpoint = true
+
+ // Popular
+
+ override val mangaEntrySelector = ""
+
+ override val popularMangaUrlSelector = "div.post-title a:not([target])"
+
+ // Details
+
+ private val descriptionSelector = "div.description-summary div.summary__content h3:contains(description) + *"
+
+ override val mangaDetailsSelectorDescription = "$descriptionSelector, ${super.mangaDetailsSelectorDescription}"
+
+ override fun mangaDetailsParse(document: Document): SManga {
+ return super.mangaDetailsParse(document).apply {
+ document.selectFirst(descriptionSelector)?.run {
+ description = "${text().trim()}\n\n$description"
+ }
+
+ // Attempt to filter out things that aren't part of the series description
+ description = description?.run {
+ split("\n\n").filterNot { block ->
+ block.contains("topreadmanhwa", true) ||
+ block.contains("topreadmanwha", true) ||
+ block.contains("Please share your thoughts", true) ||
+ block.contains("If you're a fan of", true) ||
+ block.contains("Happy reading", true)
+ }
+ .distinct() // Edge case where the element in `descriptionSelector` can contain tags
+ .joinToString("\n\n")
+ }
+ }
+ }
+}
diff --git a/multisrc/overrides/madara/tortugaceviri/res/mipmap-hdpi/ic_launcher.png b/multisrc/overrides/madara/tortugaceviri/res/mipmap-hdpi/ic_launcher.png
new file mode 100644
index 000000000..67a788392
Binary files /dev/null and b/multisrc/overrides/madara/tortugaceviri/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/tortugaceviri/res/mipmap-mdpi/ic_launcher.png b/multisrc/overrides/madara/tortugaceviri/res/mipmap-mdpi/ic_launcher.png
new file mode 100644
index 000000000..e49baf93d
Binary files /dev/null and b/multisrc/overrides/madara/tortugaceviri/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/tortugaceviri/res/mipmap-xhdpi/ic_launcher.png b/multisrc/overrides/madara/tortugaceviri/res/mipmap-xhdpi/ic_launcher.png
new file mode 100644
index 000000000..a86e9334a
Binary files /dev/null and b/multisrc/overrides/madara/tortugaceviri/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/tortugaceviri/res/mipmap-xxhdpi/ic_launcher.png b/multisrc/overrides/madara/tortugaceviri/res/mipmap-xxhdpi/ic_launcher.png
new file mode 100644
index 000000000..17701943e
Binary files /dev/null and b/multisrc/overrides/madara/tortugaceviri/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/tortugaceviri/res/mipmap-xxxhdpi/ic_launcher.png b/multisrc/overrides/madara/tortugaceviri/res/mipmap-xxxhdpi/ic_launcher.png
new file mode 100644
index 000000000..d90dc4aca
Binary files /dev/null and b/multisrc/overrides/madara/tortugaceviri/res/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/tortugaceviri/src/TortugaCeviri.kt b/multisrc/overrides/madara/tortugaceviri/src/TortugaCeviri.kt
new file mode 100644
index 000000000..8c2d25b2e
--- /dev/null
+++ b/multisrc/overrides/madara/tortugaceviri/src/TortugaCeviri.kt
@@ -0,0 +1,21 @@
+package eu.kanade.tachiyomi.extension.tr.tortugaceviri
+
+import eu.kanade.tachiyomi.multisrc.madara.Madara
+import eu.kanade.tachiyomi.source.model.SChapter
+import okhttp3.Response
+import java.text.SimpleDateFormat
+import java.util.Locale
+
+class TortugaCeviri : Madara(
+ "Tortuga Ceviri",
+ "https://tortuga-ceviri.com",
+ "tr",
+ SimpleDateFormat("MMM d, yyy", Locale("tr")),
+) {
+ override val versionId = 2
+
+ override val useNewChapterEndpoint = true
+
+ override fun chapterListParse(response: Response): List =
+ super.chapterListParse(response).reversed()
+}
diff --git a/multisrc/overrides/madara/traduccionesmoonlight/res/mipmap-hdpi/ic_launcher.png b/multisrc/overrides/madara/traduccionesmoonlight/res/mipmap-hdpi/ic_launcher.png
new file mode 100644
index 000000000..08728fdd4
Binary files /dev/null and b/multisrc/overrides/madara/traduccionesmoonlight/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/traduccionesmoonlight/res/mipmap-mdpi/ic_launcher.png b/multisrc/overrides/madara/traduccionesmoonlight/res/mipmap-mdpi/ic_launcher.png
new file mode 100644
index 000000000..c14c3fc3e
Binary files /dev/null and b/multisrc/overrides/madara/traduccionesmoonlight/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/traduccionesmoonlight/res/mipmap-xhdpi/ic_launcher.png b/multisrc/overrides/madara/traduccionesmoonlight/res/mipmap-xhdpi/ic_launcher.png
new file mode 100644
index 000000000..75c19dac2
Binary files /dev/null and b/multisrc/overrides/madara/traduccionesmoonlight/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/traduccionesmoonlight/res/mipmap-xxhdpi/ic_launcher.png b/multisrc/overrides/madara/traduccionesmoonlight/res/mipmap-xxhdpi/ic_launcher.png
new file mode 100644
index 000000000..ffd393279
Binary files /dev/null and b/multisrc/overrides/madara/traduccionesmoonlight/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/traduccionesmoonlight/res/mipmap-xxxhdpi/ic_launcher.png b/multisrc/overrides/madara/traduccionesmoonlight/res/mipmap-xxxhdpi/ic_launcher.png
new file mode 100644
index 000000000..d661e5611
Binary files /dev/null and b/multisrc/overrides/madara/traduccionesmoonlight/res/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/traduccionesmoonlight/src/TraduccionesMoonlight.kt b/multisrc/overrides/madara/traduccionesmoonlight/src/TraduccionesMoonlight.kt
new file mode 100644
index 000000000..6d2040556
--- /dev/null
+++ b/multisrc/overrides/madara/traduccionesmoonlight/src/TraduccionesMoonlight.kt
@@ -0,0 +1,14 @@
+package eu.kanade.tachiyomi.extension.es.traduccionesmoonlight
+
+import eu.kanade.tachiyomi.multisrc.madara.Madara
+import java.text.SimpleDateFormat
+import java.util.Locale
+
+class TraduccionesMoonlight : Madara(
+ "Traducciones Moonlight",
+ "https://traduccionesmoonlight.com",
+ "es",
+ SimpleDateFormat("dd 'de' MMMM 'de' yyyy", Locale("es")),
+) {
+ override val useNewChapterEndpoint = true
+}
diff --git a/multisrc/overrides/madara/treemanga/res/mipmap-hdpi/ic_launcher.png b/multisrc/overrides/madara/treemanga/res/mipmap-hdpi/ic_launcher.png
new file mode 100644
index 000000000..bdebbe85b
Binary files /dev/null and b/multisrc/overrides/madara/treemanga/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/treemanga/res/mipmap-mdpi/ic_launcher.png b/multisrc/overrides/madara/treemanga/res/mipmap-mdpi/ic_launcher.png
new file mode 100644
index 000000000..e1a976c4b
Binary files /dev/null and b/multisrc/overrides/madara/treemanga/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/treemanga/res/mipmap-xhdpi/ic_launcher.png b/multisrc/overrides/madara/treemanga/res/mipmap-xhdpi/ic_launcher.png
new file mode 100644
index 000000000..ad0081d04
Binary files /dev/null and b/multisrc/overrides/madara/treemanga/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/treemanga/res/mipmap-xxhdpi/ic_launcher.png b/multisrc/overrides/madara/treemanga/res/mipmap-xxhdpi/ic_launcher.png
new file mode 100644
index 000000000..cfa0f92cf
Binary files /dev/null and b/multisrc/overrides/madara/treemanga/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/treemanga/res/mipmap-xxxhdpi/ic_launcher.png b/multisrc/overrides/madara/treemanga/res/mipmap-xxxhdpi/ic_launcher.png
new file mode 100644
index 000000000..d0c308d10
Binary files /dev/null and b/multisrc/overrides/madara/treemanga/res/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/treemanga/src/TreeManga.kt b/multisrc/overrides/madara/treemanga/src/TreeManga.kt
new file mode 100644
index 000000000..89fe92eb4
--- /dev/null
+++ b/multisrc/overrides/madara/treemanga/src/TreeManga.kt
@@ -0,0 +1,14 @@
+package eu.kanade.tachiyomi.extension.en.treemanga
+
+import eu.kanade.tachiyomi.multisrc.madara.Madara
+import java.text.SimpleDateFormat
+import java.util.Locale
+
+class TreeManga : Madara(
+ "TreeManga",
+ "https://treemanga.com",
+ "en",
+ dateFormat = SimpleDateFormat("dd/MM/yy", Locale.US),
+) {
+ override val useNewChapterEndpoint: Boolean = true
+}
diff --git a/multisrc/overrides/madara/tritiniascans/res/mipmap-hdpi/ic_launcher.png b/multisrc/overrides/madara/tritiniascans/res/mipmap-hdpi/ic_launcher.png
new file mode 100644
index 000000000..524ee5585
Binary files /dev/null and b/multisrc/overrides/madara/tritiniascans/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/tritiniascans/res/mipmap-mdpi/ic_launcher.png b/multisrc/overrides/madara/tritiniascans/res/mipmap-mdpi/ic_launcher.png
new file mode 100644
index 000000000..c5096fc41
Binary files /dev/null and b/multisrc/overrides/madara/tritiniascans/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/tritiniascans/res/mipmap-xhdpi/ic_launcher.png b/multisrc/overrides/madara/tritiniascans/res/mipmap-xhdpi/ic_launcher.png
new file mode 100644
index 000000000..d64fe93ac
Binary files /dev/null and b/multisrc/overrides/madara/tritiniascans/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/tritiniascans/res/mipmap-xxhdpi/ic_launcher.png b/multisrc/overrides/madara/tritiniascans/res/mipmap-xxhdpi/ic_launcher.png
new file mode 100644
index 000000000..b269e9563
Binary files /dev/null and b/multisrc/overrides/madara/tritiniascans/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/tritiniascans/res/mipmap-xxxhdpi/ic_launcher.png b/multisrc/overrides/madara/tritiniascans/res/mipmap-xxxhdpi/ic_launcher.png
new file mode 100644
index 000000000..34860c311
Binary files /dev/null and b/multisrc/overrides/madara/tritiniascans/res/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/tumangaonlinesite/res/mipmap-hdpi/ic_launcher.png b/multisrc/overrides/madara/tumangaonlinesite/res/mipmap-hdpi/ic_launcher.png
new file mode 100644
index 000000000..78db0b435
Binary files /dev/null and b/multisrc/overrides/madara/tumangaonlinesite/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/tumangaonlinesite/res/mipmap-mdpi/ic_launcher.png b/multisrc/overrides/madara/tumangaonlinesite/res/mipmap-mdpi/ic_launcher.png
new file mode 100644
index 000000000..eba97e08e
Binary files /dev/null and b/multisrc/overrides/madara/tumangaonlinesite/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/tumangaonlinesite/res/mipmap-xhdpi/ic_launcher.png b/multisrc/overrides/madara/tumangaonlinesite/res/mipmap-xhdpi/ic_launcher.png
new file mode 100644
index 000000000..834e846d2
Binary files /dev/null and b/multisrc/overrides/madara/tumangaonlinesite/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/tumangaonlinesite/res/mipmap-xxhdpi/ic_launcher.png b/multisrc/overrides/madara/tumangaonlinesite/res/mipmap-xxhdpi/ic_launcher.png
new file mode 100644
index 000000000..61f4b2625
Binary files /dev/null and b/multisrc/overrides/madara/tumangaonlinesite/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/tumangaonlinesite/res/mipmap-xxxhdpi/ic_launcher.png b/multisrc/overrides/madara/tumangaonlinesite/res/mipmap-xxxhdpi/ic_launcher.png
new file mode 100644
index 000000000..7df9a76fc
Binary files /dev/null and b/multisrc/overrides/madara/tumangaonlinesite/res/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/tumangaonlinesite/src/TumangaonlineSite.kt b/multisrc/overrides/madara/tumangaonlinesite/src/TumangaonlineSite.kt
new file mode 100644
index 000000000..ce198f75b
--- /dev/null
+++ b/multisrc/overrides/madara/tumangaonlinesite/src/TumangaonlineSite.kt
@@ -0,0 +1,7 @@
+package eu.kanade.tachiyomi.extension.es.tumangaonlinesite
+
+import eu.kanade.tachiyomi.multisrc.madara.Madara
+import java.text.SimpleDateFormat
+import java.util.Locale
+
+class TumangaonlineSite : Madara("Tumangaonline.site", "https://tumangaonline.site", "es", SimpleDateFormat("dd MMMMM, yyyy", Locale("es")))
diff --git a/multisrc/overrides/madara/unitoon/res/mipmap-hdpi/ic_launcher.png b/multisrc/overrides/madara/unitoon/res/mipmap-hdpi/ic_launcher.png
new file mode 100644
index 000000000..289df8287
Binary files /dev/null and b/multisrc/overrides/madara/unitoon/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/unitoon/res/mipmap-mdpi/ic_launcher.png b/multisrc/overrides/madara/unitoon/res/mipmap-mdpi/ic_launcher.png
new file mode 100644
index 000000000..376927990
Binary files /dev/null and b/multisrc/overrides/madara/unitoon/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/unitoon/res/mipmap-xhdpi/ic_launcher.png b/multisrc/overrides/madara/unitoon/res/mipmap-xhdpi/ic_launcher.png
new file mode 100644
index 000000000..f63ace60c
Binary files /dev/null and b/multisrc/overrides/madara/unitoon/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/unitoon/res/mipmap-xxhdpi/ic_launcher.png b/multisrc/overrides/madara/unitoon/res/mipmap-xxhdpi/ic_launcher.png
new file mode 100644
index 000000000..7d1709c7f
Binary files /dev/null and b/multisrc/overrides/madara/unitoon/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/unitoon/res/mipmap-xxxhdpi/ic_launcher.png b/multisrc/overrides/madara/unitoon/res/mipmap-xxxhdpi/ic_launcher.png
new file mode 100644
index 000000000..ce25768b1
Binary files /dev/null and b/multisrc/overrides/madara/unitoon/res/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/unitoon/src/Unitoon.kt b/multisrc/overrides/madara/unitoon/src/Unitoon.kt
new file mode 100644
index 000000000..4f6c3fb27
--- /dev/null
+++ b/multisrc/overrides/madara/unitoon/src/Unitoon.kt
@@ -0,0 +1,19 @@
+package eu.kanade.tachiyomi.extension.es.unitoon
+
+import eu.kanade.tachiyomi.multisrc.madara.Madara
+import eu.kanade.tachiyomi.network.interceptor.rateLimit
+import java.text.SimpleDateFormat
+import java.util.Locale
+
+class Unitoon : Madara(
+ "Unitoon",
+ "https://lectorunitoon.com",
+ "es",
+ SimpleDateFormat("dd/MM/yyyy", Locale("es")),
+) {
+ override val client = super.client.newBuilder()
+ .rateLimit(2, 1)
+ .build()
+
+ override val useNewChapterEndpoint = true
+}
diff --git a/multisrc/overrides/madara/unitoonoficial/res/mipmap-hdpi/ic_launcher.png b/multisrc/overrides/madara/unitoonoficial/res/mipmap-hdpi/ic_launcher.png
new file mode 100644
index 000000000..9197367c7
Binary files /dev/null and b/multisrc/overrides/madara/unitoonoficial/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/unitoonoficial/res/mipmap-mdpi/ic_launcher.png b/multisrc/overrides/madara/unitoonoficial/res/mipmap-mdpi/ic_launcher.png
new file mode 100644
index 000000000..6fb6d4103
Binary files /dev/null and b/multisrc/overrides/madara/unitoonoficial/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/unitoonoficial/res/mipmap-xhdpi/ic_launcher.png b/multisrc/overrides/madara/unitoonoficial/res/mipmap-xhdpi/ic_launcher.png
new file mode 100644
index 000000000..0d1d4ac36
Binary files /dev/null and b/multisrc/overrides/madara/unitoonoficial/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/unitoonoficial/res/mipmap-xxhdpi/ic_launcher.png b/multisrc/overrides/madara/unitoonoficial/res/mipmap-xxhdpi/ic_launcher.png
new file mode 100644
index 000000000..21a2f11b0
Binary files /dev/null and b/multisrc/overrides/madara/unitoonoficial/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/unitoonoficial/res/mipmap-xxxhdpi/ic_launcher.png b/multisrc/overrides/madara/unitoonoficial/res/mipmap-xxxhdpi/ic_launcher.png
new file mode 100644
index 000000000..35cd506f5
Binary files /dev/null and b/multisrc/overrides/madara/unitoonoficial/res/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/unitoonoficial/src/UnitoonOficial.kt b/multisrc/overrides/madara/unitoonoficial/src/UnitoonOficial.kt
new file mode 100644
index 000000000..428f4f1c3
--- /dev/null
+++ b/multisrc/overrides/madara/unitoonoficial/src/UnitoonOficial.kt
@@ -0,0 +1,14 @@
+package eu.kanade.tachiyomi.extension.es.unitoonoficial
+
+import eu.kanade.tachiyomi.multisrc.madara.Madara
+import java.text.SimpleDateFormat
+import java.util.Locale
+
+class UnitoonOficial : Madara(
+ "Unitoon Oficial",
+ "https://unitoonoficial.com",
+ "es",
+ SimpleDateFormat("dd/MM/yyyy", Locale("es")),
+) {
+ override val useNewChapterEndpoint = true
+}
diff --git a/multisrc/overrides/madara/valkyriescan/src/ValkyrieScan.kt b/multisrc/overrides/madara/valkyriescan/src/ValkyrieScan.kt
new file mode 100644
index 000000000..ca30cc10d
--- /dev/null
+++ b/multisrc/overrides/madara/valkyriescan/src/ValkyrieScan.kt
@@ -0,0 +1,24 @@
+package eu.kanade.tachiyomi.extension.pt.valkyriescan
+
+import eu.kanade.tachiyomi.multisrc.madara.Madara
+import eu.kanade.tachiyomi.network.interceptor.rateLimit
+import okhttp3.OkHttpClient
+import java.text.SimpleDateFormat
+import java.util.Locale
+import java.util.concurrent.TimeUnit
+
+class ValkyrieScan : Madara(
+ "Valkyrie Scan",
+ "https://valkyriescan.com",
+ "pt-BR",
+ SimpleDateFormat("dd/MM/yyyy", Locale("pt", "BR")),
+) {
+
+ override val client: OkHttpClient = super.client.newBuilder()
+ .rateLimit(1, 2, TimeUnit.SECONDS)
+ .build()
+
+ override val useNewChapterEndpoint = true
+
+ override val popularMangaUrlSelector = "div.post-title a:not([target])"
+}
diff --git a/multisrc/overrides/madara/vermanhwas/res/mipmap-hdpi/ic_launcher.png b/multisrc/overrides/madara/vermanhwas/res/mipmap-hdpi/ic_launcher.png
new file mode 100644
index 000000000..0be9eb8c0
Binary files /dev/null and b/multisrc/overrides/madara/vermanhwas/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/vermanhwas/res/mipmap-mdpi/ic_launcher.png b/multisrc/overrides/madara/vermanhwas/res/mipmap-mdpi/ic_launcher.png
new file mode 100644
index 000000000..92c3540e2
Binary files /dev/null and b/multisrc/overrides/madara/vermanhwas/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/vermanhwas/res/mipmap-xhdpi/ic_launcher.png b/multisrc/overrides/madara/vermanhwas/res/mipmap-xhdpi/ic_launcher.png
new file mode 100644
index 000000000..995cd33c3
Binary files /dev/null and b/multisrc/overrides/madara/vermanhwas/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/vermanhwas/res/mipmap-xxhdpi/ic_launcher.png b/multisrc/overrides/madara/vermanhwas/res/mipmap-xxhdpi/ic_launcher.png
new file mode 100644
index 000000000..de589b591
Binary files /dev/null and b/multisrc/overrides/madara/vermanhwas/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/vermanhwas/res/mipmap-xxxhdpi/ic_launcher.png b/multisrc/overrides/madara/vermanhwas/res/mipmap-xxxhdpi/ic_launcher.png
new file mode 100644
index 000000000..471213985
Binary files /dev/null and b/multisrc/overrides/madara/vermanhwas/res/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/vermanhwas/src/VerManhwas.kt b/multisrc/overrides/madara/vermanhwas/src/VerManhwas.kt
new file mode 100644
index 000000000..767616ad6
--- /dev/null
+++ b/multisrc/overrides/madara/vermanhwas/src/VerManhwas.kt
@@ -0,0 +1,20 @@
+package eu.kanade.tachiyomi.extension.es.vermanhwas
+
+import eu.kanade.tachiyomi.multisrc.madara.Madara
+import eu.kanade.tachiyomi.network.GET
+import okhttp3.Request
+import java.text.SimpleDateFormat
+import java.util.Locale
+
+class VerManhwas : Madara(
+ "Ver Manhwas",
+ "https://vermanhwa.es",
+ "es",
+ dateFormat = SimpleDateFormat("MMMM d, yyyy", Locale("es")),
+) {
+ override val useNewChapterEndpoint = true
+
+ override fun genresRequest(): Request {
+ return GET("$baseUrl/?s=&post_type=wp-manga", headers)
+ }
+}
diff --git a/multisrc/overrides/madara/vinmanga/res/mipmap-hdpi/ic_launcher.png b/multisrc/overrides/madara/vinmanga/res/mipmap-hdpi/ic_launcher.png
new file mode 100644
index 000000000..9b55a1786
Binary files /dev/null and b/multisrc/overrides/madara/vinmanga/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/vinmanga/res/mipmap-mdpi/ic_launcher.png b/multisrc/overrides/madara/vinmanga/res/mipmap-mdpi/ic_launcher.png
new file mode 100644
index 000000000..0ca83e94e
Binary files /dev/null and b/multisrc/overrides/madara/vinmanga/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/vinmanga/res/mipmap-xhdpi/ic_launcher.png b/multisrc/overrides/madara/vinmanga/res/mipmap-xhdpi/ic_launcher.png
new file mode 100644
index 000000000..8e2e31cf5
Binary files /dev/null and b/multisrc/overrides/madara/vinmanga/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/vinmanga/res/mipmap-xxhdpi/ic_launcher.png b/multisrc/overrides/madara/vinmanga/res/mipmap-xxhdpi/ic_launcher.png
new file mode 100644
index 000000000..1bd35a034
Binary files /dev/null and b/multisrc/overrides/madara/vinmanga/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/vinmanga/res/mipmap-xxxhdpi/ic_launcher.png b/multisrc/overrides/madara/vinmanga/res/mipmap-xxxhdpi/ic_launcher.png
new file mode 100644
index 000000000..38fdcd818
Binary files /dev/null and b/multisrc/overrides/madara/vinmanga/res/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/vinmanga/src/VinManga.kt b/multisrc/overrides/madara/vinmanga/src/VinManga.kt
new file mode 100644
index 000000000..c6e3670a7
--- /dev/null
+++ b/multisrc/overrides/madara/vinmanga/src/VinManga.kt
@@ -0,0 +1,7 @@
+package eu.kanade.tachiyomi.extension.en.vinmanga
+
+import eu.kanade.tachiyomi.multisrc.madara.Madara
+
+class VinManga : Madara("VinManga", "https://vinload.com", "en") {
+ override val useNewChapterEndpoint = true
+}
diff --git a/multisrc/overrides/madara/wakamics/res/mipmap-hdpi/ic_launcher.png b/multisrc/overrides/madara/wakamics/res/mipmap-hdpi/ic_launcher.png
new file mode 100644
index 000000000..893d8d1f2
Binary files /dev/null and b/multisrc/overrides/madara/wakamics/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/wakamics/res/mipmap-mdpi/ic_launcher.png b/multisrc/overrides/madara/wakamics/res/mipmap-mdpi/ic_launcher.png
new file mode 100644
index 000000000..8fb4d6bd1
Binary files /dev/null and b/multisrc/overrides/madara/wakamics/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/wakamics/res/mipmap-xhdpi/ic_launcher.png b/multisrc/overrides/madara/wakamics/res/mipmap-xhdpi/ic_launcher.png
new file mode 100644
index 000000000..fcfea716e
Binary files /dev/null and b/multisrc/overrides/madara/wakamics/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/wakamics/res/mipmap-xxhdpi/ic_launcher.png b/multisrc/overrides/madara/wakamics/res/mipmap-xxhdpi/ic_launcher.png
new file mode 100644
index 000000000..d277b6d8a
Binary files /dev/null and b/multisrc/overrides/madara/wakamics/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/wakamics/res/mipmap-xxxhdpi/ic_launcher.png b/multisrc/overrides/madara/wakamics/res/mipmap-xxxhdpi/ic_launcher.png
new file mode 100644
index 000000000..f4583fc7d
Binary files /dev/null and b/multisrc/overrides/madara/wakamics/res/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/webdexscans/res/mipmap-hdpi/ic_launcher.png b/multisrc/overrides/madara/webdexscans/res/mipmap-hdpi/ic_launcher.png
new file mode 100644
index 000000000..2eeb1cb6d
Binary files /dev/null and b/multisrc/overrides/madara/webdexscans/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/webdexscans/res/mipmap-mdpi/ic_launcher.png b/multisrc/overrides/madara/webdexscans/res/mipmap-mdpi/ic_launcher.png
new file mode 100644
index 000000000..82d9ae249
Binary files /dev/null and b/multisrc/overrides/madara/webdexscans/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/webdexscans/res/mipmap-xhdpi/ic_launcher.png b/multisrc/overrides/madara/webdexscans/res/mipmap-xhdpi/ic_launcher.png
new file mode 100644
index 000000000..d29474fad
Binary files /dev/null and b/multisrc/overrides/madara/webdexscans/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/webdexscans/res/mipmap-xxhdpi/ic_launcher.png b/multisrc/overrides/madara/webdexscans/res/mipmap-xxhdpi/ic_launcher.png
new file mode 100644
index 000000000..dc4cc9c2f
Binary files /dev/null and b/multisrc/overrides/madara/webdexscans/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/webdexscans/res/mipmap-xxxhdpi/ic_launcher.png b/multisrc/overrides/madara/webdexscans/res/mipmap-xxxhdpi/ic_launcher.png
new file mode 100644
index 000000000..b20b7dfc4
Binary files /dev/null and b/multisrc/overrides/madara/webdexscans/res/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/webdexscans/src/WebdexScans.kt b/multisrc/overrides/madara/webdexscans/src/WebdexScans.kt
new file mode 100644
index 000000000..76a544648
--- /dev/null
+++ b/multisrc/overrides/madara/webdexscans/src/WebdexScans.kt
@@ -0,0 +1,10 @@
+package eu.kanade.tachiyomi.extension.en.webdexscans
+
+import eu.kanade.tachiyomi.multisrc.madara.Madara
+
+class WebdexScans : Madara("Webdex Scans", "https://webdexscans.com", "en") {
+ override val useNewChapterEndpoint = true
+ override val mangaDetailsSelectorStatus = "div.summary-heading:contains(Status) + div.summary-content"
+
+ override fun searchPage(page: Int): String = if (page == 1) "" else "page/$page/"
+}
diff --git a/multisrc/overrides/madara/webtooncity/src/WebtoonCity.kt b/multisrc/overrides/madara/webtooncity/src/WebtoonCity.kt
new file mode 100644
index 000000000..9418a5078
--- /dev/null
+++ b/multisrc/overrides/madara/webtooncity/src/WebtoonCity.kt
@@ -0,0 +1,10 @@
+package eu.kanade.tachiyomi.extension.en.webtooncity
+
+import eu.kanade.tachiyomi.multisrc.madara.Madara
+
+class WebtoonCity : Madara("Webtoon City", "https://webtooncity.com", "en") {
+ override val useNewChapterEndpoint = false
+ override val mangaSubString = "webtoon"
+
+ override fun searchPage(page: Int): String = if (page == 1) "" else "page/$page/"
+}
diff --git a/multisrc/overrides/madara/webtoonhatti/res/mipmap-hdpi/ic_launcher.png b/multisrc/overrides/madara/webtoonhatti/res/mipmap-hdpi/ic_launcher.png
new file mode 100644
index 000000000..292e475c3
Binary files /dev/null and b/multisrc/overrides/madara/webtoonhatti/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/webtoonhatti/res/mipmap-mdpi/ic_launcher.png b/multisrc/overrides/madara/webtoonhatti/res/mipmap-mdpi/ic_launcher.png
new file mode 100644
index 000000000..92914e6dc
Binary files /dev/null and b/multisrc/overrides/madara/webtoonhatti/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/webtoonhatti/res/mipmap-xhdpi/ic_launcher.png b/multisrc/overrides/madara/webtoonhatti/res/mipmap-xhdpi/ic_launcher.png
new file mode 100644
index 000000000..3a62f7677
Binary files /dev/null and b/multisrc/overrides/madara/webtoonhatti/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/webtoonhatti/res/mipmap-xxhdpi/ic_launcher.png b/multisrc/overrides/madara/webtoonhatti/res/mipmap-xxhdpi/ic_launcher.png
new file mode 100644
index 000000000..c7d2357ef
Binary files /dev/null and b/multisrc/overrides/madara/webtoonhatti/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/webtoonhatti/res/mipmap-xxxhdpi/ic_launcher.png b/multisrc/overrides/madara/webtoonhatti/res/mipmap-xxxhdpi/ic_launcher.png
new file mode 100644
index 000000000..7ba38c3c3
Binary files /dev/null and b/multisrc/overrides/madara/webtoonhatti/res/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/webtoonhatti/src/WebtoonHatti.kt b/multisrc/overrides/madara/webtoonhatti/src/WebtoonHatti.kt
new file mode 100644
index 000000000..fffbc6726
--- /dev/null
+++ b/multisrc/overrides/madara/webtoonhatti/src/WebtoonHatti.kt
@@ -0,0 +1,21 @@
+package eu.kanade.tachiyomi.extension.tr.webtoonhatti
+
+import eu.kanade.tachiyomi.multisrc.madara.Madara
+import java.text.SimpleDateFormat
+import java.util.Locale
+
+class WebtoonHatti : Madara(
+ "Webtoon Hatti",
+ "https://webtoonhatti.net",
+ "tr",
+ dateFormat = SimpleDateFormat("dd MMMM", Locale("tr")),
+) {
+ override val useNewChapterEndpoint = false
+
+ override fun searchPage(page: Int): String = if (page == 1) "" else "page/$page/"
+
+ // Skip fake image
+ // OK:
+ // NG:
+ override val pageListParseSelector = "div.page-break:not([style*=\"display:\"])"
+}
diff --git a/multisrc/overrides/madara/webtoonily/res/mipmap-hdpi/ic_launcher.png b/multisrc/overrides/madara/webtoonily/res/mipmap-hdpi/ic_launcher.png
new file mode 100644
index 000000000..db6cd48e7
Binary files /dev/null and b/multisrc/overrides/madara/webtoonily/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/webtoonily/res/mipmap-mdpi/ic_launcher.png b/multisrc/overrides/madara/webtoonily/res/mipmap-mdpi/ic_launcher.png
new file mode 100644
index 000000000..ba78b2fde
Binary files /dev/null and b/multisrc/overrides/madara/webtoonily/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/webtoonily/res/mipmap-xhdpi/ic_launcher.png b/multisrc/overrides/madara/webtoonily/res/mipmap-xhdpi/ic_launcher.png
new file mode 100644
index 000000000..d576015a7
Binary files /dev/null and b/multisrc/overrides/madara/webtoonily/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/webtoonily/res/mipmap-xxhdpi/ic_launcher.png b/multisrc/overrides/madara/webtoonily/res/mipmap-xxhdpi/ic_launcher.png
new file mode 100644
index 000000000..ba41bb57b
Binary files /dev/null and b/multisrc/overrides/madara/webtoonily/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/webtoonily/res/mipmap-xxxhdpi/ic_launcher.png b/multisrc/overrides/madara/webtoonily/res/mipmap-xxxhdpi/ic_launcher.png
new file mode 100644
index 000000000..9eefdbe27
Binary files /dev/null and b/multisrc/overrides/madara/webtoonily/res/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/webtoonscan/res/mipmap-hdpi/ic_launcher.png b/multisrc/overrides/madara/webtoonscan/res/mipmap-hdpi/ic_launcher.png
new file mode 100644
index 000000000..a6408cc5c
Binary files /dev/null and b/multisrc/overrides/madara/webtoonscan/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/webtoonscan/res/mipmap-mdpi/ic_launcher.png b/multisrc/overrides/madara/webtoonscan/res/mipmap-mdpi/ic_launcher.png
new file mode 100644
index 000000000..8e82c69e6
Binary files /dev/null and b/multisrc/overrides/madara/webtoonscan/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/webtoonscan/res/mipmap-xhdpi/ic_launcher.png b/multisrc/overrides/madara/webtoonscan/res/mipmap-xhdpi/ic_launcher.png
new file mode 100644
index 000000000..c67936abe
Binary files /dev/null and b/multisrc/overrides/madara/webtoonscan/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/webtoonscan/res/mipmap-xxhdpi/ic_launcher.png b/multisrc/overrides/madara/webtoonscan/res/mipmap-xxhdpi/ic_launcher.png
new file mode 100644
index 000000000..8782075c3
Binary files /dev/null and b/multisrc/overrides/madara/webtoonscan/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/webtoonscan/res/mipmap-xxxhdpi/ic_launcher.png b/multisrc/overrides/madara/webtoonscan/res/mipmap-xxxhdpi/ic_launcher.png
new file mode 100644
index 000000000..b2832df46
Binary files /dev/null and b/multisrc/overrides/madara/webtoonscan/res/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/webtoonstop/src/WebtoonsTOP.kt b/multisrc/overrides/madara/webtoonstop/src/WebtoonsTOP.kt
new file mode 100644
index 000000000..c92056658
--- /dev/null
+++ b/multisrc/overrides/madara/webtoonstop/src/WebtoonsTOP.kt
@@ -0,0 +1,12 @@
+package eu.kanade.tachiyomi.extension.en.webtoonstop
+
+import eu.kanade.tachiyomi.multisrc.madara.Madara
+import java.text.SimpleDateFormat
+import java.util.Locale
+
+class WebtoonsTOP : Madara(
+ "WebtoonsTOP",
+ "https://webtoons.top",
+ "en",
+ dateFormat = SimpleDateFormat("MMM d, yyyy", Locale.US),
+)
diff --git a/multisrc/overrides/madara/webtoontr/res/mipmap-hdpi/ic_launcher.png b/multisrc/overrides/madara/webtoontr/res/mipmap-hdpi/ic_launcher.png
new file mode 100644
index 000000000..9698248d0
Binary files /dev/null and b/multisrc/overrides/madara/webtoontr/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/webtoontr/res/mipmap-mdpi/ic_launcher.png b/multisrc/overrides/madara/webtoontr/res/mipmap-mdpi/ic_launcher.png
new file mode 100644
index 000000000..c536be780
Binary files /dev/null and b/multisrc/overrides/madara/webtoontr/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/webtoontr/res/mipmap-xhdpi/ic_launcher.png b/multisrc/overrides/madara/webtoontr/res/mipmap-xhdpi/ic_launcher.png
new file mode 100644
index 000000000..8978b54e7
Binary files /dev/null and b/multisrc/overrides/madara/webtoontr/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/webtoontr/res/mipmap-xxhdpi/ic_launcher.png b/multisrc/overrides/madara/webtoontr/res/mipmap-xxhdpi/ic_launcher.png
new file mode 100644
index 000000000..9dad5f9fd
Binary files /dev/null and b/multisrc/overrides/madara/webtoontr/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/webtoontr/res/mipmap-xxxhdpi/ic_launcher.png b/multisrc/overrides/madara/webtoontr/res/mipmap-xxxhdpi/ic_launcher.png
new file mode 100644
index 000000000..f01a987bd
Binary files /dev/null and b/multisrc/overrides/madara/webtoontr/res/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/webtoontr/src/WebtoonTR.kt b/multisrc/overrides/madara/webtoontr/src/WebtoonTR.kt
new file mode 100644
index 000000000..507a5d2f6
--- /dev/null
+++ b/multisrc/overrides/madara/webtoontr/src/WebtoonTR.kt
@@ -0,0 +1,16 @@
+package eu.kanade.tachiyomi.extension.tr.webtoontr
+
+import eu.kanade.tachiyomi.multisrc.madara.Madara
+import java.text.SimpleDateFormat
+import java.util.Locale
+
+class WebtoonTR : Madara(
+ "Webtoon TR",
+ "https://webtoontr.net",
+ "tr",
+ SimpleDateFormat("dd/MM/yyy", Locale("tr")),
+) {
+ override val useNewChapterEndpoint = false
+
+ override fun searchPage(page: Int): String = if (page == 1) "" else "page/$page/"
+}
diff --git a/multisrc/overrides/madara/webtoonuk/res/mipmap-hdpi/ic_launcher.png b/multisrc/overrides/madara/webtoonuk/res/mipmap-hdpi/ic_launcher.png
new file mode 100644
index 000000000..5109b48c5
Binary files /dev/null and b/multisrc/overrides/madara/webtoonuk/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/webtoonuk/res/mipmap-mdpi/ic_launcher.png b/multisrc/overrides/madara/webtoonuk/res/mipmap-mdpi/ic_launcher.png
new file mode 100644
index 000000000..507249c24
Binary files /dev/null and b/multisrc/overrides/madara/webtoonuk/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/webtoonuk/res/mipmap-xhdpi/ic_launcher.png b/multisrc/overrides/madara/webtoonuk/res/mipmap-xhdpi/ic_launcher.png
new file mode 100644
index 000000000..2e46ae730
Binary files /dev/null and b/multisrc/overrides/madara/webtoonuk/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/webtoonuk/res/mipmap-xxhdpi/ic_launcher.png b/multisrc/overrides/madara/webtoonuk/res/mipmap-xxhdpi/ic_launcher.png
new file mode 100644
index 000000000..e603c1a30
Binary files /dev/null and b/multisrc/overrides/madara/webtoonuk/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/webtoonuk/res/mipmap-xxxhdpi/ic_launcher.png b/multisrc/overrides/madara/webtoonuk/res/mipmap-xxxhdpi/ic_launcher.png
new file mode 100644
index 000000000..58cf6b9a8
Binary files /dev/null and b/multisrc/overrides/madara/webtoonuk/res/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/webtoonxyz/res/mipmap-hdpi/ic_launcher.png b/multisrc/overrides/madara/webtoonxyz/res/mipmap-hdpi/ic_launcher.png
new file mode 100644
index 000000000..532022d4b
Binary files /dev/null and b/multisrc/overrides/madara/webtoonxyz/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/webtoonxyz/res/mipmap-mdpi/ic_launcher.png b/multisrc/overrides/madara/webtoonxyz/res/mipmap-mdpi/ic_launcher.png
new file mode 100644
index 000000000..d768bd59e
Binary files /dev/null and b/multisrc/overrides/madara/webtoonxyz/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/webtoonxyz/res/mipmap-xhdpi/ic_launcher.png b/multisrc/overrides/madara/webtoonxyz/res/mipmap-xhdpi/ic_launcher.png
new file mode 100644
index 000000000..f72dcc63d
Binary files /dev/null and b/multisrc/overrides/madara/webtoonxyz/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/webtoonxyz/res/mipmap-xxhdpi/ic_launcher.png b/multisrc/overrides/madara/webtoonxyz/res/mipmap-xxhdpi/ic_launcher.png
new file mode 100644
index 000000000..623a47953
Binary files /dev/null and b/multisrc/overrides/madara/webtoonxyz/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/webtoonxyz/res/mipmap-xxxhdpi/ic_launcher.png b/multisrc/overrides/madara/webtoonxyz/res/mipmap-xxxhdpi/ic_launcher.png
new file mode 100644
index 000000000..a6db42aeb
Binary files /dev/null and b/multisrc/overrides/madara/webtoonxyz/res/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/webtoonxyz/src/WebtoonXYZ.kt b/multisrc/overrides/madara/webtoonxyz/src/WebtoonXYZ.kt
new file mode 100644
index 000000000..0923594d3
--- /dev/null
+++ b/multisrc/overrides/madara/webtoonxyz/src/WebtoonXYZ.kt
@@ -0,0 +1,13 @@
+package eu.kanade.tachiyomi.extension.en.webtoonxyz
+
+import eu.kanade.tachiyomi.multisrc.madara.Madara
+import eu.kanade.tachiyomi.network.GET
+import okhttp3.Request
+import java.text.SimpleDateFormat
+import java.util.Locale
+
+class WebtoonXYZ : Madara("WebtoonXYZ", "https://www.webtoon.xyz", "en", SimpleDateFormat("dd MMMM yyyy", Locale.US)) {
+ private fun pagePath(page: Int) = if (page > 1) "page/$page/" else ""
+ override fun popularMangaRequest(page: Int): Request = GET("$baseUrl/webtoons/${pagePath(page)}?m_orderby=views", headers)
+ override fun latestUpdatesRequest(page: Int): Request = GET("$baseUrl/webtoons/${pagePath(page)}?m_orderby=latest", headers)
+}
diff --git a/multisrc/overrides/madara/wickedwitchscan/src/WickedWitchScan.kt b/multisrc/overrides/madara/wickedwitchscan/src/WickedWitchScan.kt
new file mode 100644
index 000000000..8123e7f47
--- /dev/null
+++ b/multisrc/overrides/madara/wickedwitchscan/src/WickedWitchScan.kt
@@ -0,0 +1,20 @@
+package eu.kanade.tachiyomi.extension.pt.wickedwitchscan
+
+import eu.kanade.tachiyomi.multisrc.madara.Madara
+import eu.kanade.tachiyomi.network.interceptor.rateLimit
+import okhttp3.OkHttpClient
+import java.text.SimpleDateFormat
+import java.util.Locale
+import java.util.concurrent.TimeUnit
+
+class WickedWitchScan : Madara(
+ "Wicked Witch Scan",
+ "https://wickedwitchscan.com",
+ "pt-BR",
+ SimpleDateFormat("MMMMM dd, yyyy", Locale("pt", "BR")),
+) {
+
+ override val client: OkHttpClient = super.client.newBuilder()
+ .rateLimit(1, 2, TimeUnit.SECONDS)
+ .build()
+}
diff --git a/multisrc/overrides/madara/winterscan/res/mipmap-hdpi/ic_launcher.png b/multisrc/overrides/madara/winterscan/res/mipmap-hdpi/ic_launcher.png
new file mode 100644
index 000000000..8ce7eeb3a
Binary files /dev/null and b/multisrc/overrides/madara/winterscan/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/winterscan/res/mipmap-mdpi/ic_launcher.png b/multisrc/overrides/madara/winterscan/res/mipmap-mdpi/ic_launcher.png
new file mode 100644
index 000000000..6ed1239e0
Binary files /dev/null and b/multisrc/overrides/madara/winterscan/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/winterscan/res/mipmap-xhdpi/ic_launcher.png b/multisrc/overrides/madara/winterscan/res/mipmap-xhdpi/ic_launcher.png
new file mode 100644
index 000000000..da4621072
Binary files /dev/null and b/multisrc/overrides/madara/winterscan/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/winterscan/res/mipmap-xxhdpi/ic_launcher.png b/multisrc/overrides/madara/winterscan/res/mipmap-xxhdpi/ic_launcher.png
new file mode 100644
index 000000000..fb58151d2
Binary files /dev/null and b/multisrc/overrides/madara/winterscan/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/winterscan/res/mipmap-xxxhdpi/ic_launcher.png b/multisrc/overrides/madara/winterscan/res/mipmap-xxxhdpi/ic_launcher.png
new file mode 100644
index 000000000..5fbe3b91d
Binary files /dev/null and b/multisrc/overrides/madara/winterscan/res/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/winterscan/src/WinterScan.kt b/multisrc/overrides/madara/winterscan/src/WinterScan.kt
new file mode 100644
index 000000000..f69111097
--- /dev/null
+++ b/multisrc/overrides/madara/winterscan/src/WinterScan.kt
@@ -0,0 +1,20 @@
+package eu.kanade.tachiyomi.extension.pt.winterscan
+
+import eu.kanade.tachiyomi.multisrc.madara.Madara
+import eu.kanade.tachiyomi.network.interceptor.rateLimit
+import okhttp3.OkHttpClient
+import java.text.SimpleDateFormat
+import java.util.Locale
+import java.util.concurrent.TimeUnit
+
+class WinterScan : Madara(
+ "Winter Scan",
+ "https://winterscan.com",
+ "pt-BR",
+ SimpleDateFormat("dd 'de' MMMM 'de' yyyy", Locale("pt", "BR")),
+) {
+
+ override val client: OkHttpClient = super.client.newBuilder()
+ .rateLimit(1, 2, TimeUnit.SECONDS)
+ .build()
+}
diff --git a/multisrc/overrides/madara/wonderlandscan/src/WonderlandScan.kt b/multisrc/overrides/madara/wonderlandscan/src/WonderlandScan.kt
new file mode 100644
index 000000000..e8d181dc5
--- /dev/null
+++ b/multisrc/overrides/madara/wonderlandscan/src/WonderlandScan.kt
@@ -0,0 +1,22 @@
+package eu.kanade.tachiyomi.extension.pt.wonderlandscan
+
+import eu.kanade.tachiyomi.multisrc.madara.Madara
+import eu.kanade.tachiyomi.network.interceptor.rateLimit
+import okhttp3.OkHttpClient
+import java.text.SimpleDateFormat
+import java.util.Locale
+import java.util.concurrent.TimeUnit
+
+class WonderlandScan : Madara(
+ "Wonderland Scan",
+ "https://wonderlandscan.com",
+ "pt-BR",
+ SimpleDateFormat("dd/MM/yyyy", Locale("pt", "BR")),
+) {
+
+ override val client: OkHttpClient = super.client.newBuilder()
+ .rateLimit(1, 2, TimeUnit.SECONDS)
+ .build()
+
+ override val useNewChapterEndpoint = true
+}
diff --git a/multisrc/overrides/madara/woopread/res/mipmap-hdpi/ic_launcher.png b/multisrc/overrides/madara/woopread/res/mipmap-hdpi/ic_launcher.png
new file mode 100644
index 000000000..075a9659f
Binary files /dev/null and b/multisrc/overrides/madara/woopread/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/woopread/res/mipmap-mdpi/ic_launcher.png b/multisrc/overrides/madara/woopread/res/mipmap-mdpi/ic_launcher.png
new file mode 100644
index 000000000..1d3a00116
Binary files /dev/null and b/multisrc/overrides/madara/woopread/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/woopread/res/mipmap-xhdpi/ic_launcher.png b/multisrc/overrides/madara/woopread/res/mipmap-xhdpi/ic_launcher.png
new file mode 100644
index 000000000..ca6cf3330
Binary files /dev/null and b/multisrc/overrides/madara/woopread/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/woopread/res/mipmap-xxhdpi/ic_launcher.png b/multisrc/overrides/madara/woopread/res/mipmap-xxhdpi/ic_launcher.png
new file mode 100644
index 000000000..1aab4aa1b
Binary files /dev/null and b/multisrc/overrides/madara/woopread/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/woopread/res/mipmap-xxxhdpi/ic_launcher.png b/multisrc/overrides/madara/woopread/res/mipmap-xxxhdpi/ic_launcher.png
new file mode 100644
index 000000000..157ce4977
Binary files /dev/null and b/multisrc/overrides/madara/woopread/res/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/worldmanhwas/res/mipmap-hdpi/ic_launcher.png b/multisrc/overrides/madara/worldmanhwas/res/mipmap-hdpi/ic_launcher.png
new file mode 100644
index 000000000..89e8ed774
Binary files /dev/null and b/multisrc/overrides/madara/worldmanhwas/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/worldmanhwas/res/mipmap-mdpi/ic_launcher.png b/multisrc/overrides/madara/worldmanhwas/res/mipmap-mdpi/ic_launcher.png
new file mode 100644
index 000000000..0f59cb089
Binary files /dev/null and b/multisrc/overrides/madara/worldmanhwas/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/worldmanhwas/res/mipmap-xhdpi/ic_launcher.png b/multisrc/overrides/madara/worldmanhwas/res/mipmap-xhdpi/ic_launcher.png
new file mode 100644
index 000000000..cce31df9d
Binary files /dev/null and b/multisrc/overrides/madara/worldmanhwas/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/worldmanhwas/res/mipmap-xxhdpi/ic_launcher.png b/multisrc/overrides/madara/worldmanhwas/res/mipmap-xxhdpi/ic_launcher.png
new file mode 100644
index 000000000..1dc3ac30c
Binary files /dev/null and b/multisrc/overrides/madara/worldmanhwas/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/worldmanhwas/res/mipmap-xxxhdpi/ic_launcher.png b/multisrc/overrides/madara/worldmanhwas/res/mipmap-xxxhdpi/ic_launcher.png
new file mode 100644
index 000000000..a6710e61a
Binary files /dev/null and b/multisrc/overrides/madara/worldmanhwas/res/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/worldmanhwas/src/WorldManhwas.kt b/multisrc/overrides/madara/worldmanhwas/src/WorldManhwas.kt
new file mode 100644
index 000000000..27c015977
--- /dev/null
+++ b/multisrc/overrides/madara/worldmanhwas/src/WorldManhwas.kt
@@ -0,0 +1,11 @@
+package eu.kanade.tachiyomi.extension.id.worldmanhwas
+
+import eu.kanade.tachiyomi.multisrc.madara.Madara
+import java.text.SimpleDateFormat
+import java.util.Locale
+
+class WorldManhwas : Madara("WorldManhwas", "https://worldmanhwas.zone", "id", SimpleDateFormat("MMMM dd, yyyy", Locale("id"))) {
+ override val useNewChapterEndpoint = false
+
+ override fun searchPage(page: Int): String = if (page == 1) "" else "page/$page/"
+}
diff --git a/multisrc/overrides/madara/wuxiaworld/res/mipmap-hdpi/ic_launcher.png b/multisrc/overrides/madara/wuxiaworld/res/mipmap-hdpi/ic_launcher.png
new file mode 100644
index 000000000..62710c005
Binary files /dev/null and b/multisrc/overrides/madara/wuxiaworld/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/wuxiaworld/res/mipmap-mdpi/ic_launcher.png b/multisrc/overrides/madara/wuxiaworld/res/mipmap-mdpi/ic_launcher.png
new file mode 100644
index 000000000..16f4f4e4e
Binary files /dev/null and b/multisrc/overrides/madara/wuxiaworld/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/wuxiaworld/res/mipmap-xhdpi/ic_launcher.png b/multisrc/overrides/madara/wuxiaworld/res/mipmap-xhdpi/ic_launcher.png
new file mode 100644
index 000000000..ddb54aec1
Binary files /dev/null and b/multisrc/overrides/madara/wuxiaworld/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/wuxiaworld/res/mipmap-xxhdpi/ic_launcher.png b/multisrc/overrides/madara/wuxiaworld/res/mipmap-xxhdpi/ic_launcher.png
new file mode 100644
index 000000000..b50822e1d
Binary files /dev/null and b/multisrc/overrides/madara/wuxiaworld/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/wuxiaworld/res/mipmap-xxxhdpi/ic_launcher.png b/multisrc/overrides/madara/wuxiaworld/res/mipmap-xxxhdpi/ic_launcher.png
new file mode 100644
index 000000000..0f769caf5
Binary files /dev/null and b/multisrc/overrides/madara/wuxiaworld/res/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/wuxiaworld/src/WuxiaWorld.kt b/multisrc/overrides/madara/wuxiaworld/src/WuxiaWorld.kt
new file mode 100644
index 000000000..ce7c6996f
--- /dev/null
+++ b/multisrc/overrides/madara/wuxiaworld/src/WuxiaWorld.kt
@@ -0,0 +1,13 @@
+package eu.kanade.tachiyomi.extension.en.wuxiaworld
+
+import eu.kanade.tachiyomi.multisrc.madara.Madara
+import eu.kanade.tachiyomi.network.GET
+import eu.kanade.tachiyomi.source.model.FilterList
+import okhttp3.Request
+
+class WuxiaWorld : Madara("WuxiaWorld", "https://wuxiaworld.site", "en") {
+ override fun popularMangaRequest(page: Int): Request = GET("$baseUrl/tag/webcomic/page/$page/?m_orderby=views", headers)
+ override fun latestUpdatesRequest(page: Int): Request = GET("$baseUrl/tag/webcomic/page/$page/?m_orderby=latest", headers)
+ override fun searchMangaRequest(page: Int, query: String, filters: FilterList) = super.searchMangaRequest(page, "$query comics", filters)
+ override fun popularMangaNextPageSelector() = "div.nav-previous.float-left"
+}
diff --git a/multisrc/overrides/madara/yanpfansub/src/YANPFansub.kt b/multisrc/overrides/madara/yanpfansub/src/YANPFansub.kt
new file mode 100644
index 000000000..6b468f1ef
--- /dev/null
+++ b/multisrc/overrides/madara/yanpfansub/src/YANPFansub.kt
@@ -0,0 +1,41 @@
+package eu.kanade.tachiyomi.extension.pt.yanpfansub
+
+import eu.kanade.tachiyomi.multisrc.madara.Madara
+import eu.kanade.tachiyomi.network.interceptor.rateLimit
+import okhttp3.Interceptor
+import okhttp3.OkHttpClient
+import okhttp3.Response
+import java.io.IOException
+import java.text.SimpleDateFormat
+import java.util.Locale
+import java.util.concurrent.TimeUnit
+
+class YANPFansub : Madara(
+ "YANP Fansub",
+ "https://yanpfansub.com",
+ "pt-BR",
+ SimpleDateFormat("MMMM dd, yyyy", Locale("pt", "BR")),
+) {
+
+ // Scanlator changed the theme from WpMangaReader to Madara.
+ override val versionId: Int = 2
+
+ override val client: OkHttpClient = super.client.newBuilder()
+ .rateLimit(1, 2, TimeUnit.SECONDS)
+ .addInterceptor(::checkPasswordProtectedIntercept)
+ .build()
+
+ private fun checkPasswordProtectedIntercept(chain: Interceptor.Chain): Response {
+ val response = chain.proceed(chain.request())
+
+ if (response.request.url.queryParameter("password-protected") != null) {
+ response.close()
+ throw IOException("Autentique-se através da WebView e tente novamente.")
+ }
+
+ return response
+ }
+
+ // Page has custom link to scan website.
+ override val popularMangaUrlSelector = "div.post-title a:not([target])"
+}
diff --git a/multisrc/overrides/madara/yaoicomics/src/YaoiComics.kt b/multisrc/overrides/madara/yaoicomics/src/YaoiComics.kt
new file mode 100644
index 000000000..2ad1ce7f1
--- /dev/null
+++ b/multisrc/overrides/madara/yaoicomics/src/YaoiComics.kt
@@ -0,0 +1,22 @@
+package eu.kanade.tachiyomi.extension.pt.yaoicomics
+
+import eu.kanade.tachiyomi.multisrc.madara.Madara
+import eu.kanade.tachiyomi.network.interceptor.rateLimit
+import okhttp3.OkHttpClient
+import java.text.SimpleDateFormat
+import java.util.Locale
+import java.util.concurrent.TimeUnit
+
+class YaoiComics : Madara(
+ "Yaoi Comics",
+ "https://ycscan.com",
+ "pt-BR",
+ SimpleDateFormat("dd 'de' MMMMM 'de' yyyy", Locale("pt", "BR")),
+) {
+
+ override val client: OkHttpClient = super.client.newBuilder()
+ .rateLimit(1, 2, TimeUnit.SECONDS)
+ .build()
+
+ override val useNewChapterEndpoint = true
+}
diff --git a/multisrc/overrides/madara/yaoihentai/res/mipmap-hdpi/ic_launcher.png b/multisrc/overrides/madara/yaoihentai/res/mipmap-hdpi/ic_launcher.png
new file mode 100644
index 000000000..db59b938e
Binary files /dev/null and b/multisrc/overrides/madara/yaoihentai/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/yaoihentai/res/mipmap-mdpi/ic_launcher.png b/multisrc/overrides/madara/yaoihentai/res/mipmap-mdpi/ic_launcher.png
new file mode 100644
index 000000000..e5575b748
Binary files /dev/null and b/multisrc/overrides/madara/yaoihentai/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/yaoihentai/res/mipmap-xhdpi/ic_launcher.png b/multisrc/overrides/madara/yaoihentai/res/mipmap-xhdpi/ic_launcher.png
new file mode 100644
index 000000000..4465c5a32
Binary files /dev/null and b/multisrc/overrides/madara/yaoihentai/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/yaoihentai/res/mipmap-xxhdpi/ic_launcher.png b/multisrc/overrides/madara/yaoihentai/res/mipmap-xxhdpi/ic_launcher.png
new file mode 100644
index 000000000..a1d2ac483
Binary files /dev/null and b/multisrc/overrides/madara/yaoihentai/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/yaoihentai/res/mipmap-xxxhdpi/ic_launcher.png b/multisrc/overrides/madara/yaoihentai/res/mipmap-xxxhdpi/ic_launcher.png
new file mode 100644
index 000000000..884af880b
Binary files /dev/null and b/multisrc/overrides/madara/yaoihentai/res/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/yaoihentai/src/YaoiHentai.kt b/multisrc/overrides/madara/yaoihentai/src/YaoiHentai.kt
new file mode 100644
index 000000000..a47350c72
--- /dev/null
+++ b/multisrc/overrides/madara/yaoihentai/src/YaoiHentai.kt
@@ -0,0 +1,7 @@
+package eu.kanade.tachiyomi.extension.en.yaoihentai
+
+import eu.kanade.tachiyomi.multisrc.madara.Madara
+import java.text.SimpleDateFormat
+import java.util.Locale
+
+class YaoiHentai : Madara("Yaoi Hentai", "https://yaoihentai.me", "en", dateFormat = SimpleDateFormat("MMMM d, yyyy", Locale.US))
diff --git a/multisrc/overrides/madara/yaoimanga/res/mipmap-hdpi/ic_launcher.png b/multisrc/overrides/madara/yaoimanga/res/mipmap-hdpi/ic_launcher.png
new file mode 100644
index 000000000..ce1a5a1df
Binary files /dev/null and b/multisrc/overrides/madara/yaoimanga/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/yaoimanga/res/mipmap-mdpi/ic_launcher.png b/multisrc/overrides/madara/yaoimanga/res/mipmap-mdpi/ic_launcher.png
new file mode 100644
index 000000000..29dfd4b0f
Binary files /dev/null and b/multisrc/overrides/madara/yaoimanga/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/yaoimanga/res/mipmap-xhdpi/ic_launcher.png b/multisrc/overrides/madara/yaoimanga/res/mipmap-xhdpi/ic_launcher.png
new file mode 100644
index 000000000..ee271a18a
Binary files /dev/null and b/multisrc/overrides/madara/yaoimanga/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/yaoimanga/res/mipmap-xxhdpi/ic_launcher.png b/multisrc/overrides/madara/yaoimanga/res/mipmap-xxhdpi/ic_launcher.png
new file mode 100644
index 000000000..f108ff6f4
Binary files /dev/null and b/multisrc/overrides/madara/yaoimanga/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/yaoimanga/res/mipmap-xxxhdpi/ic_launcher.png b/multisrc/overrides/madara/yaoimanga/res/mipmap-xxxhdpi/ic_launcher.png
new file mode 100644
index 000000000..8a5167d7b
Binary files /dev/null and b/multisrc/overrides/madara/yaoimanga/res/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/yaoimanga/src/YaoiManga.kt b/multisrc/overrides/madara/yaoimanga/src/YaoiManga.kt
new file mode 100644
index 000000000..c9081c185
--- /dev/null
+++ b/multisrc/overrides/madara/yaoimanga/src/YaoiManga.kt
@@ -0,0 +1,13 @@
+package eu.kanade.tachiyomi.extension.en.yaoimanga
+
+import eu.kanade.tachiyomi.multisrc.madara.Madara
+import eu.kanade.tachiyomi.network.interceptor.rateLimit
+import okhttp3.OkHttpClient
+import java.util.concurrent.TimeUnit
+
+class YaoiManga : Madara("Yaoi.mobi", "https://yaoi.mobi", "en") {
+
+ override val client: OkHttpClient = super.client.newBuilder()
+ .rateLimit(1, 1, TimeUnit.SECONDS)
+ .build()
+}
diff --git a/multisrc/overrides/madara/yaoiscan/res/mipmap-hdpi/ic_launcher.png b/multisrc/overrides/madara/yaoiscan/res/mipmap-hdpi/ic_launcher.png
new file mode 100644
index 000000000..d47776451
Binary files /dev/null and b/multisrc/overrides/madara/yaoiscan/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/yaoiscan/res/mipmap-mdpi/ic_launcher.png b/multisrc/overrides/madara/yaoiscan/res/mipmap-mdpi/ic_launcher.png
new file mode 100644
index 000000000..f82bbd5c6
Binary files /dev/null and b/multisrc/overrides/madara/yaoiscan/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/yaoiscan/res/mipmap-xhdpi/ic_launcher.png b/multisrc/overrides/madara/yaoiscan/res/mipmap-xhdpi/ic_launcher.png
new file mode 100644
index 000000000..7183d0cff
Binary files /dev/null and b/multisrc/overrides/madara/yaoiscan/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/yaoiscan/res/mipmap-xxhdpi/ic_launcher.png b/multisrc/overrides/madara/yaoiscan/res/mipmap-xxhdpi/ic_launcher.png
new file mode 100644
index 000000000..bee16db8e
Binary files /dev/null and b/multisrc/overrides/madara/yaoiscan/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/yaoiscan/res/mipmap-xxxhdpi/ic_launcher.png b/multisrc/overrides/madara/yaoiscan/res/mipmap-xxxhdpi/ic_launcher.png
new file mode 100644
index 000000000..b12c5bfcb
Binary files /dev/null and b/multisrc/overrides/madara/yaoiscan/res/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/yaoitoon/res/mipmap-hdpi/ic_launcher.png b/multisrc/overrides/madara/yaoitoon/res/mipmap-hdpi/ic_launcher.png
new file mode 100644
index 000000000..5efabe27f
Binary files /dev/null and b/multisrc/overrides/madara/yaoitoon/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/yaoitoon/res/mipmap-mdpi/ic_launcher.png b/multisrc/overrides/madara/yaoitoon/res/mipmap-mdpi/ic_launcher.png
new file mode 100644
index 000000000..fb6a1c930
Binary files /dev/null and b/multisrc/overrides/madara/yaoitoon/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/yaoitoon/res/mipmap-xhdpi/ic_launcher.png b/multisrc/overrides/madara/yaoitoon/res/mipmap-xhdpi/ic_launcher.png
new file mode 100644
index 000000000..729e30aac
Binary files /dev/null and b/multisrc/overrides/madara/yaoitoon/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/yaoitoon/res/mipmap-xxhdpi/ic_launcher.png b/multisrc/overrides/madara/yaoitoon/res/mipmap-xxhdpi/ic_launcher.png
new file mode 100644
index 000000000..0f4032bf1
Binary files /dev/null and b/multisrc/overrides/madara/yaoitoon/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/yaoitoon/res/mipmap-xxxhdpi/ic_launcher.png b/multisrc/overrides/madara/yaoitoon/res/mipmap-xxxhdpi/ic_launcher.png
new file mode 100644
index 000000000..f8982f42a
Binary files /dev/null and b/multisrc/overrides/madara/yaoitoon/res/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/yaoitoon/src/YaoiToon.kt b/multisrc/overrides/madara/yaoitoon/src/YaoiToon.kt
new file mode 100644
index 000000000..704045667
--- /dev/null
+++ b/multisrc/overrides/madara/yaoitoon/src/YaoiToon.kt
@@ -0,0 +1,7 @@
+package eu.kanade.tachiyomi.extension.en.yaoitoon
+
+import eu.kanade.tachiyomi.multisrc.madara.Madara
+import java.text.SimpleDateFormat
+import java.util.Locale
+
+class YaoiToon : Madara("YaoiToon", "https://yaoitoon.com", "en", dateFormat = SimpleDateFormat("d MMMM, yyyy", Locale.US))
diff --git a/multisrc/overrides/madara/yonabar/res/mipmap-hdpi/ic_launcher.png b/multisrc/overrides/madara/yonabar/res/mipmap-hdpi/ic_launcher.png
new file mode 100644
index 000000000..e6611865c
Binary files /dev/null and b/multisrc/overrides/madara/yonabar/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/yonabar/res/mipmap-mdpi/ic_launcher.png b/multisrc/overrides/madara/yonabar/res/mipmap-mdpi/ic_launcher.png
new file mode 100644
index 000000000..25206f65e
Binary files /dev/null and b/multisrc/overrides/madara/yonabar/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/yonabar/res/mipmap-xhdpi/ic_launcher.png b/multisrc/overrides/madara/yonabar/res/mipmap-xhdpi/ic_launcher.png
new file mode 100644
index 000000000..3ced1e96e
Binary files /dev/null and b/multisrc/overrides/madara/yonabar/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/yonabar/res/mipmap-xxhdpi/ic_launcher.png b/multisrc/overrides/madara/yonabar/res/mipmap-xxhdpi/ic_launcher.png
new file mode 100644
index 000000000..fc96474b4
Binary files /dev/null and b/multisrc/overrides/madara/yonabar/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/yonabar/res/mipmap-xxxhdpi/ic_launcher.png b/multisrc/overrides/madara/yonabar/res/mipmap-xxxhdpi/ic_launcher.png
new file mode 100644
index 000000000..d4d383033
Binary files /dev/null and b/multisrc/overrides/madara/yonabar/res/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/yonabar/src/YonaBar.kt b/multisrc/overrides/madara/yonabar/src/YonaBar.kt
new file mode 100644
index 000000000..216a0db21
--- /dev/null
+++ b/multisrc/overrides/madara/yonabar/src/YonaBar.kt
@@ -0,0 +1,7 @@
+package eu.kanade.tachiyomi.extension.ar.yonabar
+
+import eu.kanade.tachiyomi.multisrc.madara.Madara
+import java.text.SimpleDateFormat
+import java.util.Locale
+
+class YonaBar : Madara("YonaBar", "https://yonabar.com", "ar", SimpleDateFormat("yyyy-MM-dd", Locale("ar")))
diff --git a/multisrc/overrides/madara/yuriverso/res/mipmap-hdpi/ic_launcher.png b/multisrc/overrides/madara/yuriverso/res/mipmap-hdpi/ic_launcher.png
new file mode 100644
index 000000000..80b86515e
Binary files /dev/null and b/multisrc/overrides/madara/yuriverso/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/yuriverso/res/mipmap-mdpi/ic_launcher.png b/multisrc/overrides/madara/yuriverso/res/mipmap-mdpi/ic_launcher.png
new file mode 100644
index 000000000..27e52dac9
Binary files /dev/null and b/multisrc/overrides/madara/yuriverso/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/yuriverso/res/mipmap-xhdpi/ic_launcher.png b/multisrc/overrides/madara/yuriverso/res/mipmap-xhdpi/ic_launcher.png
new file mode 100644
index 000000000..bd90f36f4
Binary files /dev/null and b/multisrc/overrides/madara/yuriverso/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/yuriverso/res/mipmap-xxhdpi/ic_launcher.png b/multisrc/overrides/madara/yuriverso/res/mipmap-xxhdpi/ic_launcher.png
new file mode 100644
index 000000000..4b6061812
Binary files /dev/null and b/multisrc/overrides/madara/yuriverso/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/yuriverso/res/mipmap-xxxhdpi/ic_launcher.png b/multisrc/overrides/madara/yuriverso/res/mipmap-xxxhdpi/ic_launcher.png
new file mode 100644
index 000000000..ae26ef756
Binary files /dev/null and b/multisrc/overrides/madara/yuriverso/res/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/yuriverso/src/YuriVerso.kt b/multisrc/overrides/madara/yuriverso/src/YuriVerso.kt
new file mode 100644
index 000000000..89f599b25
--- /dev/null
+++ b/multisrc/overrides/madara/yuriverso/src/YuriVerso.kt
@@ -0,0 +1,20 @@
+package eu.kanade.tachiyomi.extension.pt.yuriverso
+
+import eu.kanade.tachiyomi.multisrc.madara.Madara
+import eu.kanade.tachiyomi.network.interceptor.rateLimit
+import okhttp3.OkHttpClient
+import java.text.SimpleDateFormat
+import java.util.Locale
+import java.util.concurrent.TimeUnit
+
+class YuriVerso : Madara(
+ "Yuri Verso",
+ "https://yuri.live",
+ "pt-BR",
+ SimpleDateFormat("dd/MM/yyyy", Locale("pt", "BR")),
+) {
+
+ override val client: OkHttpClient = super.client.newBuilder()
+ .rateLimit(1, 2, TimeUnit.SECONDS)
+ .build()
+}
diff --git a/multisrc/overrides/madara/zandynofansub/res/mipmap-hdpi/ic_launcher.png b/multisrc/overrides/madara/zandynofansub/res/mipmap-hdpi/ic_launcher.png
new file mode 100644
index 000000000..4d314a961
Binary files /dev/null and b/multisrc/overrides/madara/zandynofansub/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/zandynofansub/res/mipmap-mdpi/ic_launcher.png b/multisrc/overrides/madara/zandynofansub/res/mipmap-mdpi/ic_launcher.png
new file mode 100644
index 000000000..6ebee1afd
Binary files /dev/null and b/multisrc/overrides/madara/zandynofansub/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/zandynofansub/res/mipmap-xhdpi/ic_launcher.png b/multisrc/overrides/madara/zandynofansub/res/mipmap-xhdpi/ic_launcher.png
new file mode 100644
index 000000000..9cab71f59
Binary files /dev/null and b/multisrc/overrides/madara/zandynofansub/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/zandynofansub/res/mipmap-xxhdpi/ic_launcher.png b/multisrc/overrides/madara/zandynofansub/res/mipmap-xxhdpi/ic_launcher.png
new file mode 100644
index 000000000..541c5001b
Binary files /dev/null and b/multisrc/overrides/madara/zandynofansub/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/zandynofansub/res/mipmap-xxxhdpi/ic_launcher.png b/multisrc/overrides/madara/zandynofansub/res/mipmap-xxxhdpi/ic_launcher.png
new file mode 100644
index 000000000..3af8f8861
Binary files /dev/null and b/multisrc/overrides/madara/zandynofansub/res/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/zandynofansub/src/ZandynoFansub.kt b/multisrc/overrides/madara/zandynofansub/src/ZandynoFansub.kt
new file mode 100644
index 000000000..c27f55de2
--- /dev/null
+++ b/multisrc/overrides/madara/zandynofansub/src/ZandynoFansub.kt
@@ -0,0 +1,7 @@
+package eu.kanade.tachiyomi.extension.en.zandynofansub
+
+import eu.kanade.tachiyomi.multisrc.madara.Madara
+class ZandynoFansub : Madara("Zandy no Fansub", "https://zandynofansub.aishiteru.org", "en") {
+ // Migrating from FoolSlide to Madara
+ override val versionId = 2
+}
diff --git a/multisrc/overrides/madara/zinchanmanga/res/mipmap-hdpi/ic_launcher.png b/multisrc/overrides/madara/zinchanmanga/res/mipmap-hdpi/ic_launcher.png
new file mode 100644
index 000000000..98863e81b
Binary files /dev/null and b/multisrc/overrides/madara/zinchanmanga/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/zinchanmanga/res/mipmap-mdpi/ic_launcher.png b/multisrc/overrides/madara/zinchanmanga/res/mipmap-mdpi/ic_launcher.png
new file mode 100644
index 000000000..a17a6e171
Binary files /dev/null and b/multisrc/overrides/madara/zinchanmanga/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/zinchanmanga/res/mipmap-xhdpi/ic_launcher.png b/multisrc/overrides/madara/zinchanmanga/res/mipmap-xhdpi/ic_launcher.png
new file mode 100644
index 000000000..8aed81fd2
Binary files /dev/null and b/multisrc/overrides/madara/zinchanmanga/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/zinchanmanga/res/mipmap-xxhdpi/ic_launcher.png b/multisrc/overrides/madara/zinchanmanga/res/mipmap-xxhdpi/ic_launcher.png
new file mode 100644
index 000000000..2c0771c26
Binary files /dev/null and b/multisrc/overrides/madara/zinchanmanga/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/zinchanmanga/res/mipmap-xxxhdpi/ic_launcher.png b/multisrc/overrides/madara/zinchanmanga/res/mipmap-xxxhdpi/ic_launcher.png
new file mode 100644
index 000000000..ee9bcac78
Binary files /dev/null and b/multisrc/overrides/madara/zinchanmanga/res/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/zinchanmanga/src/ZinChanManga.kt b/multisrc/overrides/madara/zinchanmanga/src/ZinChanManga.kt
new file mode 100644
index 000000000..0c1dbb2e3
--- /dev/null
+++ b/multisrc/overrides/madara/zinchanmanga/src/ZinChanManga.kt
@@ -0,0 +1,7 @@
+package eu.kanade.tachiyomi.extension.en.zinchanmanga
+
+import eu.kanade.tachiyomi.multisrc.madara.Madara
+
+class ZinChanManga : Madara("ZinChanManga", "https://zinchanmanga.com", "en") {
+ override val versionId = 2
+}
diff --git a/multisrc/overrides/madara/zinmanga/res/mipmap-hdpi/ic_launcher.png b/multisrc/overrides/madara/zinmanga/res/mipmap-hdpi/ic_launcher.png
new file mode 100644
index 000000000..4f44f2c34
Binary files /dev/null and b/multisrc/overrides/madara/zinmanga/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/zinmanga/res/mipmap-mdpi/ic_launcher.png b/multisrc/overrides/madara/zinmanga/res/mipmap-mdpi/ic_launcher.png
new file mode 100644
index 000000000..fb6c14fc0
Binary files /dev/null and b/multisrc/overrides/madara/zinmanga/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/zinmanga/res/mipmap-xhdpi/ic_launcher.png b/multisrc/overrides/madara/zinmanga/res/mipmap-xhdpi/ic_launcher.png
new file mode 100644
index 000000000..84a36fd40
Binary files /dev/null and b/multisrc/overrides/madara/zinmanga/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/zinmanga/res/mipmap-xxhdpi/ic_launcher.png b/multisrc/overrides/madara/zinmanga/res/mipmap-xxhdpi/ic_launcher.png
new file mode 100644
index 000000000..9a619af8c
Binary files /dev/null and b/multisrc/overrides/madara/zinmanga/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/zinmanga/res/mipmap-xxxhdpi/ic_launcher.png b/multisrc/overrides/madara/zinmanga/res/mipmap-xxxhdpi/ic_launcher.png
new file mode 100644
index 000000000..33552655d
Binary files /dev/null and b/multisrc/overrides/madara/zinmanga/res/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/zinmanga/src/Zinmanga.kt b/multisrc/overrides/madara/zinmanga/src/Zinmanga.kt
new file mode 100644
index 000000000..bbb83f44e
--- /dev/null
+++ b/multisrc/overrides/madara/zinmanga/src/Zinmanga.kt
@@ -0,0 +1,9 @@
+package eu.kanade.tachiyomi.extension.en.zinmanga
+
+import eu.kanade.tachiyomi.multisrc.madara.Madara
+
+class Zinmanga : Madara("Zinmanga", "https://zinmanga.com", "en") {
+
+ // The website does not flag the content.
+ override val filterNonMangaItems = false
+}
diff --git a/multisrc/overrides/madara/zinmangatop/src/ZinMangaTop.kt b/multisrc/overrides/madara/zinmangatop/src/ZinMangaTop.kt
new file mode 100644
index 000000000..445a22ebe
--- /dev/null
+++ b/multisrc/overrides/madara/zinmangatop/src/ZinMangaTop.kt
@@ -0,0 +1,9 @@
+package eu.kanade.tachiyomi.extension.en.zinmangatop
+
+import eu.kanade.tachiyomi.multisrc.madara.Madara
+
+class ZinMangaTop : Madara("ZinManga.top (unoriginal)", "https://zinmanga.top", "en") {
+ override val useNewChapterEndpoint = true
+
+ override fun searchPage(page: Int): String = if (page == 1) "" else "page/$page/"
+}
diff --git a/multisrc/overrides/madara/zinmanhwa/res/mipmap-hdpi/ic_launcher.png b/multisrc/overrides/madara/zinmanhwa/res/mipmap-hdpi/ic_launcher.png
new file mode 100644
index 000000000..4f44f2c34
Binary files /dev/null and b/multisrc/overrides/madara/zinmanhwa/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/zinmanhwa/res/mipmap-mdpi/ic_launcher.png b/multisrc/overrides/madara/zinmanhwa/res/mipmap-mdpi/ic_launcher.png
new file mode 100644
index 000000000..fb6c14fc0
Binary files /dev/null and b/multisrc/overrides/madara/zinmanhwa/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/zinmanhwa/res/mipmap-xhdpi/ic_launcher.png b/multisrc/overrides/madara/zinmanhwa/res/mipmap-xhdpi/ic_launcher.png
new file mode 100644
index 000000000..84a36fd40
Binary files /dev/null and b/multisrc/overrides/madara/zinmanhwa/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/zinmanhwa/res/mipmap-xxhdpi/ic_launcher.png b/multisrc/overrides/madara/zinmanhwa/res/mipmap-xxhdpi/ic_launcher.png
new file mode 100644
index 000000000..9a619af8c
Binary files /dev/null and b/multisrc/overrides/madara/zinmanhwa/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/zinmanhwa/res/mipmap-xxxhdpi/ic_launcher.png b/multisrc/overrides/madara/zinmanhwa/res/mipmap-xxxhdpi/ic_launcher.png
new file mode 100644
index 000000000..33552655d
Binary files /dev/null and b/multisrc/overrides/madara/zinmanhwa/res/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/zinmanhwa/src/Zinmanhwa.kt b/multisrc/overrides/madara/zinmanhwa/src/Zinmanhwa.kt
new file mode 100644
index 000000000..531e8b1ff
--- /dev/null
+++ b/multisrc/overrides/madara/zinmanhwa/src/Zinmanhwa.kt
@@ -0,0 +1,12 @@
+package eu.kanade.tachiyomi.extension.en.zinmanhwa
+
+import eu.kanade.tachiyomi.multisrc.madara.Madara
+import java.text.SimpleDateFormat
+import java.util.Locale
+
+class Zinmanhwa : Madara(
+ "Zinmanhwa",
+ "https://zinmanhwa.com",
+ "en",
+ dateFormat = SimpleDateFormat("dd/MM/yy", Locale.US),
+)
diff --git a/multisrc/overrides/madtheme/beehentai/res/mipmap-hdpi/ic_launcher.png b/multisrc/overrides/madtheme/beehentai/res/mipmap-hdpi/ic_launcher.png
new file mode 100644
index 000000000..6eea5518b
Binary files /dev/null and b/multisrc/overrides/madtheme/beehentai/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madtheme/beehentai/res/mipmap-mdpi/ic_launcher.png b/multisrc/overrides/madtheme/beehentai/res/mipmap-mdpi/ic_launcher.png
new file mode 100644
index 000000000..c5428c91e
Binary files /dev/null and b/multisrc/overrides/madtheme/beehentai/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madtheme/beehentai/res/mipmap-xhdpi/ic_launcher.png b/multisrc/overrides/madtheme/beehentai/res/mipmap-xhdpi/ic_launcher.png
new file mode 100644
index 000000000..ea104a5a6
Binary files /dev/null and b/multisrc/overrides/madtheme/beehentai/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madtheme/beehentai/res/mipmap-xxhdpi/ic_launcher.png b/multisrc/overrides/madtheme/beehentai/res/mipmap-xxhdpi/ic_launcher.png
new file mode 100644
index 000000000..e07380f6a
Binary files /dev/null and b/multisrc/overrides/madtheme/beehentai/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madtheme/beehentai/res/mipmap-xxxhdpi/ic_launcher.png b/multisrc/overrides/madtheme/beehentai/res/mipmap-xxxhdpi/ic_launcher.png
new file mode 100644
index 000000000..9b95163a7
Binary files /dev/null and b/multisrc/overrides/madtheme/beehentai/res/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madtheme/default/res/mipmap-hdpi/ic_launcher.png b/multisrc/overrides/madtheme/default/res/mipmap-hdpi/ic_launcher.png
new file mode 100644
index 000000000..91747e9cc
Binary files /dev/null and b/multisrc/overrides/madtheme/default/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madtheme/default/res/mipmap-mdpi/ic_launcher.png b/multisrc/overrides/madtheme/default/res/mipmap-mdpi/ic_launcher.png
new file mode 100644
index 000000000..b811309fd
Binary files /dev/null and b/multisrc/overrides/madtheme/default/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madtheme/default/res/mipmap-xhdpi/ic_launcher.png b/multisrc/overrides/madtheme/default/res/mipmap-xhdpi/ic_launcher.png
new file mode 100644
index 000000000..65f36430a
Binary files /dev/null and b/multisrc/overrides/madtheme/default/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madtheme/default/res/mipmap-xxhdpi/ic_launcher.png b/multisrc/overrides/madtheme/default/res/mipmap-xxhdpi/ic_launcher.png
new file mode 100644
index 000000000..5453c2977
Binary files /dev/null and b/multisrc/overrides/madtheme/default/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madtheme/default/res/mipmap-xxxhdpi/ic_launcher.png b/multisrc/overrides/madtheme/default/res/mipmap-xxxhdpi/ic_launcher.png
new file mode 100644
index 000000000..f376815f2
Binary files /dev/null and b/multisrc/overrides/madtheme/default/res/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madtheme/mangabuddy/res/mipmap-hdpi/ic_launcher.png b/multisrc/overrides/madtheme/mangabuddy/res/mipmap-hdpi/ic_launcher.png
new file mode 100644
index 000000000..f425a066e
Binary files /dev/null and b/multisrc/overrides/madtheme/mangabuddy/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madtheme/mangabuddy/res/mipmap-mdpi/ic_launcher.png b/multisrc/overrides/madtheme/mangabuddy/res/mipmap-mdpi/ic_launcher.png
new file mode 100644
index 000000000..d3bd09d19
Binary files /dev/null and b/multisrc/overrides/madtheme/mangabuddy/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madtheme/mangabuddy/res/mipmap-xhdpi/ic_launcher.png b/multisrc/overrides/madtheme/mangabuddy/res/mipmap-xhdpi/ic_launcher.png
new file mode 100644
index 000000000..d0bc864ae
Binary files /dev/null and b/multisrc/overrides/madtheme/mangabuddy/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madtheme/mangabuddy/res/mipmap-xxhdpi/ic_launcher.png b/multisrc/overrides/madtheme/mangabuddy/res/mipmap-xxhdpi/ic_launcher.png
new file mode 100644
index 000000000..74f00e84c
Binary files /dev/null and b/multisrc/overrides/madtheme/mangabuddy/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madtheme/mangabuddy/res/mipmap-xxxhdpi/ic_launcher.png b/multisrc/overrides/madtheme/mangabuddy/res/mipmap-xxxhdpi/ic_launcher.png
new file mode 100644
index 000000000..e396ca6b8
Binary files /dev/null and b/multisrc/overrides/madtheme/mangabuddy/res/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madtheme/mangacute/res/mipmap-hdpi/ic_launcher.png b/multisrc/overrides/madtheme/mangacute/res/mipmap-hdpi/ic_launcher.png
new file mode 100644
index 000000000..b2b6d5581
Binary files /dev/null and b/multisrc/overrides/madtheme/mangacute/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madtheme/mangacute/res/mipmap-mdpi/ic_launcher.png b/multisrc/overrides/madtheme/mangacute/res/mipmap-mdpi/ic_launcher.png
new file mode 100644
index 000000000..1cba96283
Binary files /dev/null and b/multisrc/overrides/madtheme/mangacute/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madtheme/mangacute/res/mipmap-xhdpi/ic_launcher.png b/multisrc/overrides/madtheme/mangacute/res/mipmap-xhdpi/ic_launcher.png
new file mode 100644
index 000000000..d339c34d1
Binary files /dev/null and b/multisrc/overrides/madtheme/mangacute/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madtheme/mangacute/res/mipmap-xxhdpi/ic_launcher.png b/multisrc/overrides/madtheme/mangacute/res/mipmap-xxhdpi/ic_launcher.png
new file mode 100644
index 000000000..555abb3dc
Binary files /dev/null and b/multisrc/overrides/madtheme/mangacute/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madtheme/mangacute/res/mipmap-xxxhdpi/ic_launcher.png b/multisrc/overrides/madtheme/mangacute/res/mipmap-xxxhdpi/ic_launcher.png
new file mode 100644
index 000000000..4ed375e83
Binary files /dev/null and b/multisrc/overrides/madtheme/mangacute/res/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madtheme/mangaforest/res/mipmap-hdpi/ic_launcher.png b/multisrc/overrides/madtheme/mangaforest/res/mipmap-hdpi/ic_launcher.png
new file mode 100644
index 000000000..79b9e6069
Binary files /dev/null and b/multisrc/overrides/madtheme/mangaforest/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madtheme/mangaforest/res/mipmap-mdpi/ic_launcher.png b/multisrc/overrides/madtheme/mangaforest/res/mipmap-mdpi/ic_launcher.png
new file mode 100644
index 000000000..12ef94846
Binary files /dev/null and b/multisrc/overrides/madtheme/mangaforest/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madtheme/mangaforest/res/mipmap-xhdpi/ic_launcher.png b/multisrc/overrides/madtheme/mangaforest/res/mipmap-xhdpi/ic_launcher.png
new file mode 100644
index 000000000..236b496cf
Binary files /dev/null and b/multisrc/overrides/madtheme/mangaforest/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madtheme/mangaforest/res/mipmap-xxhdpi/ic_launcher.png b/multisrc/overrides/madtheme/mangaforest/res/mipmap-xxhdpi/ic_launcher.png
new file mode 100644
index 000000000..355b34385
Binary files /dev/null and b/multisrc/overrides/madtheme/mangaforest/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madtheme/mangaforest/res/mipmap-xxxhdpi/ic_launcher.png b/multisrc/overrides/madtheme/mangaforest/res/mipmap-xxxhdpi/ic_launcher.png
new file mode 100644
index 000000000..5e4331fa1
Binary files /dev/null and b/multisrc/overrides/madtheme/mangaforest/res/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madtheme/mangapuma/res/mipmap-hdpi/ic_launcher.png b/multisrc/overrides/madtheme/mangapuma/res/mipmap-hdpi/ic_launcher.png
new file mode 100644
index 000000000..bb2c893dd
Binary files /dev/null and b/multisrc/overrides/madtheme/mangapuma/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madtheme/mangapuma/res/mipmap-mdpi/ic_launcher.png b/multisrc/overrides/madtheme/mangapuma/res/mipmap-mdpi/ic_launcher.png
new file mode 100644
index 000000000..ba4cb311c
Binary files /dev/null and b/multisrc/overrides/madtheme/mangapuma/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madtheme/mangapuma/res/mipmap-xhdpi/ic_launcher.png b/multisrc/overrides/madtheme/mangapuma/res/mipmap-xhdpi/ic_launcher.png
new file mode 100644
index 000000000..af1ab9176
Binary files /dev/null and b/multisrc/overrides/madtheme/mangapuma/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madtheme/mangapuma/res/mipmap-xxhdpi/ic_launcher.png b/multisrc/overrides/madtheme/mangapuma/res/mipmap-xxhdpi/ic_launcher.png
new file mode 100644
index 000000000..3a2ef81a9
Binary files /dev/null and b/multisrc/overrides/madtheme/mangapuma/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madtheme/mangapuma/res/mipmap-xxxhdpi/ic_launcher.png b/multisrc/overrides/madtheme/mangapuma/res/mipmap-xxxhdpi/ic_launcher.png
new file mode 100644
index 000000000..674356cc5
Binary files /dev/null and b/multisrc/overrides/madtheme/mangapuma/res/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madtheme/mangapuma/src/MangaPuma.kt b/multisrc/overrides/madtheme/mangapuma/src/MangaPuma.kt
new file mode 100644
index 000000000..54832cb79
--- /dev/null
+++ b/multisrc/overrides/madtheme/mangapuma/src/MangaPuma.kt
@@ -0,0 +1,12 @@
+package eu.kanade.tachiyomi.extension.en.mangapuma
+
+import eu.kanade.tachiyomi.multisrc.madtheme.MadTheme
+
+class MangaPuma :
+ MadTheme(
+ "MangaPuma",
+ "https://mangapuma.com",
+ "en",
+ ) {
+ override val id = 7893483872024027913
+}
diff --git a/multisrc/overrides/madtheme/mangaxyz/res/mipmap-hdpi/ic_launcher.png b/multisrc/overrides/madtheme/mangaxyz/res/mipmap-hdpi/ic_launcher.png
new file mode 100644
index 000000000..8a8e68b20
Binary files /dev/null and b/multisrc/overrides/madtheme/mangaxyz/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madtheme/mangaxyz/res/mipmap-mdpi/ic_launcher.png b/multisrc/overrides/madtheme/mangaxyz/res/mipmap-mdpi/ic_launcher.png
new file mode 100644
index 000000000..81f750c3c
Binary files /dev/null and b/multisrc/overrides/madtheme/mangaxyz/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madtheme/mangaxyz/res/mipmap-xhdpi/ic_launcher.png b/multisrc/overrides/madtheme/mangaxyz/res/mipmap-xhdpi/ic_launcher.png
new file mode 100644
index 000000000..d40a022e2
Binary files /dev/null and b/multisrc/overrides/madtheme/mangaxyz/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madtheme/mangaxyz/res/mipmap-xxhdpi/ic_launcher.png b/multisrc/overrides/madtheme/mangaxyz/res/mipmap-xxhdpi/ic_launcher.png
new file mode 100644
index 000000000..f889240e1
Binary files /dev/null and b/multisrc/overrides/madtheme/mangaxyz/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madtheme/mangaxyz/res/mipmap-xxxhdpi/ic_launcher.png b/multisrc/overrides/madtheme/mangaxyz/res/mipmap-xxxhdpi/ic_launcher.png
new file mode 100644
index 000000000..9e1bf8544
Binary files /dev/null and b/multisrc/overrides/madtheme/mangaxyz/res/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madtheme/toonilyme/res/mipmap-hdpi/ic_launcher.png b/multisrc/overrides/madtheme/toonilyme/res/mipmap-hdpi/ic_launcher.png
new file mode 100644
index 000000000..6eea5518b
Binary files /dev/null and b/multisrc/overrides/madtheme/toonilyme/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madtheme/toonilyme/res/mipmap-mdpi/ic_launcher.png b/multisrc/overrides/madtheme/toonilyme/res/mipmap-mdpi/ic_launcher.png
new file mode 100644
index 000000000..c5428c91e
Binary files /dev/null and b/multisrc/overrides/madtheme/toonilyme/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madtheme/toonilyme/res/mipmap-xhdpi/ic_launcher.png b/multisrc/overrides/madtheme/toonilyme/res/mipmap-xhdpi/ic_launcher.png
new file mode 100644
index 000000000..ea104a5a6
Binary files /dev/null and b/multisrc/overrides/madtheme/toonilyme/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madtheme/toonilyme/res/mipmap-xxhdpi/ic_launcher.png b/multisrc/overrides/madtheme/toonilyme/res/mipmap-xxhdpi/ic_launcher.png
new file mode 100644
index 000000000..e07380f6a
Binary files /dev/null and b/multisrc/overrides/madtheme/toonilyme/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madtheme/toonilyme/res/mipmap-xxxhdpi/ic_launcher.png b/multisrc/overrides/madtheme/toonilyme/res/mipmap-xxxhdpi/ic_launcher.png
new file mode 100644
index 000000000..9b95163a7
Binary files /dev/null and b/multisrc/overrides/madtheme/toonilyme/res/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madtheme/toonitube/res/mipmap-hdpi/ic_launcher.png b/multisrc/overrides/madtheme/toonitube/res/mipmap-hdpi/ic_launcher.png
new file mode 100644
index 000000000..6eea5518b
Binary files /dev/null and b/multisrc/overrides/madtheme/toonitube/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madtheme/toonitube/res/mipmap-mdpi/ic_launcher.png b/multisrc/overrides/madtheme/toonitube/res/mipmap-mdpi/ic_launcher.png
new file mode 100644
index 000000000..c5428c91e
Binary files /dev/null and b/multisrc/overrides/madtheme/toonitube/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madtheme/toonitube/res/mipmap-xhdpi/ic_launcher.png b/multisrc/overrides/madtheme/toonitube/res/mipmap-xhdpi/ic_launcher.png
new file mode 100644
index 000000000..ea104a5a6
Binary files /dev/null and b/multisrc/overrides/madtheme/toonitube/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madtheme/toonitube/res/mipmap-xxhdpi/ic_launcher.png b/multisrc/overrides/madtheme/toonitube/res/mipmap-xxhdpi/ic_launcher.png
new file mode 100644
index 000000000..e07380f6a
Binary files /dev/null and b/multisrc/overrides/madtheme/toonitube/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madtheme/toonitube/res/mipmap-xxxhdpi/ic_launcher.png b/multisrc/overrides/madtheme/toonitube/res/mipmap-xxxhdpi/ic_launcher.png
new file mode 100644
index 000000000..9b95163a7
Binary files /dev/null and b/multisrc/overrides/madtheme/toonitube/res/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madtheme/truemanga/res/mipmap-hdpi/ic_launcher.png b/multisrc/overrides/madtheme/truemanga/res/mipmap-hdpi/ic_launcher.png
new file mode 100644
index 000000000..38566e2c8
Binary files /dev/null and b/multisrc/overrides/madtheme/truemanga/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madtheme/truemanga/res/mipmap-mdpi/ic_launcher.png b/multisrc/overrides/madtheme/truemanga/res/mipmap-mdpi/ic_launcher.png
new file mode 100644
index 000000000..a3d3a13a7
Binary files /dev/null and b/multisrc/overrides/madtheme/truemanga/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madtheme/truemanga/res/mipmap-xhdpi/ic_launcher.png b/multisrc/overrides/madtheme/truemanga/res/mipmap-xhdpi/ic_launcher.png
new file mode 100644
index 000000000..7a381784d
Binary files /dev/null and b/multisrc/overrides/madtheme/truemanga/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madtheme/truemanga/res/mipmap-xxhdpi/ic_launcher.png b/multisrc/overrides/madtheme/truemanga/res/mipmap-xxhdpi/ic_launcher.png
new file mode 100644
index 000000000..6e33b5f2a
Binary files /dev/null and b/multisrc/overrides/madtheme/truemanga/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madtheme/truemanga/res/mipmap-xxxhdpi/ic_launcher.png b/multisrc/overrides/madtheme/truemanga/res/mipmap-xxxhdpi/ic_launcher.png
new file mode 100644
index 000000000..6a76f3ac9
Binary files /dev/null and b/multisrc/overrides/madtheme/truemanga/res/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/mangabox/default/res/mipmap-hdpi/ic_launcher.png b/multisrc/overrides/mangabox/default/res/mipmap-hdpi/ic_launcher.png
new file mode 100644
index 000000000..2fbde5dc4
Binary files /dev/null and b/multisrc/overrides/mangabox/default/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/mangabox/default/res/mipmap-mdpi/ic_launcher.png b/multisrc/overrides/mangabox/default/res/mipmap-mdpi/ic_launcher.png
new file mode 100644
index 000000000..fbd5f9b2e
Binary files /dev/null and b/multisrc/overrides/mangabox/default/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/mangabox/default/res/mipmap-xhdpi/ic_launcher.png b/multisrc/overrides/mangabox/default/res/mipmap-xhdpi/ic_launcher.png
new file mode 100644
index 000000000..70bb7fc6b
Binary files /dev/null and b/multisrc/overrides/mangabox/default/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/mangabox/default/res/mipmap-xxhdpi/ic_launcher.png b/multisrc/overrides/mangabox/default/res/mipmap-xxhdpi/ic_launcher.png
new file mode 100644
index 000000000..1d1dcacd2
Binary files /dev/null and b/multisrc/overrides/mangabox/default/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/mangabox/default/res/mipmap-xxxhdpi/ic_launcher.png b/multisrc/overrides/mangabox/default/res/mipmap-xxxhdpi/ic_launcher.png
new file mode 100644
index 000000000..cf642b28f
Binary files /dev/null and b/multisrc/overrides/mangabox/default/res/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/mangabox/mangabat/res/mipmap-hdpi/ic_launcher.png b/multisrc/overrides/mangabox/mangabat/res/mipmap-hdpi/ic_launcher.png
new file mode 100644
index 000000000..8ba197004
Binary files /dev/null and b/multisrc/overrides/mangabox/mangabat/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/mangabox/mangabat/res/mipmap-mdpi/ic_launcher.png b/multisrc/overrides/mangabox/mangabat/res/mipmap-mdpi/ic_launcher.png
new file mode 100644
index 000000000..ae651e692
Binary files /dev/null and b/multisrc/overrides/mangabox/mangabat/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/mangabox/mangabat/res/mipmap-xhdpi/ic_launcher.png b/multisrc/overrides/mangabox/mangabat/res/mipmap-xhdpi/ic_launcher.png
new file mode 100644
index 000000000..44339134e
Binary files /dev/null and b/multisrc/overrides/mangabox/mangabat/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/mangabox/mangabat/res/mipmap-xxhdpi/ic_launcher.png b/multisrc/overrides/mangabox/mangabat/res/mipmap-xxhdpi/ic_launcher.png
new file mode 100644
index 000000000..faa37b014
Binary files /dev/null and b/multisrc/overrides/mangabox/mangabat/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/mangabox/mangabat/res/mipmap-xxxhdpi/ic_launcher.png b/multisrc/overrides/mangabox/mangabat/res/mipmap-xxxhdpi/ic_launcher.png
new file mode 100644
index 000000000..502995dac
Binary files /dev/null and b/multisrc/overrides/mangabox/mangabat/res/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/mangabox/mangabat/src/Mangabat.kt b/multisrc/overrides/mangabox/mangabat/src/Mangabat.kt
new file mode 100644
index 000000000..7c397fb91
--- /dev/null
+++ b/multisrc/overrides/mangabox/mangabat/src/Mangabat.kt
@@ -0,0 +1,17 @@
+package eu.kanade.tachiyomi.extension.en.mangabat
+
+import eu.kanade.tachiyomi.multisrc.mangabox.MangaBox
+import eu.kanade.tachiyomi.network.GET
+import okhttp3.Request
+import java.text.SimpleDateFormat
+import java.util.Locale
+
+class Mangabat : MangaBox("Mangabat", "https://m.mangabat.com", "en", SimpleDateFormat("MMM dd,yy", Locale.ENGLISH)) {
+ override fun popularMangaRequest(page: Int): Request = GET("$baseUrl/manga-list-all/$page?type=topview", headers)
+ override fun popularMangaSelector() = "div.list-story-item"
+ override val latestUrlPath = "manga-list-all/"
+ override fun searchMangaSelector() = "div.list-story-item"
+ override fun getAdvancedGenreFilters(): List
= getGenreFilters()
+ .drop(1)
+ .map { AdvGenre(it.first, it.second) }
+}
diff --git a/multisrc/overrides/mangabox/mangairo/res/mipmap-hdpi/ic_launcher.png b/multisrc/overrides/mangabox/mangairo/res/mipmap-hdpi/ic_launcher.png
new file mode 100644
index 000000000..7ab1b9070
Binary files /dev/null and b/multisrc/overrides/mangabox/mangairo/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/mangabox/mangairo/res/mipmap-mdpi/ic_launcher.png b/multisrc/overrides/mangabox/mangairo/res/mipmap-mdpi/ic_launcher.png
new file mode 100644
index 000000000..df8c10a58
Binary files /dev/null and b/multisrc/overrides/mangabox/mangairo/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/mangabox/mangairo/res/mipmap-xhdpi/ic_launcher.png b/multisrc/overrides/mangabox/mangairo/res/mipmap-xhdpi/ic_launcher.png
new file mode 100644
index 000000000..683d30f8b
Binary files /dev/null and b/multisrc/overrides/mangabox/mangairo/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/mangabox/mangairo/res/mipmap-xxhdpi/ic_launcher.png b/multisrc/overrides/mangabox/mangairo/res/mipmap-xxhdpi/ic_launcher.png
new file mode 100644
index 000000000..545a0404f
Binary files /dev/null and b/multisrc/overrides/mangabox/mangairo/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/mangabox/mangairo/res/mipmap-xxxhdpi/ic_launcher.png b/multisrc/overrides/mangabox/mangairo/res/mipmap-xxxhdpi/ic_launcher.png
new file mode 100644
index 000000000..07c031464
Binary files /dev/null and b/multisrc/overrides/mangabox/mangairo/res/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/mangabox/mangairo/src/Mangairo.kt b/multisrc/overrides/mangabox/mangairo/src/Mangairo.kt
new file mode 100644
index 000000000..a18a4b039
--- /dev/null
+++ b/multisrc/overrides/mangabox/mangairo/src/Mangairo.kt
@@ -0,0 +1,32 @@
+package eu.kanade.tachiyomi.extension.en.mangairo
+
+import eu.kanade.tachiyomi.multisrc.mangabox.MangaBox
+import eu.kanade.tachiyomi.network.GET
+import eu.kanade.tachiyomi.source.model.FilterList
+import eu.kanade.tachiyomi.source.model.SManga
+import okhttp3.Request
+import org.jsoup.nodes.Element
+import java.text.SimpleDateFormat
+import java.util.Locale
+
+class Mangairo : MangaBox("Mangairo", "https://h.mangairo.com", "en", SimpleDateFormat("MMM-dd-yy", Locale.ENGLISH)) {
+ override val popularUrlPath = "manga-list/type-topview/ctg-all/state-all/page-"
+ override fun popularMangaSelector() = "div.story-item"
+ override val latestUrlPath = "manga-list/type-latest/ctg-all/state-all/page-"
+ override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request {
+ return GET("$baseUrl/list/$simpleQueryPath${normalizeSearchQuery(query)}?page=$page", headers)
+ }
+
+ override fun searchMangaSelector() = "div.story-item"
+ override fun searchMangaFromElement(element: Element): SManga = mangaFromElement(element, "h2 a")
+ override fun searchMangaNextPageSelector() = "div.group-page a.select + a:not(.go-p-end)"
+ override val mangaDetailsMainSelector = "${super.mangaDetailsMainSelector}, div.story_content"
+ override val thumbnailSelector = "${super.thumbnailSelector}, div.story_info_left img"
+ override val descriptionSelector = "${super.descriptionSelector}, div#story_discription p"
+ override fun chapterListSelector() = "${super.chapterListSelector()}, div#chapter_list li"
+ override val alternateChapterDateSelector = "p"
+ override val pageListSelector = "${super.pageListSelector}, div.panel-read-story img"
+
+ // will have to write a separate searchMangaRequest to get filters working for this source
+ override fun getFilterList() = FilterList()
+}
diff --git a/multisrc/overrides/mangabox/mangakakalot/res/mipmap-hdpi/ic_launcher.png b/multisrc/overrides/mangabox/mangakakalot/res/mipmap-hdpi/ic_launcher.png
new file mode 100644
index 000000000..6116aa5a9
Binary files /dev/null and b/multisrc/overrides/mangabox/mangakakalot/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/mangabox/mangakakalot/res/mipmap-mdpi/ic_launcher.png b/multisrc/overrides/mangabox/mangakakalot/res/mipmap-mdpi/ic_launcher.png
new file mode 100644
index 000000000..f92400232
Binary files /dev/null and b/multisrc/overrides/mangabox/mangakakalot/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/mangabox/mangakakalot/res/mipmap-xhdpi/ic_launcher.png b/multisrc/overrides/mangabox/mangakakalot/res/mipmap-xhdpi/ic_launcher.png
new file mode 100644
index 000000000..c6dacd27f
Binary files /dev/null and b/multisrc/overrides/mangabox/mangakakalot/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/mangabox/mangakakalot/res/mipmap-xxhdpi/ic_launcher.png b/multisrc/overrides/mangabox/mangakakalot/res/mipmap-xxhdpi/ic_launcher.png
new file mode 100644
index 000000000..00b05b9d0
Binary files /dev/null and b/multisrc/overrides/mangabox/mangakakalot/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/mangabox/mangakakalot/res/mipmap-xxxhdpi/ic_launcher.png b/multisrc/overrides/mangabox/mangakakalot/res/mipmap-xxxhdpi/ic_launcher.png
new file mode 100644
index 000000000..f315e8404
Binary files /dev/null and b/multisrc/overrides/mangabox/mangakakalot/res/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/mangabox/mangakakalot/src/Mangakakalot.kt b/multisrc/overrides/mangabox/mangakakalot/src/Mangakakalot.kt
new file mode 100644
index 000000000..93ebc819e
--- /dev/null
+++ b/multisrc/overrides/mangabox/mangakakalot/src/Mangakakalot.kt
@@ -0,0 +1,10 @@
+package eu.kanade.tachiyomi.extension.en.mangakakalot
+
+import eu.kanade.tachiyomi.multisrc.mangabox.MangaBox
+import okhttp3.Headers
+
+class Mangakakalot : MangaBox("Mangakakalot", "https://mangakakalot.com", "en") {
+ override fun headersBuilder(): Headers.Builder = super.headersBuilder().set("Referer", "https://manganato.com") // for covers
+ override val simpleQueryPath = "search/story/"
+ override fun searchMangaSelector() = "${super.searchMangaSelector()}, div.list-truyen-item-wrap"
+}
diff --git a/multisrc/overrides/mangabox/mangakakalots/res/mipmap-hdpi/ic_launcher.png b/multisrc/overrides/mangabox/mangakakalots/res/mipmap-hdpi/ic_launcher.png
new file mode 100644
index 000000000..6116aa5a9
Binary files /dev/null and b/multisrc/overrides/mangabox/mangakakalots/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/mangabox/mangakakalots/res/mipmap-mdpi/ic_launcher.png b/multisrc/overrides/mangabox/mangakakalots/res/mipmap-mdpi/ic_launcher.png
new file mode 100644
index 000000000..f92400232
Binary files /dev/null and b/multisrc/overrides/mangabox/mangakakalots/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/mangabox/mangakakalots/res/mipmap-xhdpi/ic_launcher.png b/multisrc/overrides/mangabox/mangakakalots/res/mipmap-xhdpi/ic_launcher.png
new file mode 100644
index 000000000..c6dacd27f
Binary files /dev/null and b/multisrc/overrides/mangabox/mangakakalots/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/mangabox/mangakakalots/res/mipmap-xxhdpi/ic_launcher.png b/multisrc/overrides/mangabox/mangakakalots/res/mipmap-xxhdpi/ic_launcher.png
new file mode 100644
index 000000000..00b05b9d0
Binary files /dev/null and b/multisrc/overrides/mangabox/mangakakalots/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/mangabox/mangakakalots/res/mipmap-xxxhdpi/ic_launcher.png b/multisrc/overrides/mangabox/mangakakalots/res/mipmap-xxxhdpi/ic_launcher.png
new file mode 100644
index 000000000..f315e8404
Binary files /dev/null and b/multisrc/overrides/mangabox/mangakakalots/res/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/mangabox/mangakakalots/src/Mangakakalots.kt b/multisrc/overrides/mangabox/mangakakalots/src/Mangakakalots.kt
new file mode 100644
index 000000000..27eeb6d1f
--- /dev/null
+++ b/multisrc/overrides/mangabox/mangakakalots/src/Mangakakalots.kt
@@ -0,0 +1,69 @@
+package eu.kanade.tachiyomi.extension.en.mangakakalots
+
+import eu.kanade.tachiyomi.multisrc.mangabox.MangaBox
+import eu.kanade.tachiyomi.source.model.MangasPage
+import eu.kanade.tachiyomi.util.asJsoup
+import okhttp3.Response
+import java.text.SimpleDateFormat
+import java.util.Locale
+
+class Mangakakalots : MangaBox("Mangakakalots (unoriginal)", "https://mangakakalots.com", "en", SimpleDateFormat("MMM dd,yy", Locale.ENGLISH)) {
+ override fun searchMangaSelector(): String = "${super.searchMangaSelector()}, div.list-truyen-item-wrap"
+ override fun searchMangaParse(response: Response): MangasPage {
+ val document = response.asJsoup()
+ val mangas = document.select(searchMangaSelector()).map { mangaFromElement(it) }
+ val hasNextPage = !response.request.url.toString()
+ .contains(document.select(searchMangaNextPageSelector()).attr("href"))
+
+ return MangasPage(mangas, hasNextPage)
+ }
+ override fun searchMangaNextPageSelector() = "div.group_page a:last-of-type"
+ override fun getStatusFilters(): Array> = arrayOf(
+ Pair("all", "ALL"),
+ Pair("Completed", "Completed"),
+ Pair("Ongoing", "Ongoing"),
+ )
+ override fun getGenreFilters(): Array> = arrayOf(
+ Pair("all", "ALL"),
+ Pair("Action", "Action"),
+ Pair("Adult", "Adult"),
+ Pair("Adventure", "Adventure"),
+ Pair("Comedy", "Comedy"),
+ Pair("Cooking", "Cooking"),
+ Pair("Doujinshi", "Doujinshi"),
+ Pair("Drama", "Drama"),
+ Pair("Ecchi", "Ecchi"),
+ Pair("Fantasy", "Fantasy"),
+ Pair("Gender bender", "Gender bender"),
+ Pair("Harem", "Harem"),
+ Pair("Historical", "Historical"),
+ Pair("Horror", "Horror"),
+ Pair("Isekai", "Isekai"),
+ Pair("Josei", "Josei"),
+ Pair("Manhua", "Manhua"),
+ Pair("Manhwa", "Manhwa"),
+ Pair("Martial arts", "Martial arts"),
+ Pair("Mature", "Mature"),
+ Pair("Mecha", "Mecha"),
+ Pair("Medical", "Medical"),
+ Pair("Mystery", "Mystery"),
+ Pair("One shot", "One shot"),
+ Pair("Psychological", "Psychological"),
+ Pair("Romance", "Romance"),
+ Pair("School life", "School life"),
+ Pair("Sci fi", "Sci fi"),
+ Pair("Seinen", "Seinen"),
+ Pair("Shoujo", "Shoujo"),
+ Pair("Shoujo ai", "Shoujo ai"),
+ Pair("Shounen", "Shounen"),
+ Pair("Shounen ai", "Shounen ai"),
+ Pair("Slice of life", "Slice of life"),
+ Pair("Smut", "Smut"),
+ Pair("Sports", "Sports"),
+ Pair("Supernatural", "Supernatural"),
+ Pair("Tragedy", "Tragedy"),
+ Pair("Webtoons", "Webtoons"),
+ Pair("Yaoi", "Yaoi"),
+ Pair("Yuri", "Yuri"),
+ )
+}
diff --git a/multisrc/overrides/mangabox/manganelo/res/mipmap-hdpi/ic_launcher.png b/multisrc/overrides/mangabox/manganelo/res/mipmap-hdpi/ic_launcher.png
new file mode 100644
index 000000000..2d4977e35
Binary files /dev/null and b/multisrc/overrides/mangabox/manganelo/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/mangabox/manganelo/res/mipmap-mdpi/ic_launcher.png b/multisrc/overrides/mangabox/manganelo/res/mipmap-mdpi/ic_launcher.png
new file mode 100644
index 000000000..098012279
Binary files /dev/null and b/multisrc/overrides/mangabox/manganelo/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/mangabox/manganelo/res/mipmap-xhdpi/ic_launcher.png b/multisrc/overrides/mangabox/manganelo/res/mipmap-xhdpi/ic_launcher.png
new file mode 100644
index 000000000..9d5ffe7c8
Binary files /dev/null and b/multisrc/overrides/mangabox/manganelo/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/mangabox/manganelo/res/mipmap-xxhdpi/ic_launcher.png b/multisrc/overrides/mangabox/manganelo/res/mipmap-xxhdpi/ic_launcher.png
new file mode 100644
index 000000000..51e039680
Binary files /dev/null and b/multisrc/overrides/mangabox/manganelo/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/mangabox/manganelo/res/mipmap-xxxhdpi/ic_launcher.png b/multisrc/overrides/mangabox/manganelo/res/mipmap-xxxhdpi/ic_launcher.png
new file mode 100644
index 000000000..04e67a0e7
Binary files /dev/null and b/multisrc/overrides/mangabox/manganelo/res/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/mangabox/manganelo/src/Manganato.kt b/multisrc/overrides/mangabox/manganelo/src/Manganato.kt
new file mode 100644
index 000000000..92c1e937b
--- /dev/null
+++ b/multisrc/overrides/mangabox/manganelo/src/Manganato.kt
@@ -0,0 +1,21 @@
+package eu.kanade.tachiyomi.extension.en.manganelo
+
+import eu.kanade.tachiyomi.multisrc.mangabox.MangaBox
+import eu.kanade.tachiyomi.network.GET
+import okhttp3.Request
+import java.text.SimpleDateFormat
+import java.util.Locale
+
+class Manganato : MangaBox("Manganato", "https://manganato.com", "en", SimpleDateFormat("MMM dd,yy", Locale.ENGLISH)) {
+ override val id: Long = 1024627298672457456
+
+ // Nelo's date format is part of the base class
+ override fun popularMangaRequest(page: Int): Request = GET("$baseUrl/genre-all/$page?type=topview", headers)
+ override fun popularMangaSelector() = "div.content-genres-item"
+ override val latestUrlPath = "genre-all/"
+ override val simpleQueryPath = "search/story/"
+ override fun searchMangaSelector() = "div.search-story-item, div.content-genres-item"
+ override fun getAdvancedGenreFilters(): List = getGenreFilters()
+ .drop(1)
+ .map { AdvGenre(it.first, it.second) }
+}
diff --git a/multisrc/overrides/mangacatalog/default/res/mipmap-hdpi/ic_launcher.png b/multisrc/overrides/mangacatalog/default/res/mipmap-hdpi/ic_launcher.png
new file mode 100644
index 000000000..ffa002e3c
Binary files /dev/null and b/multisrc/overrides/mangacatalog/default/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/mangacatalog/default/res/mipmap-mdpi/ic_launcher.png b/multisrc/overrides/mangacatalog/default/res/mipmap-mdpi/ic_launcher.png
new file mode 100644
index 000000000..6718b1d59
Binary files /dev/null and b/multisrc/overrides/mangacatalog/default/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/mangacatalog/default/res/mipmap-xhdpi/ic_launcher.png b/multisrc/overrides/mangacatalog/default/res/mipmap-xhdpi/ic_launcher.png
new file mode 100644
index 000000000..b0b71b409
Binary files /dev/null and b/multisrc/overrides/mangacatalog/default/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/mangacatalog/default/res/mipmap-xxhdpi/ic_launcher.png b/multisrc/overrides/mangacatalog/default/res/mipmap-xxhdpi/ic_launcher.png
new file mode 100644
index 000000000..b88f6d789
Binary files /dev/null and b/multisrc/overrides/mangacatalog/default/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/mangacatalog/default/res/mipmap-xxxhdpi/ic_launcher.png b/multisrc/overrides/mangacatalog/default/res/mipmap-xxxhdpi/ic_launcher.png
new file mode 100644
index 000000000..434116c30
Binary files /dev/null and b/multisrc/overrides/mangacatalog/default/res/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/mangacatalog/readattackontitanshingekinokyojinmanga/res/mipmap-hdpi/ic_launcher.png b/multisrc/overrides/mangacatalog/readattackontitanshingekinokyojinmanga/res/mipmap-hdpi/ic_launcher.png
new file mode 100644
index 000000000..6bb5cccf6
Binary files /dev/null and b/multisrc/overrides/mangacatalog/readattackontitanshingekinokyojinmanga/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/mangacatalog/readattackontitanshingekinokyojinmanga/res/mipmap-mdpi/ic_launcher.png b/multisrc/overrides/mangacatalog/readattackontitanshingekinokyojinmanga/res/mipmap-mdpi/ic_launcher.png
new file mode 100644
index 000000000..877692186
Binary files /dev/null and b/multisrc/overrides/mangacatalog/readattackontitanshingekinokyojinmanga/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/mangacatalog/readattackontitanshingekinokyojinmanga/res/mipmap-xhdpi/ic_launcher.png b/multisrc/overrides/mangacatalog/readattackontitanshingekinokyojinmanga/res/mipmap-xhdpi/ic_launcher.png
new file mode 100644
index 000000000..f9a701407
Binary files /dev/null and b/multisrc/overrides/mangacatalog/readattackontitanshingekinokyojinmanga/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/mangacatalog/readattackontitanshingekinokyojinmanga/res/mipmap-xxhdpi/ic_launcher.png b/multisrc/overrides/mangacatalog/readattackontitanshingekinokyojinmanga/res/mipmap-xxhdpi/ic_launcher.png
new file mode 100644
index 000000000..1b9ca3847
Binary files /dev/null and b/multisrc/overrides/mangacatalog/readattackontitanshingekinokyojinmanga/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/mangacatalog/readattackontitanshingekinokyojinmanga/res/mipmap-xxxhdpi/ic_launcher.png b/multisrc/overrides/mangacatalog/readattackontitanshingekinokyojinmanga/res/mipmap-xxxhdpi/ic_launcher.png
new file mode 100644
index 000000000..ffddf88b4
Binary files /dev/null and b/multisrc/overrides/mangacatalog/readattackontitanshingekinokyojinmanga/res/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/mangacatalog/readattackontitanshingekinokyojinmanga/src/ReadAttackOnTitanShingekiNoKyojinManga.kt b/multisrc/overrides/mangacatalog/readattackontitanshingekinokyojinmanga/src/ReadAttackOnTitanShingekiNoKyojinManga.kt
new file mode 100644
index 000000000..e58153de5
--- /dev/null
+++ b/multisrc/overrides/mangacatalog/readattackontitanshingekinokyojinmanga/src/ReadAttackOnTitanShingekiNoKyojinManga.kt
@@ -0,0 +1,33 @@
+package eu.kanade.tachiyomi.extension.en.readattackontitanshingekinokyojinmanga
+
+import eu.kanade.tachiyomi.multisrc.mangacatalog.MangaCatalog
+import eu.kanade.tachiyomi.source.model.SChapter
+import org.jsoup.nodes.Element
+
+class ReadAttackOnTitanShingekiNoKyojinManga : MangaCatalog("Read Attack on Titan Shingeki no Kyojin Manga", "https://ww8.readsnk.com", "en") {
+ override val sourceList = listOf(
+ Pair("Shingeki No Kyojin", "$baseUrl/manga/shingeki-no-kyojin/"),
+ Pair("Colored", "$baseUrl/manga/shingeki-no-kyojin-colored/"),
+ Pair("Before the Fall", "$baseUrl/manga/shingeki-no-kyojin-before-the-fall/"),
+ Pair("Lost Girls", "$baseUrl/manga/shingeki-no-kyojin-lost-girls/"),
+ Pair("No Regrets", "$baseUrl/manga/attack-on-titan-no-regrets/"),
+ Pair("Junior High", "$baseUrl/manga/attack-on-titan-junior-high/"),
+ Pair("Harsh Mistress", "$baseUrl/manga/attack-on-titan-harsh-mistress-of-the-city/"),
+ Pair("Anthology", "$baseUrl/manga/attack-on-titan-anthology/"),
+ Pair("Art Book", "$baseUrl/manga/attack-on-titan-exclusive-art-book/"),
+ Pair("Spoof", "$baseUrl/manga/spoof-on-titan/"),
+ Pair("Guidebook", "$baseUrl/manga/attack-on-titan-guidebook-inside-outside/"),
+ Pair("No Regrets Colored", "$baseUrl/manga/attack-on-titan-no-regrets-colored/"),
+ ).sortedBy { it.first }.distinctBy { it.second }
+
+ override fun chapterListSelector(): String = "div.w-full div.grid div.col-span-3"
+
+ override fun chapterFromElement(element: Element): SChapter = SChapter.create().apply {
+ val urlElement = element.selectFirst("a")!!
+ name = listOfNotNull(
+ urlElement.text(),
+ element.selectFirst("div.text-xs")!!.text().takeUnless { it.isBlank() },
+ ).joinToString(" - ") { it.trim() }
+ url = urlElement.attr("abs:href")
+ }
+}
diff --git a/multisrc/overrides/mangacatalog/readberserkmanga/src/ReadBerserkManga.kt b/multisrc/overrides/mangacatalog/readberserkmanga/src/ReadBerserkManga.kt
new file mode 100644
index 000000000..cacba110d
--- /dev/null
+++ b/multisrc/overrides/mangacatalog/readberserkmanga/src/ReadBerserkManga.kt
@@ -0,0 +1,31 @@
+package eu.kanade.tachiyomi.extension.en.readberserkmanga
+
+import eu.kanade.tachiyomi.multisrc.mangacatalog.MangaCatalog
+import eu.kanade.tachiyomi.source.model.SChapter
+import eu.kanade.tachiyomi.source.model.SManga
+import org.jsoup.nodes.Document
+import org.jsoup.nodes.Element
+
+class ReadBerserkManga : MangaCatalog("Read Berserk Manga", "https://readberserk.com", "en") {
+ override val sourceList = listOf(
+ Pair("Berserk", "$baseUrl/manga/berserk/"),
+ Pair("Guidebook", "$baseUrl/manga/berserk-official-guidebook/"),
+ Pair("Colored", "$baseUrl/manga/berserk-colored/"),
+ Pair("Motion Comic", "$baseUrl/manga/berserk-the-motion-comic/"),
+ Pair("Duranki", "$baseUrl/manga/duranki/"),
+ Pair("Gigantomakhia", "$baseUrl/manga/gigantomakhia/"),
+ Pair("Berserk Spoilers & RAW", "$baseUrl/manga/berserk-spoilers-raw/"),
+ ).sortedBy { it.first }.distinctBy { it.second }
+
+ override fun mangaDetailsParse(document: Document): SManga = SManga.create().apply {
+ description = document.select("div.card-body > p").text()
+ title = document.select("h2 > span").text()
+ thumbnail_url = document.select(".card-img-right").attr("src")
+ }
+ override fun chapterListSelector(): String = "tbody > tr"
+ override fun chapterFromElement(element: Element): SChapter = SChapter.create().apply {
+ name = element.select("td:first-child").text()
+ url = element.select("a.btn-primary").attr("abs:href")
+ date_upload = System.currentTimeMillis() // I have no idear how to parse Date stuff
+ }
+}
diff --git a/multisrc/overrides/mangacatalog/readblackclovermangaonline/src/ReadBlackCloverMangaOnline.kt b/multisrc/overrides/mangacatalog/readblackclovermangaonline/src/ReadBlackCloverMangaOnline.kt
new file mode 100644
index 000000000..1efd43049
--- /dev/null
+++ b/multisrc/overrides/mangacatalog/readblackclovermangaonline/src/ReadBlackCloverMangaOnline.kt
@@ -0,0 +1,12 @@
+package eu.kanade.tachiyomi.extension.en.readblackclovermangaonline
+
+import eu.kanade.tachiyomi.multisrc.mangacatalog.MangaCatalog
+
+class ReadBlackCloverMangaOnline : MangaCatalog("Read Black Clover Manga Online", "https://ww7.readblackclover.com", "en") {
+ override val sourceList = listOf(
+ Pair("Black Clover", "$baseUrl/manga/black-clover"),
+ Pair("Black Clover Gainden Quartet Knights", "$baseUrl/manga/black-clover-gaiden-quartet-knights"),
+ Pair("Fan Colored", "$baseUrl/manga/black-clover-colored"),
+ Pair("Hungry Joker", "$baseUrl/manga/hungry-joker"),
+ )
+}
diff --git a/multisrc/overrides/mangacatalog/readbokunoheroacademiamyheroacademiamanga/res/mipmap-hdpi/ic_launcher.png b/multisrc/overrides/mangacatalog/readbokunoheroacademiamyheroacademiamanga/res/mipmap-hdpi/ic_launcher.png
new file mode 100644
index 000000000..746b67b38
Binary files /dev/null and b/multisrc/overrides/mangacatalog/readbokunoheroacademiamyheroacademiamanga/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/mangacatalog/readbokunoheroacademiamyheroacademiamanga/res/mipmap-mdpi/ic_launcher.png b/multisrc/overrides/mangacatalog/readbokunoheroacademiamyheroacademiamanga/res/mipmap-mdpi/ic_launcher.png
new file mode 100644
index 000000000..1dac44bfe
Binary files /dev/null and b/multisrc/overrides/mangacatalog/readbokunoheroacademiamyheroacademiamanga/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/mangacatalog/readbokunoheroacademiamyheroacademiamanga/res/mipmap-xhdpi/ic_launcher.png b/multisrc/overrides/mangacatalog/readbokunoheroacademiamyheroacademiamanga/res/mipmap-xhdpi/ic_launcher.png
new file mode 100644
index 000000000..15f9991a7
Binary files /dev/null and b/multisrc/overrides/mangacatalog/readbokunoheroacademiamyheroacademiamanga/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/mangacatalog/readbokunoheroacademiamyheroacademiamanga/res/mipmap-xxhdpi/ic_launcher.png b/multisrc/overrides/mangacatalog/readbokunoheroacademiamyheroacademiamanga/res/mipmap-xxhdpi/ic_launcher.png
new file mode 100644
index 000000000..125054635
Binary files /dev/null and b/multisrc/overrides/mangacatalog/readbokunoheroacademiamyheroacademiamanga/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/mangacatalog/readbokunoheroacademiamyheroacademiamanga/res/mipmap-xxxhdpi/ic_launcher.png b/multisrc/overrides/mangacatalog/readbokunoheroacademiamyheroacademiamanga/res/mipmap-xxxhdpi/ic_launcher.png
new file mode 100644
index 000000000..b907fdfd7
Binary files /dev/null and b/multisrc/overrides/mangacatalog/readbokunoheroacademiamyheroacademiamanga/res/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/mangacatalog/readbokunoheroacademiamyheroacademiamanga/src/ReadBokuNoHeroAcademiaMyHeroAcademiaManga.kt b/multisrc/overrides/mangacatalog/readbokunoheroacademiamyheroacademiamanga/src/ReadBokuNoHeroAcademiaMyHeroAcademiaManga.kt
new file mode 100644
index 000000000..18f730057
--- /dev/null
+++ b/multisrc/overrides/mangacatalog/readbokunoheroacademiamyheroacademiamanga/src/ReadBokuNoHeroAcademiaMyHeroAcademiaManga.kt
@@ -0,0 +1,17 @@
+package eu.kanade.tachiyomi.extension.en.readbokunoheroacademiamyheroacademiamanga
+
+import eu.kanade.tachiyomi.multisrc.mangacatalog.MangaCatalog
+
+class ReadBokuNoHeroAcademiaMyHeroAcademiaManga : MangaCatalog("Read Boku no Hero Academia My Hero Academia Manga", "https://ww6.readmha.com", "en") {
+ override val sourceList = listOf(
+ Pair("Boku no Hero Academia", "$baseUrl/manga/boku-no-hero-academia/"),
+ Pair("Vigilante", "$baseUrl/manga/vigilante-boku-no-hero-academia-illegals/"),
+ Pair("Team Up", "$baseUrl/manga/my-hero-academia-team-up-mission/"),
+ Pair("MHA Smash", "$baseUrl/manga/boku-no-hero-academia-smash/"),
+ Pair("MHA: School Brief", "$baseUrl/manga/my-hero-academia-school-briefs/"),
+ Pair("Rising", "$baseUrl/manga/deku-bakugo-rising/"),
+ Pair("Colored", "$baseUrl/manga/boku-no-hero-academia-colored/"),
+ Pair("Oumagadoki Zoo", "$baseUrl/manga/oumagadoki-zoo/"),
+ Pair("Sensei no Bulge", "$baseUrl/manga/sensei-no-bulge/"),
+ ).sortedBy { it.first }.distinctBy { it.second }
+}
diff --git a/multisrc/overrides/mangacatalog/readchainsawmanmangaonline/src/ReadChainsawManMangaOnline.kt b/multisrc/overrides/mangacatalog/readchainsawmanmangaonline/src/ReadChainsawManMangaOnline.kt
new file mode 100644
index 000000000..b491ff473
--- /dev/null
+++ b/multisrc/overrides/mangacatalog/readchainsawmanmangaonline/src/ReadChainsawManMangaOnline.kt
@@ -0,0 +1,12 @@
+package eu.kanade.tachiyomi.extension.en.readchainsawmanmangaonline
+
+import eu.kanade.tachiyomi.multisrc.mangacatalog.MangaCatalog
+
+class ReadChainsawManMangaOnline : MangaCatalog("Read Chainsaw Man Manga Online", "https://ww1.readchainsawman.com", "en") {
+ override val sourceList = listOf(
+ Pair("Chainsaw Man", "$baseUrl/manga/chainsaw-man/"),
+ Pair("Fire Punch", "$baseUrl/manga/fire-punch/"),
+ Pair("Nayuta", "$baseUrl/manga/yogen-no-nayuta/"),
+ Pair("Colored", "$baseUrl/manga/chainsaw-man-colored/"),
+ ).sortedBy { it.first }.distinctBy { it.second }
+}
diff --git a/multisrc/overrides/mangacatalog/readdragonballsuperchoumangaonline/src/ReadDragonBallSuperChouMangaOnline.kt b/multisrc/overrides/mangacatalog/readdragonballsuperchoumangaonline/src/ReadDragonBallSuperChouMangaOnline.kt
new file mode 100644
index 000000000..80afcf3f8
--- /dev/null
+++ b/multisrc/overrides/mangacatalog/readdragonballsuperchoumangaonline/src/ReadDragonBallSuperChouMangaOnline.kt
@@ -0,0 +1,22 @@
+package eu.kanade.tachiyomi.extension.en.readdragonballsuperchoumangaonline
+
+import eu.kanade.tachiyomi.multisrc.mangacatalog.MangaCatalog
+
+class ReadDragonBallSuperChouMangaOnline : MangaCatalog("Read Dragon Ball Super Chou Manga Online", "https://ww6.dbsmanga.com", "en") {
+ override val sourceList = listOf(
+ Pair("Dragon Ball Super", "$baseUrl/manga/dragon-ball-super/"),
+ Pair("Dragon Ball", "$baseUrl/manga/dragon-ball/"),
+ Pair("Bardock", "$baseUrl/manga/dragon-ball-episode-of-bardock/"),
+ Pair("Victory Mission", "$baseUrl/manga/dragon-ball-heroes-victory-mission/"),
+ Pair("DB SD", "$baseUrl/manga/dragon-ball-sd/"),
+ Pair("Yamcha Isekai", "$baseUrl/manga/dragon-ball-side-story-yamcha-isekai/"),
+ Pair("DB x OP", "$baseUrl/manga/dragon-ball-x-one-piece/"),
+ Pair("Rebirth of F", "$baseUrl/manga/dragon-ball-z-rebirth-of-f/"),
+ Pair("Dark Realm", "$baseUrl/manga/super-dragon-ball-heroes-dark-demon-realm-mission/"),
+ Pair("Universe Mission", "$baseUrl/manga/super-dragon-ball-heroes-universe-mission/"),
+ Pair("Colored: Saiyan Arc", "$baseUrl/manga/dragon-ball-full-color-saiyan-arc/"),
+ Pair("Colored: Freeza Arc", "$baseUrl/manga/dragon-ball-full-color-freeza-arc/"),
+ Pair("Big Bang Mission!", "$baseUrl/manga/super-dragon-ball-heroes-big-bang-mission/"),
+ Pair("DBS Colored", "$baseUrl/manga/dragon-ball-super-colored/"),
+ ).sortedBy { it.first }.distinctBy { it.second }
+}
diff --git a/multisrc/overrides/mangacatalog/readdrstonemangaonline/src/ReadDrStoneMangaOnline.kt b/multisrc/overrides/mangacatalog/readdrstonemangaonline/src/ReadDrStoneMangaOnline.kt
new file mode 100644
index 000000000..53e1a4fe2
--- /dev/null
+++ b/multisrc/overrides/mangacatalog/readdrstonemangaonline/src/ReadDrStoneMangaOnline.kt
@@ -0,0 +1,13 @@
+package eu.kanade.tachiyomi.extension.en.readdrstonemangaonline
+
+import eu.kanade.tachiyomi.multisrc.mangacatalog.MangaCatalog
+
+class ReadDrStoneMangaOnline : MangaCatalog("Read Dr. Stone Manga Online", "https://ww3.readdrstone.com", "en") {
+ override val sourceList = listOf(
+ Pair("Dr. Stone", "$baseUrl/manga/dr-stone/"),
+ Pair("Dr. Stone: Reboot", "$baseUrl/manga/dr-stone-reboot-byakuya/"),
+ Pair("Sun-ken Rock", "$baseUrl/manga/sun-ken-rock/"),
+ Pair("Origin", "$baseUrl/manga/origin/"),
+ Pair("Raqiya", "$baseUrl/manga/raqiya/"),
+ ).sortedBy { it.first }.distinctBy { it.second }
+}
diff --git a/multisrc/overrides/mangacatalog/readfairytailedenszeromangaonline/src/ReadFairyTailEdensZeroMangaOnline.kt b/multisrc/overrides/mangacatalog/readfairytailedenszeromangaonline/src/ReadFairyTailEdensZeroMangaOnline.kt
new file mode 100644
index 000000000..8f76f4404
--- /dev/null
+++ b/multisrc/overrides/mangacatalog/readfairytailedenszeromangaonline/src/ReadFairyTailEdensZeroMangaOnline.kt
@@ -0,0 +1,24 @@
+package eu.kanade.tachiyomi.extension.en.readfairytailedenszeromangaonline
+
+import eu.kanade.tachiyomi.multisrc.mangacatalog.MangaCatalog
+
+class ReadFairyTailEdensZeroMangaOnline : MangaCatalog("Read Fairy Tail & Edens Zero Manga Online", "https://ww4.readfairytail.com", "en") {
+ override val sourceList = listOf(
+ Pair("Eden's Zero", "$baseUrl/manga/edens-zero/"),
+ Pair("Fairy Tail", "$baseUrl/manga/fairy-tail/"),
+ Pair("FT Zero", "$baseUrl/manga/fairy-tail-zero/"),
+ Pair("FT City Hero", "$baseUrl/manga/fairy-tail-zero/"),
+ Pair("Hero’s", "$baseUrl/manga/heros/"),
+ Pair("FT Happy Adv", "$baseUrl/manga/fairy-tail-happys-grand-adventure/"),
+ Pair("FT 100 Year", "$baseUrl/manga/fairy-tail-100-years-quest/"),
+ Pair("FT Ice Trail", "$baseUrl/manga/fairy-tail-ice-trail/"),
+ Pair("FT x Taizai", "$baseUrl/manga/fairy-tail-x-nanatsu-no-taizai-christmas-special/"),
+ Pair("Parasyte x FT", "$baseUrl/manga/parasyte-x-fairy-tail/"),
+ Pair("Monster Hunter", "$baseUrl/manga/monster-hunter-orage/"),
+ Pair("Rave Master", "$baseUrl/manga/rave-master/"),
+ Pair("Fairy Tail x Rave", "$baseUrl/manga/fairy-tail-x-rave/"),
+ Pair("Fairy Tail Gaiden – Raigo Issen", "$baseUrl/manga/fairy-tail-gaiden-raigo-issen/"),
+ Pair("Fairy Tail Gaiden – Kengami no Souryuu", "$baseUrl/manga/fairy-tail-gaiden-kengami-no-souryuu/"),
+ Pair("Fairy Tail Gaiden – Road Knight", "$baseUrl/manga/fairy-tail-gaiden-road-knight/"),
+ ).sortedBy { it.first }.distinctBy { it.second }
+}
diff --git a/multisrc/overrides/mangacatalog/readgoblinslayermangaonline/src/ReadGoblinSlayerMangaOnline.kt b/multisrc/overrides/mangacatalog/readgoblinslayermangaonline/src/ReadGoblinSlayerMangaOnline.kt
new file mode 100644
index 000000000..449a67108
--- /dev/null
+++ b/multisrc/overrides/mangacatalog/readgoblinslayermangaonline/src/ReadGoblinSlayerMangaOnline.kt
@@ -0,0 +1,28 @@
+package eu.kanade.tachiyomi.extension.en.readgoblinslayermangaonline
+
+import eu.kanade.tachiyomi.multisrc.mangacatalog.MangaCatalog
+import eu.kanade.tachiyomi.source.model.SChapter
+import eu.kanade.tachiyomi.source.model.SManga
+import org.jsoup.nodes.Document
+import org.jsoup.nodes.Element
+
+class ReadGoblinSlayerMangaOnline : MangaCatalog("Read Goblin Slayer Manga Online", "https://manga.watchgoblinslayer.com", "en") {
+ override val sourceList = listOf(
+ Pair("Goblin Slayer", "$baseUrl/manga/goblin-slayer/"),
+ Pair("Side Story: Brand New Day", "$baseUrl/manga/goblin-slayer-side-story-brand-new-day/"),
+ Pair("Side Story: Year One", "$baseUrl/manga/goblin-slayer-side-story-year-one/"),
+ Pair("Side Story: Gaiden 2", "$baseUrl/manga/goblin-slayer-gaiden-2-tsubanari-no-daikatana/"),
+ ).sortedBy { it.first }.distinctBy { it.second }
+
+ override fun mangaDetailsParse(document: Document): SManga = SManga.create().apply {
+ description = document.select("div.card-body > p").text()
+ title = document.select("h2 > span").text()
+ thumbnail_url = document.select(".card-img-right").attr("src")
+ }
+ override fun chapterListSelector(): String = "tbody > tr"
+ override fun chapterFromElement(element: Element): SChapter = SChapter.create().apply {
+ name = element.select("td:first-child").text()
+ url = element.select("a.btn-primary").attr("abs:href")
+ date_upload = System.currentTimeMillis() // I have no idear how to parse Date stuff
+ }
+}
diff --git a/multisrc/overrides/mangacatalog/readhaikyuumangaonline/src/ReadHaikyuuMangaOnline.kt b/multisrc/overrides/mangacatalog/readhaikyuumangaonline/src/ReadHaikyuuMangaOnline.kt
new file mode 100644
index 000000000..4beb70925
--- /dev/null
+++ b/multisrc/overrides/mangacatalog/readhaikyuumangaonline/src/ReadHaikyuuMangaOnline.kt
@@ -0,0 +1,12 @@
+package eu.kanade.tachiyomi.extension.en.readhaikyuumangaonline
+
+import eu.kanade.tachiyomi.multisrc.mangacatalog.MangaCatalog
+
+class ReadHaikyuuMangaOnline : MangaCatalog("Read Haikyuu!! Manga Online", "https://ww6.readhaikyuu.com", "en") {
+ override val sourceList = listOf(
+ Pair("Haikyuu", "$baseUrl/manga/haikyuu/"),
+ Pair("Haikyuu-bu!!", "$baseUrl/manga/haikyuu-bu/"),
+ Pair("Haikyuu! x Nisekoi", "$baseUrl/manga/haikyuu-x-nisekoi/"),
+ Pair("Let’s! Haikyu!?", "$baseUrl/manga/lets-haikyu/"),
+ ).sortedBy { it.first }.distinctBy { it.second }
+}
diff --git a/multisrc/overrides/mangacatalog/readhunterxhuntermangaonline/res/mipmap-hdpi/ic_launcher.png b/multisrc/overrides/mangacatalog/readhunterxhuntermangaonline/res/mipmap-hdpi/ic_launcher.png
new file mode 100644
index 000000000..92ca6fc2c
Binary files /dev/null and b/multisrc/overrides/mangacatalog/readhunterxhuntermangaonline/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/mangacatalog/readhunterxhuntermangaonline/res/mipmap-mdpi/ic_launcher.png b/multisrc/overrides/mangacatalog/readhunterxhuntermangaonline/res/mipmap-mdpi/ic_launcher.png
new file mode 100644
index 000000000..0efd806fc
Binary files /dev/null and b/multisrc/overrides/mangacatalog/readhunterxhuntermangaonline/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/mangacatalog/readhunterxhuntermangaonline/res/mipmap-xhdpi/ic_launcher.png b/multisrc/overrides/mangacatalog/readhunterxhuntermangaonline/res/mipmap-xhdpi/ic_launcher.png
new file mode 100644
index 000000000..56fefe9f0
Binary files /dev/null and b/multisrc/overrides/mangacatalog/readhunterxhuntermangaonline/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/mangacatalog/readhunterxhuntermangaonline/res/mipmap-xxhdpi/ic_launcher.png b/multisrc/overrides/mangacatalog/readhunterxhuntermangaonline/res/mipmap-xxhdpi/ic_launcher.png
new file mode 100644
index 000000000..158abcab9
Binary files /dev/null and b/multisrc/overrides/mangacatalog/readhunterxhuntermangaonline/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/mangacatalog/readhunterxhuntermangaonline/res/mipmap-xxxhdpi/ic_launcher.png b/multisrc/overrides/mangacatalog/readhunterxhuntermangaonline/res/mipmap-xxxhdpi/ic_launcher.png
new file mode 100644
index 000000000..d1c864692
Binary files /dev/null and b/multisrc/overrides/mangacatalog/readhunterxhuntermangaonline/res/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/mangacatalog/readhunterxhuntermangaonline/src/ReadHunterxHunterMangaOnline.kt b/multisrc/overrides/mangacatalog/readhunterxhuntermangaonline/src/ReadHunterxHunterMangaOnline.kt
new file mode 100644
index 000000000..e824d5588
--- /dev/null
+++ b/multisrc/overrides/mangacatalog/readhunterxhuntermangaonline/src/ReadHunterxHunterMangaOnline.kt
@@ -0,0 +1,12 @@
+package eu.kanade.tachiyomi.extension.en.readhunterxhuntermangaonline
+
+import eu.kanade.tachiyomi.multisrc.mangacatalog.MangaCatalog
+
+class ReadHunterxHunterMangaOnline : MangaCatalog("Read Hunter x Hunter Manga Online", "https://ww2.readhxh.com", "en") {
+ override val sourceList = listOf(
+ Pair("Hunter x Hunter", "$baseUrl/manga/hunter-x-hunter/"),
+ Pair("Colored", "$baseUrl/manga/hunter-x-hunter-colored/"),
+ Pair("Level E", "$baseUrl/manga/level-e/"),
+ Pair("Yu Yu Hakusho", "$baseUrl/manga/yu-yu-hakusho/"),
+ ).sortedBy { it.first }.distinctBy { it.second }
+}
diff --git a/multisrc/overrides/mangacatalog/readjujutsukaisenmangaonline/res/mipmap-hdpi/ic_launcher.png b/multisrc/overrides/mangacatalog/readjujutsukaisenmangaonline/res/mipmap-hdpi/ic_launcher.png
new file mode 100644
index 000000000..6346f5030
Binary files /dev/null and b/multisrc/overrides/mangacatalog/readjujutsukaisenmangaonline/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/mangacatalog/readjujutsukaisenmangaonline/res/mipmap-mdpi/ic_launcher.png b/multisrc/overrides/mangacatalog/readjujutsukaisenmangaonline/res/mipmap-mdpi/ic_launcher.png
new file mode 100644
index 000000000..d1324b37a
Binary files /dev/null and b/multisrc/overrides/mangacatalog/readjujutsukaisenmangaonline/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/mangacatalog/readjujutsukaisenmangaonline/res/mipmap-xhdpi/ic_launcher.png b/multisrc/overrides/mangacatalog/readjujutsukaisenmangaonline/res/mipmap-xhdpi/ic_launcher.png
new file mode 100644
index 000000000..e74eb187d
Binary files /dev/null and b/multisrc/overrides/mangacatalog/readjujutsukaisenmangaonline/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/mangacatalog/readjujutsukaisenmangaonline/res/mipmap-xxhdpi/ic_launcher.png b/multisrc/overrides/mangacatalog/readjujutsukaisenmangaonline/res/mipmap-xxhdpi/ic_launcher.png
new file mode 100644
index 000000000..8ed647c39
Binary files /dev/null and b/multisrc/overrides/mangacatalog/readjujutsukaisenmangaonline/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/mangacatalog/readjujutsukaisenmangaonline/res/mipmap-xxxhdpi/ic_launcher.png b/multisrc/overrides/mangacatalog/readjujutsukaisenmangaonline/res/mipmap-xxxhdpi/ic_launcher.png
new file mode 100644
index 000000000..10ee327ec
Binary files /dev/null and b/multisrc/overrides/mangacatalog/readjujutsukaisenmangaonline/res/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/mangacatalog/readjujutsukaisenmangaonline/src/ReadJujutsuKaisenMangaOnline.kt b/multisrc/overrides/mangacatalog/readjujutsukaisenmangaonline/src/ReadJujutsuKaisenMangaOnline.kt
new file mode 100644
index 000000000..a876abfa1
--- /dev/null
+++ b/multisrc/overrides/mangacatalog/readjujutsukaisenmangaonline/src/ReadJujutsuKaisenMangaOnline.kt
@@ -0,0 +1,14 @@
+package eu.kanade.tachiyomi.extension.en.readjujutsukaisenmangaonline
+
+import eu.kanade.tachiyomi.multisrc.mangacatalog.MangaCatalog
+
+class ReadJujutsuKaisenMangaOnline : MangaCatalog("Read Jujutsu Kaisen Manga Online", "https://ww1.readjujutsukaisen.com", "en") {
+ override val sourceList = listOf(
+ Pair("Jujutsu Kaisen", "$baseUrl/manga/jujutsu-kaisen/"),
+ Pair("Jujutsu Kaisen 0", "$baseUrl/manga/jujutsu-kaisen-0/"),
+ Pair("JJK Light Novel", "$baseUrl/manga/jujutsu-kaisen-first-light-novel/"),
+ Pair("No.9", "$baseUrl/manga/no-9/"),
+ Pair("JJK Colored", "$baseUrl/manga/jujutsu-kaisen-colored/"),
+ Pair("Fanbook", "$baseUrl/manga/jujutsu-kaisen-official-fanbook/"),
+ ).sortedBy { it.first }.distinctBy { it.second }
+}
diff --git a/multisrc/overrides/mangacatalog/readkaguyasamamangaonline/res/mipmap-hdpi/ic_launcher.png b/multisrc/overrides/mangacatalog/readkaguyasamamangaonline/res/mipmap-hdpi/ic_launcher.png
new file mode 100644
index 000000000..dae4a8c33
Binary files /dev/null and b/multisrc/overrides/mangacatalog/readkaguyasamamangaonline/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/mangacatalog/readkaguyasamamangaonline/res/mipmap-mdpi/ic_launcher.png b/multisrc/overrides/mangacatalog/readkaguyasamamangaonline/res/mipmap-mdpi/ic_launcher.png
new file mode 100644
index 000000000..b9401733f
Binary files /dev/null and b/multisrc/overrides/mangacatalog/readkaguyasamamangaonline/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/mangacatalog/readkaguyasamamangaonline/res/mipmap-xhdpi/ic_launcher.png b/multisrc/overrides/mangacatalog/readkaguyasamamangaonline/res/mipmap-xhdpi/ic_launcher.png
new file mode 100644
index 000000000..e820fd08f
Binary files /dev/null and b/multisrc/overrides/mangacatalog/readkaguyasamamangaonline/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/mangacatalog/readkaguyasamamangaonline/res/mipmap-xxhdpi/ic_launcher.png b/multisrc/overrides/mangacatalog/readkaguyasamamangaonline/res/mipmap-xxhdpi/ic_launcher.png
new file mode 100644
index 000000000..46d979e73
Binary files /dev/null and b/multisrc/overrides/mangacatalog/readkaguyasamamangaonline/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/mangacatalog/readkaguyasamamangaonline/res/mipmap-xxxhdpi/ic_launcher.png b/multisrc/overrides/mangacatalog/readkaguyasamamangaonline/res/mipmap-xxxhdpi/ic_launcher.png
new file mode 100644
index 000000000..b445ad81d
Binary files /dev/null and b/multisrc/overrides/mangacatalog/readkaguyasamamangaonline/res/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/mangacatalog/readkaguyasamamangaonline/src/ReadKaguyaSamaMangaOnline.kt b/multisrc/overrides/mangacatalog/readkaguyasamamangaonline/src/ReadKaguyaSamaMangaOnline.kt
new file mode 100644
index 000000000..662b15178
--- /dev/null
+++ b/multisrc/overrides/mangacatalog/readkaguyasamamangaonline/src/ReadKaguyaSamaMangaOnline.kt
@@ -0,0 +1,16 @@
+package eu.kanade.tachiyomi.extension.en.readkaguyasamamangaonline
+
+import eu.kanade.tachiyomi.multisrc.mangacatalog.MangaCatalog
+
+class ReadKaguyaSamaMangaOnline : MangaCatalog("Read Kaguya-sama Manga Online", "https://ww1.readkaguyasama.com", "en") {
+ override val sourceList = listOf(
+ Pair("Kaguya-sama: Love is War", "$baseUrl/manga/kaguya-sama-love-is-war/"),
+ Pair("Official Doujin", "$baseUrl/manga/kaguya-wants-to-be-confessed-to-official-doujin/"),
+ Pair("Spin off", "$baseUrl/manga/we-want-to-talk-about-kaguya/"),
+ Pair("Light Novel", "$baseUrl/manga/kaguya-sama-light-novel/"),
+ Pair("Instant Bullet", "$baseUrl/manga/ib-instant-bullet/"),
+ Pair("Oshi no Ko", "$baseUrl/manga/oshi-no-ko/"),
+ Pair("Sayonara Piano Sonata", "$baseUrl/manga/sayonara-piano-sonata/"),
+ Pair("Original Hinatazaka", "$baseUrl/manga/original-hinatazaka/"),
+ ).sortedBy { it.first }.distinctBy { it.second }
+}
diff --git a/multisrc/overrides/mangacatalog/readkingdommangaonline/src/ReadKingdomMangaOnline.kt b/multisrc/overrides/mangacatalog/readkingdommangaonline/src/ReadKingdomMangaOnline.kt
new file mode 100644
index 000000000..90a9311ee
--- /dev/null
+++ b/multisrc/overrides/mangacatalog/readkingdommangaonline/src/ReadKingdomMangaOnline.kt
@@ -0,0 +1,11 @@
+package eu.kanade.tachiyomi.extension.en.readkingdommangaonline
+
+import eu.kanade.tachiyomi.multisrc.mangacatalog.MangaCatalog
+
+class ReadKingdomMangaOnline : MangaCatalog("Read Kingdom Manga Online", "https://ww2.readkingdom.com", "en") {
+ override val sourceList = listOf(
+ Pair("Kingdom", "$baseUrl/manga/kingdom/"),
+ Pair("Li Mu", "$baseUrl/manga/li-mu/"),
+ Pair("Meng Wu & Chu Zi", "$baseUrl/manga/meng-wu-and-chu-zi-one-shot/"),
+ ).sortedBy { it.first }.distinctBy { it.second }
+}
diff --git a/multisrc/overrides/mangacatalog/readnanatsunotaizai7deadlysinsmangaonline/res/mipmap-hdpi/ic_launcher.png b/multisrc/overrides/mangacatalog/readnanatsunotaizai7deadlysinsmangaonline/res/mipmap-hdpi/ic_launcher.png
new file mode 100644
index 000000000..39cdb2e3b
Binary files /dev/null and b/multisrc/overrides/mangacatalog/readnanatsunotaizai7deadlysinsmangaonline/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/mangacatalog/readnanatsunotaizai7deadlysinsmangaonline/res/mipmap-mdpi/ic_launcher.png b/multisrc/overrides/mangacatalog/readnanatsunotaizai7deadlysinsmangaonline/res/mipmap-mdpi/ic_launcher.png
new file mode 100644
index 000000000..276f65e41
Binary files /dev/null and b/multisrc/overrides/mangacatalog/readnanatsunotaizai7deadlysinsmangaonline/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/mangacatalog/readnanatsunotaizai7deadlysinsmangaonline/res/mipmap-xhdpi/ic_launcher.png b/multisrc/overrides/mangacatalog/readnanatsunotaizai7deadlysinsmangaonline/res/mipmap-xhdpi/ic_launcher.png
new file mode 100644
index 000000000..090c1073a
Binary files /dev/null and b/multisrc/overrides/mangacatalog/readnanatsunotaizai7deadlysinsmangaonline/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/mangacatalog/readnanatsunotaizai7deadlysinsmangaonline/res/mipmap-xxhdpi/ic_launcher.png b/multisrc/overrides/mangacatalog/readnanatsunotaizai7deadlysinsmangaonline/res/mipmap-xxhdpi/ic_launcher.png
new file mode 100644
index 000000000..e22cfe4d2
Binary files /dev/null and b/multisrc/overrides/mangacatalog/readnanatsunotaizai7deadlysinsmangaonline/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/mangacatalog/readnanatsunotaizai7deadlysinsmangaonline/res/mipmap-xxxhdpi/ic_launcher.png b/multisrc/overrides/mangacatalog/readnanatsunotaizai7deadlysinsmangaonline/res/mipmap-xxxhdpi/ic_launcher.png
new file mode 100644
index 000000000..64b170020
Binary files /dev/null and b/multisrc/overrides/mangacatalog/readnanatsunotaizai7deadlysinsmangaonline/res/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/mangacatalog/readnanatsunotaizai7deadlysinsmangaonline/src/ReadNanatsuNoTaizai7DeadlySinsMangaOnline.kt b/multisrc/overrides/mangacatalog/readnanatsunotaizai7deadlysinsmangaonline/src/ReadNanatsuNoTaizai7DeadlySinsMangaOnline.kt
new file mode 100644
index 000000000..c87bb16dc
--- /dev/null
+++ b/multisrc/overrides/mangacatalog/readnanatsunotaizai7deadlysinsmangaonline/src/ReadNanatsuNoTaizai7DeadlySinsMangaOnline.kt
@@ -0,0 +1,18 @@
+package eu.kanade.tachiyomi.extension.en.readnanatsunotaizai7deadlysinsmangaonline
+
+import eu.kanade.tachiyomi.multisrc.mangacatalog.MangaCatalog
+
+class ReadNanatsuNoTaizai7DeadlySinsMangaOnline : MangaCatalog("Read Nanatsu no Taizai 7 Deadly Sins Manga Online", "https://ww3.read7deadlysins.com", "en") {
+ override val sourceList = listOf(
+ Pair("Mokushiroku no Yonkishi", "$baseUrl/manga/four-horsemen-of-the-apocalypse/"),
+ Pair("7DS: School", "$baseUrl/manga/mayoe-nanatsu-no-taizai-gakuen/"),
+ Pair("7DS:7 Days", "$baseUrl/manga/nanatsu-no-taizai-seven-days/"),
+ Pair("7DS:Vampires", "$baseUrl/manga/nanatsu-no-taizai-vampires-of-edinburgh/"),
+ Pair("Queen of Altar", "$baseUrl/manga/the-queen-of-the-altar/"),
+ Pair("7DS: 7 Colors", "$baseUrl/manga/nanatsu-no-taizai-nanairo-no-tsuioku/"),
+ Pair("7DS x FT", "$baseUrl/manga/fairy-tail-x-nanatsu-no-taizai-christmas-special/"),
+ Pair("7 Deadly Sins", "$baseUrl/manga/nanatsu-no-taizai/"),
+ Pair("7DS:7 Scars", "$baseUrl/manga/nanatsu-no-taizai-the-seven-scars-which-they-left-behind/"),
+ Pair("Kongou Banchou", "$baseUrl/manga/kongou-banchou/"),
+ ).sortedBy { it.first }.distinctBy { it.second }
+}
diff --git a/multisrc/overrides/mangacatalog/readnarutoborutosamurai8mangaonline/src/ReadNarutoBorutoSamurai8MangaOnline.kt b/multisrc/overrides/mangacatalog/readnarutoborutosamurai8mangaonline/src/ReadNarutoBorutoSamurai8MangaOnline.kt
new file mode 100644
index 000000000..80ba912aa
--- /dev/null
+++ b/multisrc/overrides/mangacatalog/readnarutoborutosamurai8mangaonline/src/ReadNarutoBorutoSamurai8MangaOnline.kt
@@ -0,0 +1,13 @@
+package eu.kanade.tachiyomi.extension.en.readnarutoborutosamurai8mangaonline
+
+import eu.kanade.tachiyomi.multisrc.mangacatalog.MangaCatalog
+
+class ReadNarutoBorutoSamurai8MangaOnline : MangaCatalog("Read Naruto Boruto Samurai 8 Manga Online", "https://ww7.readnaruto.com", "en") {
+ override val sourceList = listOf(
+ Pair("Boruto", "$baseUrl/manga/boruto-naruto-next-generations/"),
+ Pair("Naruto", "$baseUrl/manga/naruto/"),
+ Pair("Colored", "$baseUrl/manga/naruto-digital-colored-comics/"),
+ Pair("Naruto Gaiden", "$baseUrl/manga/naruto-gaiden-the-seventh-hokage/"),
+ Pair("Samurai 8", "$baseUrl/manga/samurai-8-hachimaru-den/"),
+ ).sortedBy { it.first }.distinctBy { it.second }
+}
diff --git a/multisrc/overrides/mangacatalog/readnoblessemanhwaonline/src/ReadNoblesseManhwaOnline.kt b/multisrc/overrides/mangacatalog/readnoblessemanhwaonline/src/ReadNoblesseManhwaOnline.kt
new file mode 100644
index 000000000..5d08d013e
--- /dev/null
+++ b/multisrc/overrides/mangacatalog/readnoblessemanhwaonline/src/ReadNoblesseManhwaOnline.kt
@@ -0,0 +1,35 @@
+package eu.kanade.tachiyomi.extension.en.readnoblessemanhwaonline
+
+import eu.kanade.tachiyomi.multisrc.mangacatalog.MangaCatalog
+import eu.kanade.tachiyomi.source.model.SChapter
+import eu.kanade.tachiyomi.source.model.SManga
+import org.jsoup.nodes.Document
+import org.jsoup.nodes.Element
+
+class ReadNoblesseManhwaOnline : MangaCatalog("Read Noblesse Manhwa Online", "https://ww2.readnoblesse.com", "en") {
+ override val sourceList = listOf(
+ Pair("Noblesse", "$baseUrl/manga/noblesse/"),
+ Pair("Rai’s Adventure", "$baseUrl/manga/noblesse-rais-adventure/"),
+ Pair("NOBLESSE S", "$baseUrl/manga/noblesse-s/"),
+ Pair("Ability", "$baseUrl/manga/ability/"),
+ ).sortedBy { it.first }.distinctBy { it.second }
+
+ override fun mangaDetailsParse(document: Document): SManga = SManga.create().apply {
+ description = document.select("div.flex > div.py-2 > div:not(:first-child)").text()
+ title = document.select(".container h1").text()
+ thumbnail_url = document.select("img.rounded-full").attr("src")
+ }
+
+ override fun chapterListSelector(): String = "div.w-full > div > div.flex"
+ override fun chapterFromElement(element: Element): SChapter = SChapter.create().apply {
+ val name1 = element.select(".flex-col > a:not(.text-xs)").text()
+ val name2 = element.select(".text-xs:not(a)").text()
+ if (name2 == "") {
+ name = name1
+ } else {
+ name = "$name1 - $name2"
+ }
+ url = element.select(".flex-col > a:not(.text-xs)").attr("abs:href")
+ date_upload = System.currentTimeMillis()
+ }
+}
diff --git a/multisrc/overrides/mangacatalog/readonepiecemangaonline/src/ReadOnePieceMangaOnline.kt b/multisrc/overrides/mangacatalog/readonepiecemangaonline/src/ReadOnePieceMangaOnline.kt
new file mode 100644
index 000000000..7ff22896f
--- /dev/null
+++ b/multisrc/overrides/mangacatalog/readonepiecemangaonline/src/ReadOnePieceMangaOnline.kt
@@ -0,0 +1,20 @@
+package eu.kanade.tachiyomi.extension.en.readonepiecemangaonline
+
+import eu.kanade.tachiyomi.multisrc.mangacatalog.MangaCatalog
+
+class ReadOnePieceMangaOnline : MangaCatalog("Read One Piece Manga Online", "https://ww8.readonepiece.com", "en") {
+ override val sourceList = listOf(
+ Pair("One Piece", "$baseUrl/manga/one-piece/"),
+ Pair("Colored", "$baseUrl/manga/one-piece-digital-colored-comics/"),
+ Pair("Soma x Sanji", "$baseUrl/manga/shokugeki-no-sanji-one-shot/"),
+ Pair("OP x Toriko", "$baseUrl/manga/one-piece-x-toriko/"),
+ Pair("Party", "$baseUrl/manga/one-piece-party/"),
+ Pair("DB x OP", "$baseUrl/manga/dragon-ball-x-one-piece/"),
+ Pair("Wanted!", "$baseUrl/manga/wanted-one-piece/"),
+ Pair("Ace's Story", "$baseUrl/manga/one-piece-ace-s-story/"),
+ Pair("Omake", "$baseUrl/manga/one-piece-omake/"),
+ Pair("Vivre Card", "$baseUrl/manga/vivre-card-databook/"),
+ Pair("Databook", "$baseUrl/manga/one-piece-databook/"),
+ Pair("Ace's Story Manga", "$baseUrl/manga/one-piece-ace-story-manga/"),
+ ).sortedBy { it.first }.distinctBy { it.second }
+}
diff --git a/multisrc/overrides/mangacatalog/readonepunchmanmangaonlinetwo/res/mipmap-hdpi/ic_launcher.png b/multisrc/overrides/mangacatalog/readonepunchmanmangaonlinetwo/res/mipmap-hdpi/ic_launcher.png
new file mode 100644
index 000000000..1f2de1b41
Binary files /dev/null and b/multisrc/overrides/mangacatalog/readonepunchmanmangaonlinetwo/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/mangacatalog/readonepunchmanmangaonlinetwo/res/mipmap-mdpi/ic_launcher.png b/multisrc/overrides/mangacatalog/readonepunchmanmangaonlinetwo/res/mipmap-mdpi/ic_launcher.png
new file mode 100644
index 000000000..cedf0d138
Binary files /dev/null and b/multisrc/overrides/mangacatalog/readonepunchmanmangaonlinetwo/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/mangacatalog/readonepunchmanmangaonlinetwo/res/mipmap-xhdpi/ic_launcher.png b/multisrc/overrides/mangacatalog/readonepunchmanmangaonlinetwo/res/mipmap-xhdpi/ic_launcher.png
new file mode 100644
index 000000000..eee48c876
Binary files /dev/null and b/multisrc/overrides/mangacatalog/readonepunchmanmangaonlinetwo/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/mangacatalog/readonepunchmanmangaonlinetwo/res/mipmap-xxhdpi/ic_launcher.png b/multisrc/overrides/mangacatalog/readonepunchmanmangaonlinetwo/res/mipmap-xxhdpi/ic_launcher.png
new file mode 100644
index 000000000..767a41333
Binary files /dev/null and b/multisrc/overrides/mangacatalog/readonepunchmanmangaonlinetwo/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/mangacatalog/readonepunchmanmangaonlinetwo/res/mipmap-xxxhdpi/ic_launcher.png b/multisrc/overrides/mangacatalog/readonepunchmanmangaonlinetwo/res/mipmap-xxxhdpi/ic_launcher.png
new file mode 100644
index 000000000..7360d4f4f
Binary files /dev/null and b/multisrc/overrides/mangacatalog/readonepunchmanmangaonlinetwo/res/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/mangacatalog/readonepunchmanmangaonlinetwo/src/ReadOnePunchManMangaOnlineTwo.kt b/multisrc/overrides/mangacatalog/readonepunchmanmangaonlinetwo/src/ReadOnePunchManMangaOnlineTwo.kt
new file mode 100644
index 000000000..365e0a1fb
--- /dev/null
+++ b/multisrc/overrides/mangacatalog/readonepunchmanmangaonlinetwo/src/ReadOnePunchManMangaOnlineTwo.kt
@@ -0,0 +1,30 @@
+package eu.kanade.tachiyomi.extension.en.readonepunchmanmangaonlinetwo
+
+import eu.kanade.tachiyomi.multisrc.mangacatalog.MangaCatalog
+import eu.kanade.tachiyomi.source.model.SChapter
+import eu.kanade.tachiyomi.source.model.SManga
+import org.jsoup.nodes.Document
+import org.jsoup.nodes.Element
+
+class ReadOnePunchManMangaOnlineTwo : MangaCatalog("Read One-Punch Man Manga Online", "https://ww3.readopm.com", "en") {
+ override val sourceList = listOf(
+ Pair("One Punch Man", "$baseUrl/manga/one-punch-man/"),
+ Pair("Onepunch-Man (ONE)", "$baseUrl/manga/onepunch-man-one/"),
+ Pair("Colored", "$baseUrl/manga/one-punch-man-colored/"),
+ Pair("Mob Psycho 100", "$baseUrl/manga/mob-psycho-100/"),
+ Pair("Reigen", "$baseUrl/manga/reigen/"),
+ Pair("Eyeshield 21", "$baseUrl/manga/eyeshield-21/"),
+ ).sortedBy { it.first }.distinctBy { it.second }
+
+ override fun mangaDetailsParse(document: Document): SManga = SManga.create().apply {
+ description = document.select("div.card-body > p").text()
+ title = document.select("h2 > span").text().substringAfter("Manga: ").trim()
+ thumbnail_url = document.select(".card-img-right").attr("src")
+ }
+ override fun chapterListSelector(): String = "tbody > tr"
+ override fun chapterFromElement(element: Element): SChapter = SChapter.create().apply {
+ name = element.select("td:first-child").text()
+ url = element.select("a").attr("abs:href")
+ date_upload = System.currentTimeMillis() // I have no idear how to parse Date stuff
+ }
+}
diff --git a/multisrc/overrides/mangacatalog/readsololevelingmangamanhwaonline/res/mipmap-hdpi/ic_launcher.png b/multisrc/overrides/mangacatalog/readsololevelingmangamanhwaonline/res/mipmap-hdpi/ic_launcher.png
new file mode 100644
index 000000000..e83d2dcbb
Binary files /dev/null and b/multisrc/overrides/mangacatalog/readsololevelingmangamanhwaonline/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/mangacatalog/readsololevelingmangamanhwaonline/res/mipmap-mdpi/ic_launcher.png b/multisrc/overrides/mangacatalog/readsololevelingmangamanhwaonline/res/mipmap-mdpi/ic_launcher.png
new file mode 100644
index 000000000..0d6da5cd9
Binary files /dev/null and b/multisrc/overrides/mangacatalog/readsololevelingmangamanhwaonline/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/mangacatalog/readsololevelingmangamanhwaonline/res/mipmap-xhdpi/ic_launcher.png b/multisrc/overrides/mangacatalog/readsololevelingmangamanhwaonline/res/mipmap-xhdpi/ic_launcher.png
new file mode 100644
index 000000000..12dbdd7f6
Binary files /dev/null and b/multisrc/overrides/mangacatalog/readsololevelingmangamanhwaonline/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/mangacatalog/readsololevelingmangamanhwaonline/res/mipmap-xxhdpi/ic_launcher.png b/multisrc/overrides/mangacatalog/readsololevelingmangamanhwaonline/res/mipmap-xxhdpi/ic_launcher.png
new file mode 100644
index 000000000..5dbcfe3f2
Binary files /dev/null and b/multisrc/overrides/mangacatalog/readsololevelingmangamanhwaonline/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/mangacatalog/readsololevelingmangamanhwaonline/res/mipmap-xxxhdpi/ic_launcher.png b/multisrc/overrides/mangacatalog/readsololevelingmangamanhwaonline/res/mipmap-xxxhdpi/ic_launcher.png
new file mode 100644
index 000000000..3dfb6b672
Binary files /dev/null and b/multisrc/overrides/mangacatalog/readsololevelingmangamanhwaonline/res/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/mangacatalog/readsololevelingmangamanhwaonline/src/ReadSoloLevelingMangaManhwaOnline.kt b/multisrc/overrides/mangacatalog/readsololevelingmangamanhwaonline/src/ReadSoloLevelingMangaManhwaOnline.kt
new file mode 100644
index 000000000..286a5096e
--- /dev/null
+++ b/multisrc/overrides/mangacatalog/readsololevelingmangamanhwaonline/src/ReadSoloLevelingMangaManhwaOnline.kt
@@ -0,0 +1,10 @@
+package eu.kanade.tachiyomi.extension.en.readsololevelingmangamanhwaonline
+
+import eu.kanade.tachiyomi.multisrc.mangacatalog.MangaCatalog
+
+class ReadSoloLevelingMangaManhwaOnline : MangaCatalog("Read Solo Leveling Manga Manhwa Online", "https://readsololeveling.org", "en") {
+ override val sourceList = listOf(
+ Pair("Solo Leveling", "$baseUrl/manga/solo-leveling/"),
+ Pair("Light Novel", "$baseUrl/manga/solo-leveling-novel/"),
+ ).sortedBy { it.first }.distinctBy { it.second }
+}
diff --git a/multisrc/overrides/mangacatalog/readswordartonlinemangaonline/src/ReadSwordArtOnlineMangaOnline.kt b/multisrc/overrides/mangacatalog/readswordartonlinemangaonline/src/ReadSwordArtOnlineMangaOnline.kt
new file mode 100644
index 000000000..373e2015c
--- /dev/null
+++ b/multisrc/overrides/mangacatalog/readswordartonlinemangaonline/src/ReadSwordArtOnlineMangaOnline.kt
@@ -0,0 +1,37 @@
+package eu.kanade.tachiyomi.extension.en.readswordartonlinemangaonline
+
+import eu.kanade.tachiyomi.multisrc.mangacatalog.MangaCatalog
+import eu.kanade.tachiyomi.source.model.SChapter
+import eu.kanade.tachiyomi.source.model.SManga
+import org.jsoup.nodes.Document
+import org.jsoup.nodes.Element
+
+class ReadSwordArtOnlineMangaOnline : MangaCatalog("Read Sword Art Online Manga Online", "https://manga.watchsao.tv", "en") {
+ override val sourceList = listOf(
+ Pair("SAO", "$baseUrl/manga/sword-art-online/"),
+ Pair("Alicization", "$baseUrl/manga/sword-art-online-project-alicization/"),
+ Pair("Progressive", "$baseUrl/manga/sword-art-online-progressive/"),
+ Pair("Progressive 2", "$baseUrl/manga/sword-art-online-progressive-barcarolle-of-froth/"),
+ Pair("Fairy Dance", "$baseUrl/manga/sword-art-online-fairy-dance/"),
+ Pair("GGO", "$baseUrl/manga/sword-art-online-alternative-gun-gale-online/"),
+ Pair("4-koma", "$baseUrl/manga/sword-art-online-4-koma/"),
+ Pair("Aincrad", "$baseUrl/manga/sword-art-online-aincrad-night-of-kirito/"),
+ Pair("Girls Ops", "$baseUrl/manga/sword-art-online-girls-ops/"),
+ Pair("Anthology", "$baseUrl/manga/sword-art-online-comic-anthology/"),
+ Pair("Lycoris", "$baseUrl/manga/sword-art-online-lycoris/"),
+ Pair("Hollow Realization", "$baseUrl/manga/sword-art-online-hollow-realization/"),
+ Pair("Ordinal Scale", "$baseUrl/manga/sword-art-online-ordinal-scale/"),
+ ).sortedBy { it.first }.distinctBy { it.second }
+
+ override fun mangaDetailsParse(document: Document): SManga = SManga.create().apply {
+ description = document.select("div.card-body > p").text()
+ title = document.select("h2 > span").text()
+ thumbnail_url = document.select(".card-img-right").attr("src")
+ }
+ override fun chapterListSelector(): String = "tbody > tr"
+ override fun chapterFromElement(element: Element): SChapter = SChapter.create().apply {
+ name = element.select("td:first-child").text()
+ url = element.select("a.btn-primary").attr("abs:href")
+ date_upload = System.currentTimeMillis() // I have no idear how to parse Date stuff
+ }
+}
diff --git a/multisrc/overrides/mangacatalog/readthepromisedneverlandmangaonline/res/mipmap-hdpi/ic_launcher.png b/multisrc/overrides/mangacatalog/readthepromisedneverlandmangaonline/res/mipmap-hdpi/ic_launcher.png
new file mode 100644
index 000000000..567308312
Binary files /dev/null and b/multisrc/overrides/mangacatalog/readthepromisedneverlandmangaonline/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/mangacatalog/readthepromisedneverlandmangaonline/res/mipmap-mdpi/ic_launcher.png b/multisrc/overrides/mangacatalog/readthepromisedneverlandmangaonline/res/mipmap-mdpi/ic_launcher.png
new file mode 100644
index 000000000..a186f30c5
Binary files /dev/null and b/multisrc/overrides/mangacatalog/readthepromisedneverlandmangaonline/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/mangacatalog/readthepromisedneverlandmangaonline/res/mipmap-xhdpi/ic_launcher.png b/multisrc/overrides/mangacatalog/readthepromisedneverlandmangaonline/res/mipmap-xhdpi/ic_launcher.png
new file mode 100644
index 000000000..2a2c0b509
Binary files /dev/null and b/multisrc/overrides/mangacatalog/readthepromisedneverlandmangaonline/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/mangacatalog/readthepromisedneverlandmangaonline/res/mipmap-xxhdpi/ic_launcher.png b/multisrc/overrides/mangacatalog/readthepromisedneverlandmangaonline/res/mipmap-xxhdpi/ic_launcher.png
new file mode 100644
index 000000000..dcc92771e
Binary files /dev/null and b/multisrc/overrides/mangacatalog/readthepromisedneverlandmangaonline/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/mangacatalog/readthepromisedneverlandmangaonline/res/mipmap-xxxhdpi/ic_launcher.png b/multisrc/overrides/mangacatalog/readthepromisedneverlandmangaonline/res/mipmap-xxxhdpi/ic_launcher.png
new file mode 100644
index 000000000..f0d8fd2ff
Binary files /dev/null and b/multisrc/overrides/mangacatalog/readthepromisedneverlandmangaonline/res/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/mangacatalog/readthepromisedneverlandmangaonline/src/ReadThePromisedNeverlandMangaOnline.kt b/multisrc/overrides/mangacatalog/readthepromisedneverlandmangaonline/src/ReadThePromisedNeverlandMangaOnline.kt
new file mode 100644
index 000000000..be221701a
--- /dev/null
+++ b/multisrc/overrides/mangacatalog/readthepromisedneverlandmangaonline/src/ReadThePromisedNeverlandMangaOnline.kt
@@ -0,0 +1,14 @@
+package eu.kanade.tachiyomi.extension.en.readthepromisedneverlandmangaonline
+
+import eu.kanade.tachiyomi.multisrc.mangacatalog.MangaCatalog
+
+class ReadThePromisedNeverlandMangaOnline : MangaCatalog("Read The Promised Neverland Manga Online", "https://ww3.readneverland.com", "en") {
+ override val sourceList = listOf(
+ Pair("The Promised Neverland", "$baseUrl/manga/the-promised-neverland/"),
+ Pair("Parody", "$baseUrl/manga/the-parodied-jokeland/"),
+ Pair("Novels", "$baseUrl/manga/novels/"),
+ Pair("Poppy no Negai", "$baseUrl/manga/poppy-no-negai/"),
+ Pair("Author's One shot", "$baseUrl/manga/shinrei-shashinshi-kouno-saburou/"),
+ Pair("Ashley Goeth", "$baseUrl/manga/ashley-goeth-no-yukue/"),
+ ).sortedBy { it.first }.distinctBy { it.second }
+}
diff --git a/multisrc/overrides/mangacatalog/readtokyoghoulretokyoghoulmangaonline/res/mipmap-hdpi/ic_launcher.png b/multisrc/overrides/mangacatalog/readtokyoghoulretokyoghoulmangaonline/res/mipmap-hdpi/ic_launcher.png
new file mode 100644
index 000000000..907290d92
Binary files /dev/null and b/multisrc/overrides/mangacatalog/readtokyoghoulretokyoghoulmangaonline/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/mangacatalog/readtokyoghoulretokyoghoulmangaonline/res/mipmap-mdpi/ic_launcher.png b/multisrc/overrides/mangacatalog/readtokyoghoulretokyoghoulmangaonline/res/mipmap-mdpi/ic_launcher.png
new file mode 100644
index 000000000..d8fdeaaa0
Binary files /dev/null and b/multisrc/overrides/mangacatalog/readtokyoghoulretokyoghoulmangaonline/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/mangacatalog/readtokyoghoulretokyoghoulmangaonline/res/mipmap-xhdpi/ic_launcher.png b/multisrc/overrides/mangacatalog/readtokyoghoulretokyoghoulmangaonline/res/mipmap-xhdpi/ic_launcher.png
new file mode 100644
index 000000000..e625e75db
Binary files /dev/null and b/multisrc/overrides/mangacatalog/readtokyoghoulretokyoghoulmangaonline/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/mangacatalog/readtokyoghoulretokyoghoulmangaonline/res/mipmap-xxhdpi/ic_launcher.png b/multisrc/overrides/mangacatalog/readtokyoghoulretokyoghoulmangaonline/res/mipmap-xxhdpi/ic_launcher.png
new file mode 100644
index 000000000..30b5ae7da
Binary files /dev/null and b/multisrc/overrides/mangacatalog/readtokyoghoulretokyoghoulmangaonline/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/mangacatalog/readtokyoghoulretokyoghoulmangaonline/res/mipmap-xxxhdpi/ic_launcher.png b/multisrc/overrides/mangacatalog/readtokyoghoulretokyoghoulmangaonline/res/mipmap-xxxhdpi/ic_launcher.png
new file mode 100644
index 000000000..d6d645c97
Binary files /dev/null and b/multisrc/overrides/mangacatalog/readtokyoghoulretokyoghoulmangaonline/res/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/mangacatalog/readtokyoghoulretokyoghoulmangaonline/src/ReadTokyoGhoulReTokyoGhoulMangaOnline.kt b/multisrc/overrides/mangacatalog/readtokyoghoulretokyoghoulmangaonline/src/ReadTokyoGhoulReTokyoGhoulMangaOnline.kt
new file mode 100644
index 000000000..47ab4e0a7
--- /dev/null
+++ b/multisrc/overrides/mangacatalog/readtokyoghoulretokyoghoulmangaonline/src/ReadTokyoGhoulReTokyoGhoulMangaOnline.kt
@@ -0,0 +1,15 @@
+package eu.kanade.tachiyomi.extension.en.readtokyoghoulretokyoghoulmangaonline
+
+import eu.kanade.tachiyomi.multisrc.mangacatalog.MangaCatalog
+
+class ReadTokyoGhoulReTokyoGhoulMangaOnline : MangaCatalog("Read Tokyo Ghoul Re & Tokyo Ghoul Manga Online", "https://ww8.tokyoghoulre.com", "en") {
+ override val sourceList = listOf(
+ Pair("Tokyo Ghoul", "$baseUrl/manga/tokyo-ghoul/"),
+ Pair("Tokyo Ghoul:re", "$baseUrl/manga/tokyo-ghoulre/"),
+ Pair("TG Jack", "$baseUrl/manga/tokyo-ghoul-jack/"),
+ Pair("TGre Colored", "$baseUrl/manga/tokyo-ghoulre-colored/"),
+ Pair("Gorilla", "$baseUrl/manga/this-gorilla-will-die-in-1-day/"),
+ Pair("ArtBook", "$baseUrl/manga/tokyo-ghoul-zakki/"),
+ Pair("TG Light Novel", "$baseUrl/manga/tokyo-ghoul-re-light-novels/"),
+ ).sortedBy { it.first }.distinctBy { it.second }
+}
diff --git a/multisrc/overrides/mangacatalog/readtowerofgodmanhwamangaonline/res/mipmap-hdpi/ic_launcher.png b/multisrc/overrides/mangacatalog/readtowerofgodmanhwamangaonline/res/mipmap-hdpi/ic_launcher.png
new file mode 100644
index 000000000..a10f307e6
Binary files /dev/null and b/multisrc/overrides/mangacatalog/readtowerofgodmanhwamangaonline/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/mangacatalog/readtowerofgodmanhwamangaonline/res/mipmap-mdpi/ic_launcher.png b/multisrc/overrides/mangacatalog/readtowerofgodmanhwamangaonline/res/mipmap-mdpi/ic_launcher.png
new file mode 100644
index 000000000..034ccb93d
Binary files /dev/null and b/multisrc/overrides/mangacatalog/readtowerofgodmanhwamangaonline/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/mangacatalog/readtowerofgodmanhwamangaonline/res/mipmap-xhdpi/ic_launcher.png b/multisrc/overrides/mangacatalog/readtowerofgodmanhwamangaonline/res/mipmap-xhdpi/ic_launcher.png
new file mode 100644
index 000000000..bc1b6fd10
Binary files /dev/null and b/multisrc/overrides/mangacatalog/readtowerofgodmanhwamangaonline/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/mangacatalog/readtowerofgodmanhwamangaonline/res/mipmap-xxhdpi/ic_launcher.png b/multisrc/overrides/mangacatalog/readtowerofgodmanhwamangaonline/res/mipmap-xxhdpi/ic_launcher.png
new file mode 100644
index 000000000..6f768c01e
Binary files /dev/null and b/multisrc/overrides/mangacatalog/readtowerofgodmanhwamangaonline/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/mangacatalog/readtowerofgodmanhwamangaonline/res/mipmap-xxxhdpi/ic_launcher.png b/multisrc/overrides/mangacatalog/readtowerofgodmanhwamangaonline/res/mipmap-xxxhdpi/ic_launcher.png
new file mode 100644
index 000000000..79ebb4e8a
Binary files /dev/null and b/multisrc/overrides/mangacatalog/readtowerofgodmanhwamangaonline/res/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/mangacatalog/readtowerofgodmanhwamangaonline/src/ReadTowerOfGodManhwaMangaOnline.kt b/multisrc/overrides/mangacatalog/readtowerofgodmanhwamangaonline/src/ReadTowerOfGodManhwaMangaOnline.kt
new file mode 100644
index 000000000..939b9a1c1
--- /dev/null
+++ b/multisrc/overrides/mangacatalog/readtowerofgodmanhwamangaonline/src/ReadTowerOfGodManhwaMangaOnline.kt
@@ -0,0 +1,13 @@
+package eu.kanade.tachiyomi.extension.en.readtowerofgodmanhwamangaonline
+
+import eu.kanade.tachiyomi.multisrc.mangacatalog.MangaCatalog
+
+class ReadTowerOfGodManhwaMangaOnline : MangaCatalog("Read Tower of God Manhwa Manga Online", "https://ww1.readtowerofgod.com", "en") {
+ override val sourceList = listOf(
+ Pair("Season 1", "$baseUrl/manga/tower-of-god-season-1/"),
+ Pair("Season 2", "$baseUrl/manga/tower-of-god-season-2/"),
+ Pair("Season 3", "$baseUrl/manga/tower-of-god-season-3/"),
+ Pair("RAW", "$baseUrl/manga/tower-of-god-spoilers-raw/"),
+ Pair("SIU Blog Postd", "$baseUrl/manga/siu-blog-post-translation/"),
+ ).sortedBy { it.first }.distinctBy { it.second }
+}
diff --git a/multisrc/overrides/mangacatalog/readvinlandsagamangaonline/src/ReadVinlandSagaMangaOnline.kt b/multisrc/overrides/mangacatalog/readvinlandsagamangaonline/src/ReadVinlandSagaMangaOnline.kt
new file mode 100644
index 000000000..10a0c66e4
--- /dev/null
+++ b/multisrc/overrides/mangacatalog/readvinlandsagamangaonline/src/ReadVinlandSagaMangaOnline.kt
@@ -0,0 +1,11 @@
+package eu.kanade.tachiyomi.extension.en.readvinlandsagamangaonline
+
+import eu.kanade.tachiyomi.multisrc.mangacatalog.MangaCatalog
+
+class ReadVinlandSagaMangaOnline : MangaCatalog("Read Vinland Saga Manga Online", "https://ww1.readvinlandsaga.com", "en") {
+ override val sourceList = listOf(
+ Pair("Vinland Saga", "$baseUrl/manga/vinland-saga/"),
+ Pair("Fan Colored", "$baseUrl/manga/vinland-saga-colored/"),
+ Pair("Planetes", "$baseUrl/manga/planetes/"),
+ ).sortedBy { it.first }.distinctBy { it.second }
+}
diff --git a/multisrc/overrides/mangadventure/arcrelight/res/mipmap-hdpi/ic_launcher.png b/multisrc/overrides/mangadventure/arcrelight/res/mipmap-hdpi/ic_launcher.png
new file mode 100644
index 000000000..06bc0d4c7
Binary files /dev/null and b/multisrc/overrides/mangadventure/arcrelight/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/mangadventure/arcrelight/res/mipmap-mdpi/ic_launcher.png b/multisrc/overrides/mangadventure/arcrelight/res/mipmap-mdpi/ic_launcher.png
new file mode 100644
index 000000000..ec764d715
Binary files /dev/null and b/multisrc/overrides/mangadventure/arcrelight/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/mangadventure/arcrelight/res/mipmap-xhdpi/ic_launcher.png b/multisrc/overrides/mangadventure/arcrelight/res/mipmap-xhdpi/ic_launcher.png
new file mode 100644
index 000000000..1188217d4
Binary files /dev/null and b/multisrc/overrides/mangadventure/arcrelight/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/mangadventure/arcrelight/res/mipmap-xxhdpi/ic_launcher.png b/multisrc/overrides/mangadventure/arcrelight/res/mipmap-xxhdpi/ic_launcher.png
new file mode 100644
index 000000000..ee3a86327
Binary files /dev/null and b/multisrc/overrides/mangadventure/arcrelight/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/mangadventure/arcrelight/res/mipmap-xxxhdpi/ic_launcher.png b/multisrc/overrides/mangadventure/arcrelight/res/mipmap-xxxhdpi/ic_launcher.png
new file mode 100644
index 000000000..6c4608d73
Binary files /dev/null and b/multisrc/overrides/mangadventure/arcrelight/res/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/mangadventure/arcrelight/src/ArcRelight.kt b/multisrc/overrides/mangadventure/arcrelight/src/ArcRelight.kt
new file mode 100644
index 000000000..f87ad2478
--- /dev/null
+++ b/multisrc/overrides/mangadventure/arcrelight/src/ArcRelight.kt
@@ -0,0 +1,25 @@
+package eu.kanade.tachiyomi.extension.en.arcrelight
+
+import eu.kanade.tachiyomi.multisrc.mangadventure.MangAdventure
+
+/** Arc-Relight source. */
+class ArcRelight : MangAdventure("Arc-Relight", "https://arc-relight.com") {
+ override val categories = listOf(
+ "4-Koma",
+ "Chaos;Head",
+ "Collection",
+ "Comedy",
+ "Drama",
+ "Jubilee",
+ "Mystery",
+ "Psychological",
+ "Robotics;Notes",
+ "Romance",
+ "Sci-Fi",
+ "Seinen",
+ "Shounen",
+ "Steins;Gate",
+ "Supernatural",
+ "Tragedy",
+ )
+}
diff --git a/multisrc/overrides/mangadventure/assortedscans/AndroidManifest.xml b/multisrc/overrides/mangadventure/assortedscans/AndroidManifest.xml
new file mode 100644
index 000000000..0a89d8d68
--- /dev/null
+++ b/multisrc/overrides/mangadventure/assortedscans/AndroidManifest.xml
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/multisrc/overrides/mangadventure/assortedscans/res/mipmap-hdpi/ic_launcher.png b/multisrc/overrides/mangadventure/assortedscans/res/mipmap-hdpi/ic_launcher.png
new file mode 100644
index 000000000..27b8f6aa6
Binary files /dev/null and b/multisrc/overrides/mangadventure/assortedscans/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/mangadventure/assortedscans/res/mipmap-mdpi/ic_launcher.png b/multisrc/overrides/mangadventure/assortedscans/res/mipmap-mdpi/ic_launcher.png
new file mode 100644
index 000000000..1b3d795e8
Binary files /dev/null and b/multisrc/overrides/mangadventure/assortedscans/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/mangadventure/assortedscans/res/mipmap-xhdpi/ic_launcher.png b/multisrc/overrides/mangadventure/assortedscans/res/mipmap-xhdpi/ic_launcher.png
new file mode 100644
index 000000000..51889a88e
Binary files /dev/null and b/multisrc/overrides/mangadventure/assortedscans/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/mangadventure/assortedscans/res/mipmap-xxhdpi/ic_launcher.png b/multisrc/overrides/mangadventure/assortedscans/res/mipmap-xxhdpi/ic_launcher.png
new file mode 100644
index 000000000..f77969e13
Binary files /dev/null and b/multisrc/overrides/mangadventure/assortedscans/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/mangadventure/assortedscans/res/mipmap-xxxhdpi/ic_launcher.png b/multisrc/overrides/mangadventure/assortedscans/res/mipmap-xxxhdpi/ic_launcher.png
new file mode 100644
index 000000000..d5d89717a
Binary files /dev/null and b/multisrc/overrides/mangadventure/assortedscans/res/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/mangadventure/default/AndroidManifest.xml b/multisrc/overrides/mangadventure/default/AndroidManifest.xml
new file mode 100644
index 000000000..6bcc55d4b
--- /dev/null
+++ b/multisrc/overrides/mangadventure/default/AndroidManifest.xml
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/multisrc/overrides/mangadventure/default/res/mipmap-hdpi/ic_launcher.png b/multisrc/overrides/mangadventure/default/res/mipmap-hdpi/ic_launcher.png
new file mode 100644
index 000000000..2c3111603
Binary files /dev/null and b/multisrc/overrides/mangadventure/default/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/mangadventure/default/res/mipmap-mdpi/ic_launcher.png b/multisrc/overrides/mangadventure/default/res/mipmap-mdpi/ic_launcher.png
new file mode 100644
index 000000000..3817c92e5
Binary files /dev/null and b/multisrc/overrides/mangadventure/default/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/mangadventure/default/res/mipmap-xhdpi/ic_launcher.png b/multisrc/overrides/mangadventure/default/res/mipmap-xhdpi/ic_launcher.png
new file mode 100644
index 000000000..ac0dbc4df
Binary files /dev/null and b/multisrc/overrides/mangadventure/default/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/mangadventure/default/res/mipmap-xxhdpi/ic_launcher.png b/multisrc/overrides/mangadventure/default/res/mipmap-xxhdpi/ic_launcher.png
new file mode 100644
index 000000000..9474a7d35
Binary files /dev/null and b/multisrc/overrides/mangadventure/default/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/mangadventure/default/res/mipmap-xxxhdpi/ic_launcher.png b/multisrc/overrides/mangadventure/default/res/mipmap-xxxhdpi/ic_launcher.png
new file mode 100644
index 000000000..09f1bbf62
Binary files /dev/null and b/multisrc/overrides/mangadventure/default/res/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/mangahub/default/additional.gradle b/multisrc/overrides/mangahub/default/additional.gradle
new file mode 100644
index 000000000..57807a7d0
--- /dev/null
+++ b/multisrc/overrides/mangahub/default/additional.gradle
@@ -0,0 +1,3 @@
+dependencies {
+ implementation(project(":lib-randomua"))
+}
diff --git a/multisrc/overrides/mangahub/default/res/mipmap-hdpi/ic_launcher.png b/multisrc/overrides/mangahub/default/res/mipmap-hdpi/ic_launcher.png
new file mode 100644
index 000000000..577d38e5a
Binary files /dev/null and b/multisrc/overrides/mangahub/default/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/mangahub/default/res/mipmap-mdpi/ic_launcher.png b/multisrc/overrides/mangahub/default/res/mipmap-mdpi/ic_launcher.png
new file mode 100644
index 000000000..d3f357b36
Binary files /dev/null and b/multisrc/overrides/mangahub/default/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/mangahub/default/res/mipmap-xhdpi/ic_launcher.png b/multisrc/overrides/mangahub/default/res/mipmap-xhdpi/ic_launcher.png
new file mode 100644
index 000000000..2d18952af
Binary files /dev/null and b/multisrc/overrides/mangahub/default/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/mangahub/default/res/mipmap-xxhdpi/ic_launcher.png b/multisrc/overrides/mangahub/default/res/mipmap-xxhdpi/ic_launcher.png
new file mode 100644
index 000000000..2ec50ca90
Binary files /dev/null and b/multisrc/overrides/mangahub/default/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/mangahub/default/res/mipmap-xxxhdpi/ic_launcher.png b/multisrc/overrides/mangahub/default/res/mipmap-xxxhdpi/ic_launcher.png
new file mode 100644
index 000000000..e4c9c7f68
Binary files /dev/null and b/multisrc/overrides/mangahub/default/res/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/mangahub/mangahubio/res/mipmap-hdpi/ic_launcher.png b/multisrc/overrides/mangahub/mangahubio/res/mipmap-hdpi/ic_launcher.png
new file mode 100644
index 000000000..d90dd1a47
Binary files /dev/null and b/multisrc/overrides/mangahub/mangahubio/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/mangahub/mangahubio/res/mipmap-mdpi/ic_launcher.png b/multisrc/overrides/mangahub/mangahubio/res/mipmap-mdpi/ic_launcher.png
new file mode 100644
index 000000000..e15bccd84
Binary files /dev/null and b/multisrc/overrides/mangahub/mangahubio/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/mangahub/mangahubio/res/mipmap-xhdpi/ic_launcher.png b/multisrc/overrides/mangahub/mangahubio/res/mipmap-xhdpi/ic_launcher.png
new file mode 100644
index 000000000..74a4e6d4f
Binary files /dev/null and b/multisrc/overrides/mangahub/mangahubio/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/mangahub/mangahubio/res/mipmap-xxhdpi/ic_launcher.png b/multisrc/overrides/mangahub/mangahubio/res/mipmap-xxhdpi/ic_launcher.png
new file mode 100644
index 000000000..51abe4128
Binary files /dev/null and b/multisrc/overrides/mangahub/mangahubio/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/mangahub/mangahubio/res/mipmap-xxxhdpi/ic_launcher.png b/multisrc/overrides/mangahub/mangahubio/res/mipmap-xxxhdpi/ic_launcher.png
new file mode 100644
index 000000000..44ff56f38
Binary files /dev/null and b/multisrc/overrides/mangahub/mangahubio/res/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/mangahub/mangapandaonl/res/mipmap-hdpi/ic_launcher.png b/multisrc/overrides/mangahub/mangapandaonl/res/mipmap-hdpi/ic_launcher.png
new file mode 100644
index 000000000..40118fc2d
Binary files /dev/null and b/multisrc/overrides/mangahub/mangapandaonl/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/mangahub/mangapandaonl/res/mipmap-mdpi/ic_launcher.png b/multisrc/overrides/mangahub/mangapandaonl/res/mipmap-mdpi/ic_launcher.png
new file mode 100644
index 000000000..63f0b6a00
Binary files /dev/null and b/multisrc/overrides/mangahub/mangapandaonl/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/mangahub/mangapandaonl/res/mipmap-xhdpi/ic_launcher.png b/multisrc/overrides/mangahub/mangapandaonl/res/mipmap-xhdpi/ic_launcher.png
new file mode 100644
index 000000000..f320df33c
Binary files /dev/null and b/multisrc/overrides/mangahub/mangapandaonl/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/mangahub/mangapandaonl/res/mipmap-xxhdpi/ic_launcher.png b/multisrc/overrides/mangahub/mangapandaonl/res/mipmap-xxhdpi/ic_launcher.png
new file mode 100644
index 000000000..af37887a7
Binary files /dev/null and b/multisrc/overrides/mangahub/mangapandaonl/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/mangahub/mangapandaonl/res/mipmap-xxxhdpi/ic_launcher.png b/multisrc/overrides/mangahub/mangapandaonl/res/mipmap-xxxhdpi/ic_launcher.png
new file mode 100644
index 000000000..a47ed538e
Binary files /dev/null and b/multisrc/overrides/mangahub/mangapandaonl/res/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/mangahub/mangareadersite/res/mipmap-hdpi/ic_launcher.png b/multisrc/overrides/mangahub/mangareadersite/res/mipmap-hdpi/ic_launcher.png
new file mode 100644
index 000000000..4ebfce2a4
Binary files /dev/null and b/multisrc/overrides/mangahub/mangareadersite/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/mangahub/mangareadersite/res/mipmap-mdpi/ic_launcher.png b/multisrc/overrides/mangahub/mangareadersite/res/mipmap-mdpi/ic_launcher.png
new file mode 100644
index 000000000..6ef6d33e8
Binary files /dev/null and b/multisrc/overrides/mangahub/mangareadersite/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/mangahub/mangareadersite/res/mipmap-xhdpi/ic_launcher.png b/multisrc/overrides/mangahub/mangareadersite/res/mipmap-xhdpi/ic_launcher.png
new file mode 100644
index 000000000..2f082671a
Binary files /dev/null and b/multisrc/overrides/mangahub/mangareadersite/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/mangahub/mangareadersite/res/mipmap-xxhdpi/ic_launcher.png b/multisrc/overrides/mangahub/mangareadersite/res/mipmap-xxhdpi/ic_launcher.png
new file mode 100644
index 000000000..2f339dc7a
Binary files /dev/null and b/multisrc/overrides/mangahub/mangareadersite/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/mangahub/mangareadersite/res/mipmap-xxxhdpi/ic_launcher.png b/multisrc/overrides/mangahub/mangareadersite/res/mipmap-xxxhdpi/ic_launcher.png
new file mode 100644
index 000000000..ed720a9e4
Binary files /dev/null and b/multisrc/overrides/mangahub/mangareadersite/res/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/mangaraw/default/res/mipmap-hdpi/ic_launcher.png b/multisrc/overrides/mangaraw/default/res/mipmap-hdpi/ic_launcher.png
new file mode 100644
index 000000000..601d86661
Binary files /dev/null and b/multisrc/overrides/mangaraw/default/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/mangaraw/default/res/mipmap-mdpi/ic_launcher.png b/multisrc/overrides/mangaraw/default/res/mipmap-mdpi/ic_launcher.png
new file mode 100644
index 000000000..969acba92
Binary files /dev/null and b/multisrc/overrides/mangaraw/default/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/mangaraw/default/res/mipmap-xhdpi/ic_launcher.png b/multisrc/overrides/mangaraw/default/res/mipmap-xhdpi/ic_launcher.png
new file mode 100644
index 000000000..18380c9ca
Binary files /dev/null and b/multisrc/overrides/mangaraw/default/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/mangaraw/default/res/mipmap-xxhdpi/ic_launcher.png b/multisrc/overrides/mangaraw/default/res/mipmap-xxhdpi/ic_launcher.png
new file mode 100644
index 000000000..7d6b77d4f
Binary files /dev/null and b/multisrc/overrides/mangaraw/default/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/mangaraw/default/res/mipmap-xxxhdpi/ic_launcher.png b/multisrc/overrides/mangaraw/default/res/mipmap-xxxhdpi/ic_launcher.png
new file mode 100644
index 000000000..6c853797b
Binary files /dev/null and b/multisrc/overrides/mangaraw/default/res/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/mangaraw/manga9co/res/mipmap-hdpi/ic_launcher.png b/multisrc/overrides/mangaraw/manga9co/res/mipmap-hdpi/ic_launcher.png
new file mode 100644
index 000000000..ae8f4d955
Binary files /dev/null and b/multisrc/overrides/mangaraw/manga9co/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/mangaraw/manga9co/res/mipmap-mdpi/ic_launcher.png b/multisrc/overrides/mangaraw/manga9co/res/mipmap-mdpi/ic_launcher.png
new file mode 100644
index 000000000..82362e1d1
Binary files /dev/null and b/multisrc/overrides/mangaraw/manga9co/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/mangaraw/manga9co/res/mipmap-xhdpi/ic_launcher.png b/multisrc/overrides/mangaraw/manga9co/res/mipmap-xhdpi/ic_launcher.png
new file mode 100644
index 000000000..e38a1362b
Binary files /dev/null and b/multisrc/overrides/mangaraw/manga9co/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/mangaraw/manga9co/res/mipmap-xxhdpi/ic_launcher.png b/multisrc/overrides/mangaraw/manga9co/res/mipmap-xxhdpi/ic_launcher.png
new file mode 100644
index 000000000..c547af4e1
Binary files /dev/null and b/multisrc/overrides/mangaraw/manga9co/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/mangaraw/manga9co/res/mipmap-xxxhdpi/ic_launcher.png b/multisrc/overrides/mangaraw/manga9co/res/mipmap-xxxhdpi/ic_launcher.png
new file mode 100644
index 000000000..75151f96c
Binary files /dev/null and b/multisrc/overrides/mangaraw/manga9co/res/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/mangaraw/manga9co/src/MangaRaw.kt b/multisrc/overrides/mangaraw/manga9co/src/MangaRaw.kt
new file mode 100644
index 000000000..c18180cb2
--- /dev/null
+++ b/multisrc/overrides/mangaraw/manga9co/src/MangaRaw.kt
@@ -0,0 +1,99 @@
+package eu.kanade.tachiyomi.extension.ja.manga9co
+
+import android.app.Application
+import androidx.preference.ListPreference
+import androidx.preference.PreferenceScreen
+import eu.kanade.tachiyomi.multisrc.mangaraw.ImageListParser
+import eu.kanade.tachiyomi.multisrc.mangaraw.MangaRawTheme
+import eu.kanade.tachiyomi.network.GET
+import eu.kanade.tachiyomi.source.ConfigurableSource
+import eu.kanade.tachiyomi.source.model.FilterList
+import eu.kanade.tachiyomi.source.model.Page
+import okhttp3.Response
+import org.jsoup.nodes.Document
+import org.jsoup.nodes.Element
+import org.jsoup.select.Evaluator
+import uy.kohesive.injekt.Injekt
+import uy.kohesive.injekt.api.get
+import kotlin.random.Random
+
+class MangaRaw : MangaRawTheme("MangaRaw", ""), ConfigurableSource {
+ // See https://github.com/tachiyomiorg/tachiyomi-extensions/commits/master/src/ja/mangaraw
+ override val versionId = 2
+ override val id = 4572869149806246133
+
+ private val isCi = System.getenv("CI") == "true"
+ override val baseUrl get() = when {
+ isCi -> MIRRORS.joinToString("#, ") { "https://$it" }
+ else -> _baseUrl
+ }
+
+ override val supportsLatest = true
+ private val _baseUrl: String
+ private val selectors: Selectors
+ private val needUrlSanitize: Boolean
+ private val isPagesShuffled: Boolean
+
+ init {
+ val mirrors = MIRRORS
+ val preferences = Injekt.get().getSharedPreferences("source_$id", 0x0000)
+ var mirrorIndex = preferences.getString(MIRROR_PREF, "-1")!!.toInt()
+
+ if (mirrorIndex !in mirrors.indices) {
+ mirrorIndex = Random.nextInt(RANDOM_MIRROR_FROM, RANDOM_MIRROR_UNTIL)
+ preferences.edit().putString(MIRROR_PREF, mirrorIndex.toString()).apply()
+ }
+
+ _baseUrl = "https://" + mirrors[mirrorIndex]
+ selectors = getSelectors(mirrorIndex)
+ needUrlSanitize = needUrlSanitize(mirrorIndex)
+ isPagesShuffled = isPagesShuffled(mirrorIndex)
+ }
+
+ override fun String.sanitizeTitle() = substringBeforeLast('(').trimEnd()
+
+ override fun popularMangaRequest(page: Int) = GET("$baseUrl/top/?page=$page", headers)
+ override fun popularMangaSelector() = selectors.listMangaSelector
+ override fun popularMangaNextPageSelector() = ".nextpostslink"
+
+ override fun popularMangaFromElement(element: Element) = super.popularMangaFromElement(element).apply {
+ if (needUrlSanitize) url = mangaSlugRegex.replaceFirst(url, "/")
+ }
+
+ override fun searchMangaRequest(page: Int, query: String, filters: FilterList) =
+ GET("$baseUrl/?s=$query&page=$page", headers)
+
+ override fun Document.getSanitizedDetails(): Element =
+ selectFirst(selectors.detailsSelector)!!.apply {
+ val recommendClass = selectors.recommendClass
+ children().find { it.hasClass(recommendClass) }?.remove()
+ selectFirst(Evaluator.Class("list-scoll"))!!.remove()
+ }
+
+ override fun chapterListSelector() = ".list-scoll a"
+ override fun String.sanitizeChapter() = substring(lastIndexOf('【') + 1, length - 1)
+
+ override fun pageSelector() = Evaluator.Class("card-wrap")
+
+ override fun pageListParse(response: Response): List {
+ if (!isPagesShuffled) return super.pageListParse(response)
+ val html = response.body.string()
+ val imageList = ImageListParser(html, 32).getImageList() ?: return emptyList()
+ return imageList.mapIndexed { index, imageUrl ->
+ Page(index, imageUrl = imageUrl)
+ }
+ }
+
+ override fun setupPreferenceScreen(screen: PreferenceScreen) {
+ ListPreference(screen.context).apply {
+ key = MIRROR_PREF
+ title = "Mirror"
+ summary = "%s\n" +
+ "Requires app restart to take effect\n" +
+ PROMPT
+ entries = MIRRORS
+ entryValues = MIRRORS.indices.map { it.toString() }.toTypedArray()
+ setDefaultValue("0")
+ }.let { screen.addPreference(it) }
+ }
+}
diff --git a/multisrc/overrides/mangaraw/manga9co/src/MangaRawConstants.kt b/multisrc/overrides/mangaraw/manga9co/src/MangaRawConstants.kt
new file mode 100644
index 000000000..f25835f71
--- /dev/null
+++ b/multisrc/overrides/mangaraw/manga9co/src/MangaRawConstants.kt
@@ -0,0 +1,40 @@
+package eu.kanade.tachiyomi.extension.ja.manga9co
+
+/**
+ * https://syosetu.me/ is not added because of different HTML structure
+ */
+
+internal const val MIRROR_PREF = "MIRROR"
+internal val MIRRORS get() = arrayOf("manga1001.in", "mangaraw.to", "mangaraw.io", "mangarawjp.io")
+internal val PROMPT get() = "Note: 'manga1001.in' is not recommended because it might contain shuffled/unordered pages."
+
+internal const val RANDOM_MIRROR_FROM = 1
+internal const val RANDOM_MIRROR_UNTIL = 4
+
+internal fun getSelectors(mirrorIndex: Int) = when (mirrorIndex) {
+ 0, 1, 2 -> Selectors(
+ listMangaSelector = ".card",
+ detailsSelector = "div:has(> main)",
+ recommendClass = "container",
+ )
+ else -> Selectors(
+ listMangaSelector = ".post-list:not(.last-hidden) > .item",
+ detailsSelector = "#post-data",
+ recommendClass = "post-list",
+ )
+}
+
+internal fun needUrlSanitize(mirrorIndex: Int) = mirrorIndex == 2
+
+internal fun isPagesShuffled(mirrorIndex: Int) = when (mirrorIndex) {
+ 0 -> false
+ else -> true
+}
+
+internal val mangaSlugRegex = Regex("""^/mz[a-z]{4}-""")
+
+internal class Selectors(
+ val listMangaSelector: String,
+ val detailsSelector: String,
+ val recommendClass: String,
+)
diff --git a/multisrc/overrides/mangaraw/syosetu/src/SyoSetu.kt b/multisrc/overrides/mangaraw/syosetu/src/SyoSetu.kt
new file mode 100644
index 000000000..5c9620f99
--- /dev/null
+++ b/multisrc/overrides/mangaraw/syosetu/src/SyoSetu.kt
@@ -0,0 +1,39 @@
+package eu.kanade.tachiyomi.extension.ja.syosetu
+
+import eu.kanade.tachiyomi.multisrc.mangaraw.MangaRawTheme
+import eu.kanade.tachiyomi.network.GET
+import eu.kanade.tachiyomi.source.model.FilterList
+import okhttp3.Request
+import org.jsoup.nodes.Document
+import org.jsoup.nodes.Element
+import org.jsoup.select.Evaluator
+
+class SyoSetu : MangaRawTheme("SyoSetu", "https://syosetu.top") {
+ // syosetu.top doesn't have a popular manga page redirect to latest manga request
+ override fun popularMangaRequest(page: Int): Request = latestUpdatesRequest(page)
+
+ override val supportsLatest = false
+
+ override fun String.sanitizeTitle(): String {
+ val index = lastIndexOf("RAW", ignoreCase = true)
+ if (index == -1) return this
+ return substring(0, index)
+ .trimEnd('(', ' ', ',')
+ }
+
+ override fun popularMangaSelector() = "article"
+ override fun popularMangaNextPageSelector() = ".next.page-numbers"
+
+ override fun searchMangaRequest(page: Int, query: String, filters: FilterList) =
+ GET("$baseUrl/page/$page?s=$query")
+
+ override fun Document.getSanitizedDetails(): Element =
+ selectFirst(Evaluator.Tag("article"))!!.selectFirst(Evaluator.Class("content-wrap-inner"))!!.apply {
+ selectFirst(Evaluator.Class("chaplist"))!!.remove()
+ }
+
+ override fun chapterListSelector() = ".chaplist a"
+ override fun String.sanitizeChapter() = substringAfterLast(" - ")
+
+ override fun pageSelector() = Evaluator.Tag("figure")
+}
diff --git a/multisrc/overrides/mangareader/comickiba/res/mipmap-hdpi/ic_launcher.png b/multisrc/overrides/mangareader/comickiba/res/mipmap-hdpi/ic_launcher.png
new file mode 100644
index 000000000..06d80b926
Binary files /dev/null and b/multisrc/overrides/mangareader/comickiba/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/mangareader/comickiba/res/mipmap-mdpi/ic_launcher.png b/multisrc/overrides/mangareader/comickiba/res/mipmap-mdpi/ic_launcher.png
new file mode 100644
index 000000000..628eef8f3
Binary files /dev/null and b/multisrc/overrides/mangareader/comickiba/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/mangareader/comickiba/res/mipmap-xhdpi/ic_launcher.png b/multisrc/overrides/mangareader/comickiba/res/mipmap-xhdpi/ic_launcher.png
new file mode 100644
index 000000000..5bbe93d59
Binary files /dev/null and b/multisrc/overrides/mangareader/comickiba/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/mangareader/comickiba/res/mipmap-xxhdpi/ic_launcher.png b/multisrc/overrides/mangareader/comickiba/res/mipmap-xxhdpi/ic_launcher.png
new file mode 100644
index 000000000..9cff69862
Binary files /dev/null and b/multisrc/overrides/mangareader/comickiba/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/mangareader/comickiba/res/mipmap-xxxhdpi/ic_launcher.png b/multisrc/overrides/mangareader/comickiba/res/mipmap-xxxhdpi/ic_launcher.png
new file mode 100644
index 000000000..36f1e33ac
Binary files /dev/null and b/multisrc/overrides/mangareader/comickiba/res/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/mangareader/comickiba/src/Manhuagold.kt b/multisrc/overrides/mangareader/comickiba/src/Manhuagold.kt
new file mode 100644
index 000000000..de17ec25b
--- /dev/null
+++ b/multisrc/overrides/mangareader/comickiba/src/Manhuagold.kt
@@ -0,0 +1,233 @@
+package eu.kanade.tachiyomi.extension.en.comickiba
+
+import eu.kanade.tachiyomi.multisrc.mangareader.MangaReader
+import eu.kanade.tachiyomi.network.GET
+import eu.kanade.tachiyomi.network.asObservableSuccess
+import eu.kanade.tachiyomi.network.interceptor.rateLimit
+import eu.kanade.tachiyomi.source.model.FilterList
+import eu.kanade.tachiyomi.source.model.Page
+import eu.kanade.tachiyomi.source.model.SChapter
+import eu.kanade.tachiyomi.source.model.SManga
+import eu.kanade.tachiyomi.util.asJsoup
+import kotlinx.serialization.json.Json
+import kotlinx.serialization.json.jsonObject
+import kotlinx.serialization.json.jsonPrimitive
+import okhttp3.HttpUrl.Companion.toHttpUrl
+import okhttp3.Request
+import okhttp3.Response
+import org.jsoup.Jsoup
+import org.jsoup.nodes.Document
+import org.jsoup.nodes.Element
+import org.jsoup.nodes.TextNode
+import org.jsoup.select.Evaluator
+import rx.Observable
+
+class Manhuagold : MangaReader() {
+
+ override val name = "Manhuagold"
+
+ override val lang = "en"
+
+ override val baseUrl = "https://manhuagold.com"
+
+ override val client = network.cloudflareClient.newBuilder()
+ .rateLimit(2)
+ .build()
+
+ override fun headersBuilder() = super.headersBuilder()
+ .add("Referer", "$baseUrl/")
+
+ // Popular
+
+ override fun popularMangaRequest(page: Int) =
+ GET("$baseUrl/filter/$page/?sort=views&sex=All&chapter_count=0", headers)
+
+ // Latest
+
+ override fun latestUpdatesRequest(page: Int) =
+ GET("$baseUrl/filter/$page/?sort=latest-updated&sex=All&chapter_count=0", headers)
+
+ // Search
+
+ override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request {
+ val urlBuilder = baseUrl.toHttpUrl().newBuilder()
+ if (query.isNotBlank()) {
+ urlBuilder.addPathSegment("search").apply {
+ addQueryParameter("keyword", query)
+ }
+ } else {
+ urlBuilder.addPathSegment("filter").apply {
+ filters.ifEmpty(::getFilterList).forEach { filter ->
+ when (filter) {
+ is Select -> {
+ addQueryParameter(filter.param, filter.selection)
+ }
+ is GenresFilter -> {
+ addQueryParameter(filter.param, filter.selection)
+ }
+ else -> {}
+ }
+ }
+ }
+ }
+
+ urlBuilder.addPathSegment(page.toString())
+ urlBuilder.addPathSegment("")
+
+ return GET(urlBuilder.build(), headers)
+ }
+
+ override fun searchMangaSelector() = ".manga_list-sbs .manga-poster"
+
+ override fun searchMangaFromElement(element: Element) =
+ SManga.create().apply {
+ setUrlWithoutDomain(element.attr("href"))
+ element.selectFirst(Evaluator.Tag("img"))!!.let {
+ title = it.attr("alt")
+ thumbnail_url = it.imgAttr()
+ }
+ }
+
+ override fun searchMangaNextPageSelector() = "ul.pagination > li.active + li"
+
+ // Filters
+
+ override fun getFilterList() =
+ FilterList(
+ Note,
+ StatusFilter(),
+ SortFilter(),
+ GenresFilter(),
+ )
+
+ // Details
+
+ override fun mangaDetailsParse(document: Document) = SManga.create().apply {
+ val root = document.selectFirst(Evaluator.Id("ani_detail"))!!
+ val mangaTitle = root.selectFirst(Evaluator.Class("manga-name"))!!.ownText()
+ title = mangaTitle
+ description = root.run {
+ val description = selectFirst(Evaluator.Class("description"))!!.ownText()
+ when (val altTitle = selectFirst(Evaluator.Class("manga-name-or"))!!.ownText()) {
+ "", mangaTitle -> description
+ else -> "$description\n\nAlternative Title: $altTitle"
+ }
+ }
+ thumbnail_url = root.selectFirst(Evaluator.Tag("img"))!!.imgAttr()
+ genre = root.selectFirst(Evaluator.Class("genres"))!!.children().joinToString { it.ownText() }
+ for (item in root.selectFirst(Evaluator.Class("anisc-info"))!!.children()) {
+ if (item.hasClass("item").not()) continue
+ when (item.selectFirst(Evaluator.Class("item-head"))!!.ownText()) {
+ "Authors:" -> item.parseAuthorsTo(this)
+ "Status:" -> status = when (item.selectFirst(Evaluator.Class("name"))!!.ownText().lowercase()) {
+ "ongoing" -> SManga.ONGOING
+ "completed" -> SManga.COMPLETED
+ "on-hold" -> SManga.ON_HIATUS
+ "canceled" -> SManga.CANCELLED
+ else -> SManga.UNKNOWN
+ }
+ }
+ }
+ }
+
+ private fun Element.parseAuthorsTo(manga: SManga) {
+ val authors = select(Evaluator.Tag("a"))
+ val text = authors.map { it.ownText().replace(",", "") }
+ val count = authors.size
+ when (count) {
+ 0 -> return
+ 1 -> {
+ manga.author = text[0]
+ return
+ }
+ }
+ val authorList = ArrayList(count)
+ val artistList = ArrayList(count)
+ for ((index, author) in authors.withIndex()) {
+ val textNode = author.nextSibling() as? TextNode
+ val list = if (textNode != null && "(Art)" in textNode.wholeText) artistList else authorList
+ list.add(text[index])
+ }
+ if (authorList.isEmpty().not()) manga.author = authorList.joinToString()
+ if (artistList.isEmpty().not()) manga.artist = artistList.joinToString()
+ }
+
+ // Chapters
+
+ override fun chapterListRequest(mangaUrl: String, type: String): Request =
+ GET(baseUrl + mangaUrl, headers)
+
+ override fun parseChapterElements(response: Response, isVolume: Boolean): List {
+ TODO("Not yet implemented")
+ }
+
+ override val chapterType = ""
+ override val volumeType = ""
+
+ override fun fetchChapterList(manga: SManga): Observable> {
+ return client.newCall(chapterListRequest(manga))
+ .asObservableSuccess()
+ .map(::parseChapterList)
+ }
+
+ private fun parseChapterList(response: Response): List {
+ val document = response.use { it.asJsoup() }
+
+ return document.select(chapterListSelector())
+ .map(::chapterFromElement)
+ }
+
+ private fun chapterListSelector(): String = "#chapters-list > li"
+
+ private fun chapterFromElement(element: Element): SChapter = SChapter.create().apply {
+ element.selectFirst("a")!!.run {
+ setUrlWithoutDomain(attr("href"))
+ name = selectFirst(".name")?.text() ?: text()
+ }
+ }
+
+ // Images
+
+ override fun fetchPageList(chapter: SChapter): Observable> = Observable.fromCallable {
+ val document = client.newCall(pageListRequest(chapter)).execute().asJsoup()
+
+ val script = document.selectFirst("script:containsData(const CHAPTER_ID)")!!.data()
+ val id = script.substringAfter("const CHAPTER_ID = ").substringBefore(";")
+
+ val ajaxHeaders = super.headersBuilder().apply {
+ add("Accept", "application/json, text/javascript, */*; q=0.01")
+ add("Referer", baseUrl + chapter.url)
+ add("X-Requested-With", "XMLHttpRequest")
+ }.build()
+
+ val ajaxUrl = "$baseUrl/ajax/image/list/chap/$id"
+ client.newCall(GET(ajaxUrl, ajaxHeaders)).execute().let(::pageListParse)
+ }
+
+ override fun pageListParse(response: Response): List {
+ val document = response.use { it.parseHtmlProperty() }
+
+ val pageList = document.select("div").map {
+ val index = it.attr("data-number").toInt()
+ val imgUrl = it.imgAttr().ifEmpty { it.selectFirst("img")!!.imgAttr() }
+
+ Page(index, "", imgUrl)
+ }
+
+ return pageList
+ }
+
+ // Utilities
+
+ // From mangathemesia
+ private fun Element.imgAttr(): String = when {
+ hasAttr("data-lazy-src") -> attr("abs:data-lazy-src")
+ hasAttr("data-src") -> attr("abs:data-src")
+ else -> attr("abs:src")
+ }
+
+ private fun Response.parseHtmlProperty(): Document {
+ val html = Json.parseToJsonElement(body.string()).jsonObject["html"]!!.jsonPrimitive.content
+ return Jsoup.parseBodyFragment(html)
+ }
+}
diff --git a/multisrc/overrides/mangareader/comickiba/src/ManhuagoldFilters.kt b/multisrc/overrides/mangareader/comickiba/src/ManhuagoldFilters.kt
new file mode 100644
index 000000000..f8dccbc81
--- /dev/null
+++ b/multisrc/overrides/mangareader/comickiba/src/ManhuagoldFilters.kt
@@ -0,0 +1,142 @@
+package eu.kanade.tachiyomi.extension.en.comickiba
+
+import eu.kanade.tachiyomi.source.model.Filter
+
+object Note : Filter.Header("NOTE: Ignored if using text search!")
+
+sealed class Select(
+ name: String,
+ val param: String,
+ values: Array,
+) : Filter.Select(name, values) {
+ open val selection: String
+ get() = if (state == 0) "" else state.toString()
+}
+
+class StatusFilter(
+ values: Array = statuses.keys.toTypedArray(),
+) : Select("Status", "status", values) {
+ override val selection: String
+ get() = statuses[values[state]]!!
+
+ companion object {
+ private val statuses = mapOf(
+ "All" to "",
+ "Completed" to "completed",
+ "OnGoing" to "on-going",
+ "On-Hold" to "on-hold",
+ "Canceled" to "canceled",
+ )
+ }
+}
+
+class SortFilter(
+ values: Array = orders.keys.toTypedArray(),
+) : Select("Sort", "sort", values) {
+ override val selection: String
+ get() = orders[values[state]]!!
+
+ companion object {
+ private val orders = mapOf(
+ "Default" to "default",
+ "Latest Updated" to "latest-updated",
+ "Most Viewed" to "views",
+ "Most Viewed Month" to "views_month",
+ "Most Viewed Week" to "views_week",
+ "Most Viewed Day" to "views_day",
+ "Score" to "score",
+ "Name A-Z" to "az",
+ "Name Z-A" to "za",
+ "The highest chapter count" to "chapters",
+ "Newest" to "new",
+ "Oldest" to "old",
+ )
+ }
+}
+
+class Genre(name: String, val id: String) : Filter.CheckBox(name)
+
+class GenresFilter(
+ values: List = genres,
+) : Filter.Group("Genres", values) {
+ val param = "genres"
+
+ val selection: String
+ get() = state.filter { it.state }.joinToString(",") { it.id }
+
+ companion object {
+ private val genres: List
+ get() = listOf(
+ Genre("Action", "37"),
+ Genre("Adaptation", "19"),
+ Genre("Adult", "5310"),
+ Genre("Adventure", "38"),
+ Genre("Aliens", "5436"),
+ Genre("Animals", "1552"),
+ Genre("Award Winning", "39"),
+ Genre("Comedy", "202"),
+ Genre("Comic", "287"),
+ Genre("Cooking", "277"),
+ Genre("Crime", "2723"),
+ Genre("Delinquents", "4438"),
+ Genre("Demons", "379"),
+ Genre("Drama", "3"),
+ Genre("Ecchi", "17"),
+ Genre("Fantasy", "197"),
+ Genre("Full Color", "13"),
+ Genre("Gender Bender", "221"),
+ Genre("Genderswap", "2290"),
+ Genre("Ghosts", "2866"),
+ Genre("Gore", "42"),
+ Genre("Harem", "222"),
+ Genre("Historical", "4"),
+ Genre("Horror", "5"),
+ Genre("Isekai", "259"),
+ Genre("Josei", "292"),
+ Genre("Loli", "5449"),
+ Genre("Long Strip", "7"),
+ Genre("Magic", "272"),
+ Genre("Manhwa", "266"),
+ Genre("Martial Arts", "40"),
+ Genre("Mature", "5311"),
+ Genre("Mecha", "2830"),
+ Genre("Medical", "1598"),
+ Genre("Military", "43"),
+ Genre("Monster Girls", "2307"),
+ Genre("Monsters", "298"),
+ Genre("Music", "3182"),
+ Genre("Mystery", "6"),
+ Genre("Office Workers", "14"),
+ Genre("Official Colored", "1046"),
+ Genre("Philosophical", "2776"),
+ Genre("Post-Apocalyptic", "1059"),
+ Genre("Psychological", "493"),
+ Genre("Reincarnation", "204"),
+ Genre("Reverse", "280"),
+ Genre("Reverse Harem", "199"),
+ Genre("Romance", "186"),
+ Genre("School Life", "601"),
+ Genre("Sci-Fi", "1845"),
+ Genre("Sexual Violence", "731"),
+ Genre("Shoujo", "254"),
+ Genre("Slice of Life", "10"),
+ Genre("Sports", "4066"),
+ Genre("Superhero", "481"),
+ Genre("Supernatural", "198"),
+ Genre("Survival", "44"),
+ Genre("Thriller", "1058"),
+ Genre("Time Travel", "299"),
+ Genre("Tragedy", "41"),
+ Genre("Video Games", "1846"),
+ Genre("Villainess", "278"),
+ Genre("Virtual Reality", "1847"),
+ Genre("Web Comic", "12"),
+ Genre("Webtoon", "279"),
+ Genre("Webtoons", "267"),
+ Genre("Wuxia", "203"),
+ Genre("Yaoi", "18"),
+ Genre("Yuri", "11"),
+ Genre("Zombies", "1060"),
+ )
+ }
+}
diff --git a/multisrc/overrides/mangareader/mangafire/res/mipmap-hdpi/ic_launcher.png b/multisrc/overrides/mangareader/mangafire/res/mipmap-hdpi/ic_launcher.png
new file mode 100644
index 000000000..bb7c377bc
Binary files /dev/null and b/multisrc/overrides/mangareader/mangafire/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/mangareader/mangafire/res/mipmap-mdpi/ic_launcher.png b/multisrc/overrides/mangareader/mangafire/res/mipmap-mdpi/ic_launcher.png
new file mode 100644
index 000000000..e4ae40abf
Binary files /dev/null and b/multisrc/overrides/mangareader/mangafire/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/mangareader/mangafire/res/mipmap-xhdpi/ic_launcher.png b/multisrc/overrides/mangareader/mangafire/res/mipmap-xhdpi/ic_launcher.png
new file mode 100644
index 000000000..2afaaac46
Binary files /dev/null and b/multisrc/overrides/mangareader/mangafire/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/mangareader/mangafire/res/mipmap-xxhdpi/ic_launcher.png b/multisrc/overrides/mangareader/mangafire/res/mipmap-xxhdpi/ic_launcher.png
new file mode 100644
index 000000000..5c1f701f9
Binary files /dev/null and b/multisrc/overrides/mangareader/mangafire/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/mangareader/mangafire/res/mipmap-xxxhdpi/ic_launcher.png b/multisrc/overrides/mangareader/mangafire/res/mipmap-xxxhdpi/ic_launcher.png
new file mode 100644
index 000000000..c993005be
Binary files /dev/null and b/multisrc/overrides/mangareader/mangafire/res/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/mangareader/mangafire/src/Filters.kt b/multisrc/overrides/mangareader/mangafire/src/Filters.kt
new file mode 100644
index 000000000..a5ccc3e0e
--- /dev/null
+++ b/multisrc/overrides/mangareader/mangafire/src/Filters.kt
@@ -0,0 +1,166 @@
+package eu.kanade.tachiyomi.extension.all.mangafire
+
+import eu.kanade.tachiyomi.source.model.Filter
+
+class Entry(name: String, val id: String) : Filter.CheckBox(name) {
+ constructor(name: String) : this(name, name)
+}
+
+sealed class Group(
+ name: String,
+ val param: String,
+ values: List,
+) : Filter.Group(name, values)
+
+sealed class Select(
+ name: String,
+ val param: String,
+ private val valuesMap: Map,
+) : Filter.Select(name, valuesMap.keys.toTypedArray()) {
+ open val selection: String
+ get() = valuesMap[values[state]]!!
+}
+
+class TypeFilter : Group("Type", "type[]", types)
+
+private val types: List
+ get() = listOf(
+ Entry("Manga", "manga"),
+ Entry("One-Shot", "one_shot"),
+ Entry("Doujinshi", "doujinshi"),
+ Entry("Light-Novel", "light_novel"),
+ Entry("Novel", "novel"),
+ Entry("Manhwa", "manhwa"),
+ Entry("Manhua", "manhua"),
+ )
+
+class Genre(name: String, val id: String) : Filter.TriState(name) {
+ val selection: String
+ get() = (if (isExcluded()) "-" else "") + id
+}
+
+class GenresFilter : Filter.Group("Genre", genres) {
+ val param = "genre[]"
+
+ val combineMode: Boolean
+ get() = state.filter { !it.isIgnored() }.size > 1
+}
+
+private val genres: List
+ get() = listOf(
+ Genre("Action", "1"),
+ Genre("Adventure", "78"),
+ Genre("Avant Garde", "3"),
+ Genre("Boys Love", "4"),
+ Genre("Comedy", "5"),
+ Genre("Demons", "77"),
+ Genre("Drama", "6"),
+ Genre("Ecchi", "7"),
+ Genre("Fantasy", "79"),
+ Genre("Girls Love", "9"),
+ Genre("Gourmet", "10"),
+ Genre("Harem", "11"),
+ Genre("Horror", "530"),
+ Genre("Isekai", "13"),
+ Genre("Iyashikei", "531"),
+ Genre("Josei", "15"),
+ Genre("Kids", "532"),
+ Genre("Magic", "539"),
+ Genre("Mahou Shoujo", "533"),
+ Genre("Martial Arts", "534"),
+ Genre("Mecha", "19"),
+ Genre("Military", "535"),
+ Genre("Music", "21"),
+ Genre("Mystery", "22"),
+ Genre("Parody", "23"),
+ Genre("Psychological", "536"),
+ Genre("Reverse Harem", "25"),
+ Genre("Romance", "26"),
+ Genre("School", "73"),
+ Genre("Sci-Fi", "28"),
+ Genre("Seinen", "537"),
+ Genre("Shoujo", "30"),
+ Genre("Shounen", "31"),
+ Genre("Slice of Life", "538"),
+ Genre("Space", "33"),
+ Genre("Sports", "34"),
+ Genre("Super Power", "75"),
+ Genre("Supernatural", "76"),
+ Genre("Suspense", "37"),
+ Genre("Thriller", "38"),
+ Genre("Vampire", "39"),
+ )
+
+class StatusFilter : Group("Status", "status[]", statuses)
+
+private val statuses: List
+ get() = listOf(
+ Entry("Completed", "completed"),
+ Entry("Releasing", "releasing"),
+ Entry("On Hiatus", "on_hiatus"),
+ Entry("Discontinued", "discontinued"),
+ Entry("Not Yet Published", "info"),
+ )
+
+class YearFilter : Group("Year", "year[]", years)
+
+private val years: List
+ get() = listOf(
+ Entry("2023"),
+ Entry("2022"),
+ Entry("2021"),
+ Entry("2020"),
+ Entry("2019"),
+ Entry("2018"),
+ Entry("2017"),
+ Entry("2016"),
+ Entry("2015"),
+ Entry("2014"),
+ Entry("2013"),
+ Entry("2012"),
+ Entry("2011"),
+ Entry("2010"),
+ Entry("2009"),
+ Entry("2008"),
+ Entry("2007"),
+ Entry("2006"),
+ Entry("2005"),
+ Entry("2004"),
+ Entry("2003"),
+ Entry("2000s"),
+ Entry("1990s"),
+ Entry("1980s"),
+ Entry("1970s"),
+ Entry("1960s"),
+ Entry("1950s"),
+ Entry("1940s"),
+ )
+
+class ChapterCountFilter : Select("Chapter Count", "minchap", chapterCounts)
+
+private val chapterCounts
+ get() = mapOf(
+ "Any" to "",
+ "At least 1 chapter" to "1",
+ "At least 3 chapters" to "3",
+ "At least 5 chapters" to "5",
+ "At least 10 chapters" to "10",
+ "At least 20 chapters" to "20",
+ "At least 30 chapters" to "30",
+ "At least 50 chapters" to "50",
+ )
+
+class SortFilter : Select("Sort", "sort", orders)
+
+private val orders
+ get() = mapOf(
+ "Trending" to "trending",
+ "Recently updated" to "recently_updated",
+ "Recently added" to "recently_added",
+ "Release date" to "release_date",
+ "Name A-Z" to "title_az",
+ "Score" to "scores",
+ "MAL score" to "mal_scores",
+ "Most viewed" to "most_viewed",
+ "Most favourited" to "most_favourited",
+ )
diff --git a/multisrc/overrides/mangareader/mangafire/src/ImageInterceptor.kt b/multisrc/overrides/mangareader/mangafire/src/ImageInterceptor.kt
new file mode 100644
index 000000000..95c18c79f
--- /dev/null
+++ b/multisrc/overrides/mangareader/mangafire/src/ImageInterceptor.kt
@@ -0,0 +1,79 @@
+package eu.kanade.tachiyomi.extension.all.mangafire
+
+import android.graphics.Bitmap
+import android.graphics.BitmapFactory
+import android.graphics.Canvas
+import android.graphics.Rect
+import okhttp3.Interceptor
+import okhttp3.MediaType.Companion.toMediaType
+import okhttp3.Response
+import okhttp3.ResponseBody.Companion.toResponseBody
+import java.io.ByteArrayOutputStream
+import java.io.InputStream
+import kotlin.math.min
+
+object ImageInterceptor : Interceptor {
+
+ const val SCRAMBLED = "scrambled"
+ private const val PIECE_SIZE = 200
+ private const val MIN_SPLIT_COUNT = 5
+
+ override fun intercept(chain: Interceptor.Chain): Response {
+ val request = chain.request()
+ val response = chain.proceed(request)
+ val fragment = request.url.fragment ?: return response
+ if (SCRAMBLED !in fragment) return response
+ val offset = fragment.substringAfterLast('_').toInt()
+
+ val image = response.body.byteStream().use { descramble(it, offset) }
+ val body = image.toResponseBody("image/jpeg".toMediaType())
+ return response.newBuilder().body(body).build()
+ }
+
+ private fun descramble(image: InputStream, offset: Int): ByteArray {
+ // obfuscated code: https://mangafire.to/assets/t1/min/all.js
+ // it shuffles arrays of the image slices
+
+ val bitmap = BitmapFactory.decodeStream(image)
+ val width = bitmap.width
+ val height = bitmap.height
+
+ val result = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888)
+ val canvas = Canvas(result)
+
+ val pieceWidth = min(PIECE_SIZE, width.ceilDiv(MIN_SPLIT_COUNT))
+ val pieceHeight = min(PIECE_SIZE, height.ceilDiv(MIN_SPLIT_COUNT))
+ val xMax = width.ceilDiv(pieceWidth) - 1
+ val yMax = height.ceilDiv(pieceHeight) - 1
+
+ for (y in 0..yMax) {
+ for (x in 0..xMax) {
+ val xDst = pieceWidth * x
+ val yDst = pieceHeight * y
+ val w = min(pieceWidth, width - xDst)
+ val h = min(pieceHeight, height - yDst)
+
+ val xSrc = pieceWidth * when (x) {
+ xMax -> x // margin
+ else -> (xMax - x + offset) % xMax
+ }
+ val ySrc = pieceHeight * when (y) {
+ yMax -> y // margin
+ else -> (yMax - y + offset) % yMax
+ }
+
+ val srcRect = Rect(xSrc, ySrc, xSrc + w, ySrc + h)
+ val dstRect = Rect(xDst, yDst, xDst + w, yDst + h)
+
+ canvas.drawBitmap(bitmap, srcRect, dstRect, null)
+ }
+ }
+
+ val output = ByteArrayOutputStream()
+ result.compress(Bitmap.CompressFormat.JPEG, 90, output)
+ return output.toByteArray()
+ }
+
+ @Suppress("NOTHING_TO_INLINE")
+ private inline fun Int.ceilDiv(other: Int) = (this + (other - 1)) / other
+}
diff --git a/multisrc/overrides/mangareader/mangafire/src/MangaFire.kt b/multisrc/overrides/mangareader/mangafire/src/MangaFire.kt
new file mode 100644
index 000000000..8763111e1
--- /dev/null
+++ b/multisrc/overrides/mangareader/mangafire/src/MangaFire.kt
@@ -0,0 +1,231 @@
+package eu.kanade.tachiyomi.extension.all.mangafire
+
+import eu.kanade.tachiyomi.multisrc.mangareader.MangaReader
+import eu.kanade.tachiyomi.network.GET
+import eu.kanade.tachiyomi.source.model.Filter
+import eu.kanade.tachiyomi.source.model.FilterList
+import eu.kanade.tachiyomi.source.model.Page
+import eu.kanade.tachiyomi.source.model.SChapter
+import eu.kanade.tachiyomi.source.model.SManga
+import kotlinx.serialization.Serializable
+import kotlinx.serialization.decodeFromString
+import kotlinx.serialization.json.Json
+import kotlinx.serialization.json.JsonPrimitive
+import kotlinx.serialization.json.int
+import okhttp3.HttpUrl.Companion.toHttpUrl
+import okhttp3.Request
+import okhttp3.Response
+import org.jsoup.Jsoup
+import org.jsoup.nodes.Document
+import org.jsoup.nodes.Element
+import org.jsoup.select.Evaluator
+import uy.kohesive.injekt.injectLazy
+import java.text.SimpleDateFormat
+import java.util.Locale
+
+open class MangaFire(
+ override val lang: String,
+ private val langCode: String = lang,
+) : MangaReader() {
+ override val name = "MangaFire"
+
+ override val baseUrl = "https://mangafire.to"
+
+ private val json: Json by injectLazy()
+
+ override val client = network.cloudflareClient.newBuilder()
+ .addInterceptor(ImageInterceptor)
+ .build()
+
+ override fun latestUpdatesRequest(page: Int) =
+ GET("$baseUrl/filter?sort=recently_updated&language[]=$langCode&page=$page", headers)
+
+ override fun popularMangaRequest(page: Int) =
+ GET("$baseUrl/filter?sort=most_viewed&language[]=$langCode&page=$page", headers)
+
+ override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request {
+ val urlBuilder = baseUrl.toHttpUrl().newBuilder()
+ if (query.isNotBlank()) {
+ urlBuilder.addPathSegment("filter").apply {
+ addQueryParameter("keyword", query)
+ addQueryParameter("page", page.toString())
+ }
+ } else {
+ urlBuilder.addPathSegment("filter").apply {
+ addQueryParameter("language[]", langCode)
+ addQueryParameter("page", page.toString())
+ filters.ifEmpty(::getFilterList).forEach { filter ->
+ when (filter) {
+ is Group -> {
+ filter.state.forEach {
+ if (it.state) {
+ addQueryParameter(filter.param, it.id)
+ }
+ }
+ }
+ is Select -> {
+ addQueryParameter(filter.param, filter.selection)
+ }
+ is GenresFilter -> {
+ filter.state.forEach {
+ if (it.state != 0) {
+ addQueryParameter(filter.param, it.selection)
+ }
+ }
+ if (filter.combineMode) {
+ addQueryParameter("genre_mode", "and")
+ }
+ }
+ else -> {}
+ }
+ }
+ }
+ }
+ return GET(urlBuilder.build(), headers)
+ }
+
+ override fun searchMangaNextPageSelector() = ".page-item.active + .page-item .page-link"
+
+ override fun searchMangaSelector() = ".original.card-lg .unit .inner"
+
+ override fun searchMangaFromElement(element: Element) =
+ SManga.create().apply {
+ element.selectFirst(".info > a")!!.let {
+ setUrlWithoutDomain(it.attr("href"))
+ title = it.ownText()
+ }
+ element.selectFirst(Evaluator.Tag("img"))!!.let {
+ thumbnail_url = it.attr("src")
+ }
+ }
+
+ override fun mangaDetailsParse(document: Document) = SManga.create().apply {
+ val root = document.selectFirst(".info")!!
+ val mangaTitle = root.child(1).ownText()
+ title = mangaTitle
+ description = document.run {
+ val description = selectFirst(Evaluator.Class("description"))!!.ownText()
+ when (val altTitle = root.child(2).ownText()) {
+ "", mangaTitle -> description
+ else -> "$description\n\nAlternative Title: $altTitle"
+ }
+ }
+ thumbnail_url = document.selectFirst(".poster")!!
+ .selectFirst("img")!!.attr("src")
+ status = when (root.child(0).ownText()) {
+ "Completed" -> SManga.COMPLETED
+ "Releasing" -> SManga.ONGOING
+ "On_hiatus" -> SManga.ON_HIATUS
+ "Discontinued" -> SManga.CANCELLED
+ else -> SManga.UNKNOWN
+ }
+ with(document.selectFirst(Evaluator.Class("meta"))!!) {
+ author = selectFirst("span:contains(Author:) + span")?.text()
+ val type = selectFirst("span:contains(Type:) + span")?.text()
+ val genres = selectFirst("span:contains(Genres:) + span")?.text()
+ genre = listOfNotNull(type, genres).joinToString()
+ }
+ }
+
+ override val chapterType get() = "chapter"
+ override val volumeType get() = "volume"
+
+ override fun chapterListRequest(mangaUrl: String, type: String): Request {
+ val id = mangaUrl.substringAfterLast('.')
+ return GET("$baseUrl/ajax/manga/$id/$type/$langCode", headers)
+ }
+
+ override fun parseChapterElements(response: Response, isVolume: Boolean): List {
+ val result = json.decodeFromString>(response.body.string()).result
+ val document = Jsoup.parse(result)
+
+ val elements = document.select("ul li")
+ if (elements.size > 0) {
+ val linkToFirstChapter = elements[0].selectFirst(Evaluator.Tag("a"))!!.attr("href")
+ val mangaId = linkToFirstChapter.toString().substringAfter('.').substringBefore('/')
+
+ val request = GET("$baseUrl/ajax/read/$mangaId/chapter/$langCode", headers)
+ val response = client.newCall(request).execute()
+ val res = json.decodeFromString>(response.body.string()).result.html
+ val chapterInfoDocument = Jsoup.parse(res)
+ val chapters = chapterInfoDocument.select("ul li")
+ for ((i, it) in elements.withIndex()) {
+ it.attr("data-id", chapters[i].select("a").attr("data-id"))
+ }
+ }
+ return elements.toList()
+ }
+
+ @Serializable
+ class ChapterIdsDto(
+ val html: String,
+ val title_format: String,
+ )
+
+ override fun updateChapterList(manga: SManga, chapters: List) {
+ val request = chapterListRequest(manga.url, chapterType)
+ val response = client.newCall(request).execute()
+ val result = json.decodeFromString>(response.body.string()).result
+ val document = Jsoup.parse(result)
+
+ val elements = document.selectFirst(".scroll-sm")!!.children()
+ val chapterCount = chapters.size
+ if (elements.size != chapterCount) throw Exception("Chapter count doesn't match. Try updating again.")
+ val dateFormat = SimpleDateFormat("MMM dd, yyyy", Locale.US)
+ for (i in 0 until chapterCount) {
+ val chapter = chapters[i]
+ val element = elements[i]
+ val number = element.attr("data-number").toFloatOrNull() ?: -1f
+ if (chapter.chapter_number != number) throw Exception("Chapter number doesn't match. Try updating again.")
+ val date = element.select(Evaluator.Tag("span"))[1].ownText()
+ chapter.date_upload = try {
+ dateFormat.parse(date)!!.time
+ } catch (_: Throwable) {
+ 0
+ }
+ }
+ }
+
+ override fun pageListRequest(chapter: SChapter): Request {
+ val typeAndId = chapter.url.substringAfterLast('#')
+ return GET("$baseUrl/ajax/read/$typeAndId", headers)
+ }
+
+ override fun pageListParse(response: Response): List {
+ val result = json.decodeFromString>(response.body.string()).result
+
+ return result.pages.mapIndexed { index, image ->
+ val url = image.url
+ val offset = image.offset
+ val imageUrl = if (offset > 0) "$url#${ImageInterceptor.SCRAMBLED}_$offset" else url
+
+ Page(index, imageUrl = imageUrl)
+ }
+ }
+
+ @Serializable
+ class PageListDto(private val images: List>) {
+ val pages get() = images.map {
+ Image(it[0].content, it[2].int)
+ }
+ }
+ class Image(val url: String, val offset: Int)
+
+ @Serializable
+ class ResponseDto(
+ val result: T,
+ val status: Int,
+ )
+
+ override fun getFilterList() =
+ FilterList(
+ Filter.Header("NOTE: Ignored if using text search!"),
+ Filter.Separator(),
+ TypeFilter(),
+ GenresFilter(),
+ StatusFilter(),
+ YearFilter(),
+ ChapterCountFilter(),
+ SortFilter(),
+ )
+}
diff --git a/multisrc/overrides/mangareader/mangafire/src/MangaFireFactory.kt b/multisrc/overrides/mangareader/mangafire/src/MangaFireFactory.kt
new file mode 100644
index 000000000..3fbc88e6d
--- /dev/null
+++ b/multisrc/overrides/mangareader/mangafire/src/MangaFireFactory.kt
@@ -0,0 +1,15 @@
+package eu.kanade.tachiyomi.extension.all.mangafire
+
+import eu.kanade.tachiyomi.source.SourceFactory
+
+class MangaFireFactory : SourceFactory {
+ override fun createSources() = listOf(
+ MangaFire("en"),
+ MangaFire("es"),
+ MangaFire("es-419", "es-la"),
+ MangaFire("fr"),
+ MangaFire("ja"),
+ MangaFire("pt"),
+ MangaFire("pt-BR", "pt-br"),
+ )
+}
diff --git a/multisrc/overrides/mangareader/mangareaderto/CHANGELOG.md b/multisrc/overrides/mangareader/mangareaderto/CHANGELOG.md
new file mode 100644
index 000000000..f4fce847c
--- /dev/null
+++ b/multisrc/overrides/mangareader/mangareaderto/CHANGELOG.md
@@ -0,0 +1,36 @@
+## 1.3.4
+
+- Refactor and make multisrc
+- Chapter page list now requires only 1 network request (those fetched in old versions still need 2)
+
+## 1.3.3
+
+- Appended `.to` to extension name
+- Replaced dependencies
+ - `android.net.Uri` → `okhttp3.HttpUrl`
+ - `org.json` → `kotlinx.serialization`
+- Refactored some code to separate files
+- Image quality preference: added prompt to summary and made it take effect without restart, fixes [#12504](https://github.com/tachiyomiorg/tachiyomi-extensions/issues/12504)
+- Added preference to show additional entries in volumes in list results and added code to support volumes, fixes [#12573](https://github.com/tachiyomiorg/tachiyomi-extensions/issues/12573)
+- Improved parsing
+ - Added code to parse authors and artists
+ - Improved chapter list parsing
+ - Other improvements
+ - Performance boosts in selectors
+- Added French, Korean and Chinese languages
+- Corrected filter note type (Text → Header)
+- Rewrote image descrambler
+ - Used fragment in URL instead of appending error-prone query parameter, hopefully fixes [#12722](https://github.com/tachiyomiorg/tachiyomi-extensions/issues/12722)
+ - Made interceptor singleton to be shared across languages
+ - Simplified code logic to make it a lot more readable, thanks to Vetle in [#9325 (comment)](https://github.com/tachiyomiorg/tachiyomi-extensions/pull/9325#issuecomment-1100950110) for code reference
+ - Used `javax.crypto.Cipher` for ARC4
+ - Memoize permutation result to reduce calculation
+ - Save as compressed JPG instead of PNG to avoid size bloat (original image is already compressed)
+
+## 1.2.2
+
+- Fixes filters causing manga list to fail to load.
+
+## 1.2.1
+
+- Builds on original PR and unscrambles the images.
diff --git a/multisrc/overrides/mangareader/mangareaderto/res/mipmap-hdpi/ic_launcher.png b/multisrc/overrides/mangareader/mangareaderto/res/mipmap-hdpi/ic_launcher.png
new file mode 100644
index 000000000..2a3b14c95
Binary files /dev/null and b/multisrc/overrides/mangareader/mangareaderto/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/mangareader/mangareaderto/res/mipmap-mdpi/ic_launcher.png b/multisrc/overrides/mangareader/mangareaderto/res/mipmap-mdpi/ic_launcher.png
new file mode 100644
index 000000000..037abc81f
Binary files /dev/null and b/multisrc/overrides/mangareader/mangareaderto/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/mangareader/mangareaderto/res/mipmap-xhdpi/ic_launcher.png b/multisrc/overrides/mangareader/mangareaderto/res/mipmap-xhdpi/ic_launcher.png
new file mode 100644
index 000000000..0d211ecc3
Binary files /dev/null and b/multisrc/overrides/mangareader/mangareaderto/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/mangareader/mangareaderto/res/mipmap-xxhdpi/ic_launcher.png b/multisrc/overrides/mangareader/mangareaderto/res/mipmap-xxhdpi/ic_launcher.png
new file mode 100644
index 000000000..fa38f2740
Binary files /dev/null and b/multisrc/overrides/mangareader/mangareaderto/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/mangareader/mangareaderto/res/mipmap-xxxhdpi/ic_launcher.png b/multisrc/overrides/mangareader/mangareaderto/res/mipmap-xxxhdpi/ic_launcher.png
new file mode 100644
index 000000000..f785d812d
Binary files /dev/null and b/multisrc/overrides/mangareader/mangareaderto/res/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/mangareader/mangareaderto/src/Filters.kt b/multisrc/overrides/mangareader/mangareaderto/src/Filters.kt
new file mode 100644
index 000000000..002e93db0
--- /dev/null
+++ b/multisrc/overrides/mangareader/mangareaderto/src/Filters.kt
@@ -0,0 +1,247 @@
+package eu.kanade.tachiyomi.extension.all.mangareaderto
+
+import eu.kanade.tachiyomi.source.model.Filter
+import java.util.Calendar
+
+object Note : Filter.Header("NOTE: Ignored if using text search!")
+
+sealed class Select(
+ name: String,
+ val param: String,
+ values: Array,
+) : Filter.Select(name, values) {
+ open val selection: String
+ get() = if (state == 0) "" else state.toString()
+}
+
+class TypeFilter(
+ values: Array = types,
+) : Select("Type", "type", values) {
+ companion object {
+ private val types: Array
+ get() = arrayOf(
+ "All",
+ "Manga",
+ "One-Shot",
+ "Doujinshi",
+ "Light Novel",
+ "Manhwa",
+ "Manhua",
+ "Comic",
+ )
+ }
+}
+
+class StatusFilter(
+ values: Array = statuses,
+) : Select("Status", "status", values) {
+ companion object {
+ private val statuses: Array
+ get() = arrayOf(
+ "All",
+ "Finished",
+ "Publishing",
+ "On Hiatus",
+ "Discontinued",
+ "Not yet published",
+ )
+ }
+}
+
+class RatingFilter(
+ values: Array = ratings,
+) : Select("Rating Type", "rating_type", values) {
+ companion object {
+ private val ratings: Array
+ get() = arrayOf(
+ "All",
+ "G - All Ages",
+ "PG - Children",
+ "PG-13 - Teens 13 or older",
+ "R - 17+ (violence & profanity)",
+ "R+ - Mild Nudity",
+ "Rx - Hentai",
+ )
+ }
+}
+
+class ScoreFilter(
+ values: Array = scores,
+) : Select("Score", "score", values) {
+ companion object {
+ private val scores: Array
+ get() = arrayOf(
+ "All",
+ "(1) Appalling",
+ "(2) Horrible",
+ "(3) Very Bad",
+ "(4) Bad",
+ "(5) Average",
+ "(6) Fine",
+ "(7) Good",
+ "(8) Very Good",
+ "(9) Great",
+ "(10) Masterpiece",
+ )
+ }
+}
+
+sealed class DateSelect(
+ name: String,
+ param: String,
+ values: Array,
+) : Select(name, param, values) {
+ override val selection: String
+ get() = if (state == 0) "" else values[state]
+}
+
+class YearFilter(
+ param: String,
+ values: Array = years,
+) : DateSelect("Year", param, values) {
+ companion object {
+ private val nextYear by lazy {
+ Calendar.getInstance()[Calendar.YEAR] + 1
+ }
+
+ private val years: Array
+ get() = Array(nextYear - 1916) {
+ if (it == 0) "Any" else (nextYear - it).toString()
+ }
+ }
+}
+
+class MonthFilter(
+ param: String,
+ values: Array = months,
+) : DateSelect("Month", param, values) {
+ companion object {
+ private val months: Array
+ get() = Array(13) {
+ if (it == 0) "Any" else "%02d".format(it)
+ }
+ }
+}
+
+class DayFilter(
+ param: String,
+ values: Array = days,
+) : DateSelect("Day", param, values) {
+ companion object {
+ private val days: Array
+ get() = Array(32) {
+ if (it == 0) "Any" else "%02d".format(it)
+ }
+ }
+}
+
+sealed class DateFilter(
+ type: String,
+ values: List,
+) : Filter.Group("$type Date", values)
+
+class StartDateFilter(
+ values: List = parts,
+) : DateFilter("Start", values) {
+ companion object {
+ private val parts: List
+ get() = listOf(
+ YearFilter("sy"),
+ MonthFilter("sm"),
+ DayFilter("sd"),
+ )
+ }
+}
+
+class EndDateFilter(
+ values: List = parts,
+) : DateFilter("End", values) {
+ companion object {
+ private val parts: List
+ get() = listOf(
+ YearFilter("ey"),
+ MonthFilter("em"),
+ DayFilter("ed"),
+ )
+ }
+}
+
+class SortFilter(
+ values: Array = orders.keys.toTypedArray(),
+) : Select("Sort", "sort", values) {
+ override val selection: String
+ get() = orders[values[state]]!!
+
+ companion object {
+ private val orders = mapOf(
+ "Default" to "default",
+ "Latest Updated" to "latest-updated",
+ "Score" to "score",
+ "Name A-Z" to "name-az",
+ "Release Date" to "release-date",
+ "Most Viewed" to "most-viewed",
+ )
+ }
+}
+
+class Genre(name: String, val id: String) : Filter.CheckBox(name)
+
+class GenresFilter(
+ values: List = genres,
+) : Filter.Group("Genres", values) {
+ val param = "genres"
+
+ val selection: String
+ get() = state.filter { it.state }.joinToString(",") { it.id }
+
+ companion object {
+ private val genres: List