some new multisrc sources (#17539)
* HentaiXDickgirl * OPSCANS * Grabber zone * Shiba Manga * Galaxy Manga * Lint my beloved * I should run the generator again after copying changes from generated-src * PotatoManga * Beasts Scans * reorder and change lang to en for OPSCANS * Shiba Manga: enable genre fetching * Vex Manga * MangaLeks * Comic Arab * Comic Arab: fix date format * Area Manga * Manga Rose * Falcon Manga * BirdToon * requested changes Co-authored-by: Vetle Ledaal <13540478+vetleledaal@users.noreply.github.com> --------- Co-authored-by: Vetle Ledaal <13540478+vetleledaal@users.noreply.github.com> Co-authored-by: arkon <arkon@users.noreply.github.com>
| After Width: | Height: | Size: 4.3 KiB | 
| After Width: | Height: | Size: 2.4 KiB | 
| After Width: | Height: | Size: 5.9 KiB | 
| After Width: | Height: | Size: 11 KiB | 
| After Width: | Height: | Size: 16 KiB | 
							
								
								
									
										
											BIN
										
									
								
								multisrc/overrides/madara/birdtoon/res/web_hi_res_512.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 89 KiB | 
							
								
								
									
										15
									
								
								multisrc/overrides/madara/birdtoon/src/BirdToon.kt
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @ -0,0 +1,15 @@ | ||||
| package eu.kanade.tachiyomi.extension.id.birdtoon | ||||
| 
 | ||||
| import eu.kanade.tachiyomi.multisrc.madara.Madara | ||||
| 
 | ||||
| class BirdToon : Madara("BirdToon", "https://birdtoon.net", "id") { | ||||
|     override val mangaSubString = "komik" | ||||
| 
 | ||||
|     override fun searchPage(page: Int): String { | ||||
|         return if (page > 1) { | ||||
|             "page/$page/" | ||||
|         } else { | ||||
|             "" | ||||
|         } | ||||
|     } | ||||
| } | ||||
| After Width: | Height: | Size: 8.0 KiB | 
| After Width: | Height: | Size: 3.9 KiB | 
| After Width: | Height: | Size: 12 KiB | 
| After Width: | Height: | Size: 24 KiB | 
| After Width: | Height: | Size: 37 KiB | 
							
								
								
									
										
											BIN
										
									
								
								multisrc/overrides/madara/comicarab/res/web_hi_res_512.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 259 KiB | 
							
								
								
									
										20
									
								
								multisrc/overrides/madara/comicarab/src/ComicArab.kt
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @ -0,0 +1,20 @@ | ||||
| package eu.kanade.tachiyomi.extension.ar.comicarab | ||||
| 
 | ||||
| import eu.kanade.tachiyomi.multisrc.madara.Madara | ||||
| import java.text.SimpleDateFormat | ||||
| import java.util.Locale | ||||
| 
 | ||||
| class ComicArab : Madara( | ||||
|     "كوميك العرب", | ||||
|     "https://comicarab.com", | ||||
|     "ar", | ||||
|     dateFormat = SimpleDateFormat("dd MMMM، yyyy", Locale("ar")), | ||||
| ) { | ||||
|     override fun searchPage(page: Int): String { | ||||
|         return if (page > 1) { | ||||
|             "page/$page/" | ||||
|         } else { | ||||
|             "" | ||||
|         } | ||||
|     } | ||||
| } | ||||
| After Width: | Height: | Size: 3.1 KiB | 
| After Width: | Height: | Size: 1.8 KiB | 
| After Width: | Height: | Size: 4.2 KiB | 
| After Width: | Height: | Size: 7.3 KiB | 
| After Width: | Height: | Size: 11 KiB | 
							
								
								
									
										
											BIN
										
									
								
								multisrc/overrides/madara/falconmanga/res/web_hi_res_512.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 48 KiB | 
							
								
								
									
										22
									
								
								multisrc/overrides/madara/falconmanga/src/FalconManga.kt
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @ -0,0 +1,22 @@ | ||||
| package eu.kanade.tachiyomi.extension.ar.falconmanga | ||||
| 
 | ||||
| import eu.kanade.tachiyomi.multisrc.madara.Madara | ||||
| import java.text.SimpleDateFormat | ||||
| import java.util.Locale | ||||
| 
 | ||||
| class FalconManga : Madara( | ||||
|     "فالكون مانجا", | ||||
|     "https://falconmanga.com", | ||||
|     "ar", | ||||
|     dateFormat = SimpleDateFormat("dd MMMM، yyyy", Locale("ar")), | ||||
| ) { | ||||
|     override val useNewChapterEndpoint = true | ||||
| 
 | ||||
|     override fun searchPage(page: Int): String { | ||||
|         return if (page > 1) { | ||||
|             "page/$page/" | ||||
|         } else { | ||||
|             "" | ||||
|         } | ||||
|     } | ||||
| } | ||||
| After Width: | Height: | Size: 5.8 KiB | 
| After Width: | Height: | Size: 3.0 KiB | 
| After Width: | Height: | Size: 8.8 KiB | 
| After Width: | Height: | Size: 17 KiB | 
| After Width: | Height: | Size: 27 KiB | 
							
								
								
									
										
											BIN
										
									
								
								multisrc/overrides/madara/grabberzone/res/web_hi_res_512.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 174 KiB | 
							
								
								
									
										30
									
								
								multisrc/overrides/madara/grabberzone/src/GrabberZone.kt
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @ -0,0 +1,30 @@ | ||||
| package eu.kanade.tachiyomi.extension.all.grabberzone | ||||
| 
 | ||||
| import eu.kanade.tachiyomi.multisrc.madara.Madara | ||||
| import eu.kanade.tachiyomi.source.model.SChapter | ||||
| import org.jsoup.nodes.Element | ||||
| import java.text.SimpleDateFormat | ||||
| import java.util.Locale | ||||
| 
 | ||||
| class GrabberZone : Madara( | ||||
|     "Grabber Zone", | ||||
|     "https://grabber.zone", | ||||
|     "all", | ||||
|     SimpleDateFormat("dd.MM.yyyy", Locale.ENGLISH), | ||||
| ) { | ||||
|     override val mangaSubString = "comics" | ||||
| 
 | ||||
|     override fun searchPage(page: Int): String { | ||||
|         return if (page > 1) { | ||||
|             "page/$page/" | ||||
|         } else { | ||||
|             "" | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     override fun chapterFromElement(element: Element): SChapter { | ||||
|         return super.chapterFromElement(element).apply { | ||||
|             name = element.selectFirst("a + a")!!.text() | ||||
|         } | ||||
|     } | ||||
| } | ||||
| After Width: | Height: | Size: 10 KiB | 
| After Width: | Height: | Size: 4.8 KiB | 
| After Width: | Height: | Size: 17 KiB | 
| After Width: | Height: | Size: 36 KiB | 
| After Width: | Height: | Size: 61 KiB | 
							
								
								
									
										
											BIN
										
									
								
								multisrc/overrides/madara/hentaixdickgirl/res/web_hi_res_512.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 449 KiB | 
| @ -0,0 +1,23 @@ | ||||
| package eu.kanade.tachiyomi.extension.en.hentaixdickgirl | ||||
| 
 | ||||
| import eu.kanade.tachiyomi.multisrc.madara.Madara | ||||
| import eu.kanade.tachiyomi.source.model.SManga | ||||
| import eu.kanade.tachiyomi.source.model.UpdateStrategy | ||||
| import org.jsoup.nodes.Document | ||||
| 
 | ||||
| class HentaiXDickgirl : Madara("HentaiXDickgirl", "https://hentaixdickgirl.com", "en") { | ||||
| 
 | ||||
|     override fun searchPage(page: Int): String { | ||||
|         return if (page > 1) { | ||||
|             "page/$page/" | ||||
|         } else { | ||||
|             "" | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     override fun mangaDetailsParse(document: Document): SManga { | ||||
|         return super.mangaDetailsParse(document).apply { | ||||
|             update_strategy = UpdateStrategy.ONLY_FETCH_ONCE | ||||
|         } | ||||
|     } | ||||
| } | ||||
| After Width: | Height: | Size: 5.9 KiB | 
| After Width: | Height: | Size: 3.2 KiB | 
| After Width: | Height: | Size: 8.5 KiB | 
| After Width: | Height: | Size: 16 KiB | 
| After Width: | Height: | Size: 24 KiB | 
							
								
								
									
										
											BIN
										
									
								
								multisrc/overrides/madara/mangaleks/res/web_hi_res_512.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 139 KiB | 
							
								
								
									
										20
									
								
								multisrc/overrides/madara/mangaleks/src/MangaLeks.kt
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @ -0,0 +1,20 @@ | ||||
| package eu.kanade.tachiyomi.extension.ar.mangaleks | ||||
| 
 | ||||
| import eu.kanade.tachiyomi.multisrc.madara.Madara | ||||
| import java.text.SimpleDateFormat | ||||
| import java.util.Locale | ||||
| 
 | ||||
| class MangaLeks : Madara( | ||||
|     "مانجا ليكس", | ||||
|     "https://mangaleks.com", | ||||
|     "ar", | ||||
|     SimpleDateFormat("dd/MM/yyyy", Locale.ENGLISH), | ||||
| ) { | ||||
|     override fun searchPage(page: Int): String { | ||||
|         return if (page > 1) { | ||||
|             "page/$page/" | ||||
|         } else { | ||||
|             "" | ||||
|         } | ||||
|     } | ||||
| } | ||||
| After Width: | Height: | Size: 3.8 KiB | 
| After Width: | Height: | Size: 2.0 KiB | 
| After Width: | Height: | Size: 5.3 KiB | 
| After Width: | Height: | Size: 9.5 KiB | 
| After Width: | Height: | Size: 14 KiB | 
							
								
								
									
										
											BIN
										
									
								
								multisrc/overrides/madara/mangarose/res/web_hi_res_512.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 71 KiB | 
							
								
								
									
										20
									
								
								multisrc/overrides/madara/mangarose/src/MangaRose.kt
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @ -0,0 +1,20 @@ | ||||
| package eu.kanade.tachiyomi.extension.ar.mangarose | ||||
| 
 | ||||
| import eu.kanade.tachiyomi.multisrc.madara.Madara | ||||
| import java.text.SimpleDateFormat | ||||
| import java.util.Locale | ||||
| 
 | ||||
| class MangaRose : Madara( | ||||
|     "Manga Rose", | ||||
|     "https://mangarose.net", | ||||
|     "ar", | ||||
|     dateFormat = SimpleDateFormat("MMMM dd, yyyy", Locale("ar")), | ||||
| ) { | ||||
|     override fun searchPage(page: Int): String { | ||||
|         return if (page > 1) { | ||||
|             "page/$page/" | ||||
|         } else { | ||||
|             "" | ||||
|         } | ||||
|     } | ||||
| } | ||||
| After Width: | Height: | Size: 5.2 KiB | 
| After Width: | Height: | Size: 2.8 KiB | 
| After Width: | Height: | Size: 6.4 KiB | 
| After Width: | Height: | Size: 11 KiB | 
| After Width: | Height: | Size: 15 KiB | 
							
								
								
									
										
											BIN
										
									
								
								multisrc/overrides/madara/shibamanga/res/web_hi_res_512.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 67 KiB | 
							
								
								
									
										23
									
								
								multisrc/overrides/madara/shibamanga/src/ShibaManga.kt
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @ -0,0 +1,23 @@ | ||||
| package eu.kanade.tachiyomi.extension.en.shibamanga | ||||
| 
 | ||||
| import eu.kanade.tachiyomi.multisrc.madara.Madara | ||||
| import java.text.SimpleDateFormat | ||||
| import java.util.Locale | ||||
| 
 | ||||
| class ShibaManga : Madara( | ||||
|     "Shiba Manga", | ||||
|     "https://shibamanga.com", | ||||
|     "en", | ||||
|     SimpleDateFormat("MM/dd/yyyy", Locale.US), | ||||
| ) { | ||||
|     override val filterNonMangaItems = false | ||||
|     override val useNewChapterEndpoint = true | ||||
| 
 | ||||
|     override fun searchPage(page: Int): String { | ||||
|         return if (page > 1) { | ||||
|             "page/$page/" | ||||
|         } else { | ||||
|             "" | ||||
|         } | ||||
|     } | ||||
| } | ||||
| After Width: | Height: | Size: 5.7 KiB | 
| After Width: | Height: | Size: 2.9 KiB | 
| After Width: | Height: | Size: 7.6 KiB | 
| After Width: | Height: | Size: 14 KiB | 
| After Width: | Height: | Size: 18 KiB | 
| After Width: | Height: | Size: 80 KiB | 
							
								
								
									
										30
									
								
								multisrc/overrides/mangathemesia/areamanga/src/AreaManga.kt
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @ -0,0 +1,30 @@ | ||||
| package eu.kanade.tachiyomi.extension.ar.areamanga | ||||
| 
 | ||||
| import eu.kanade.tachiyomi.multisrc.mangathemesia.MangaThemesia | ||||
| import eu.kanade.tachiyomi.source.model.SManga | ||||
| import java.text.SimpleDateFormat | ||||
| import java.util.Locale | ||||
| 
 | ||||
| class AreaManga : MangaThemesia( | ||||
|     "أريا مانجا", | ||||
|     "https://www.areascans.net", | ||||
|     "ar", | ||||
|     dateFormat = SimpleDateFormat("MMMM dd, yyyy", Locale("ar")), | ||||
| ) { | ||||
|     override val seriesArtistSelector = | ||||
|         ".tsinfo .imptdt:contains(الرسام) i, ${super.seriesArtistSelector}" | ||||
|     override val seriesAuthorSelector = | ||||
|         ".tsinfo .imptdt:contains(المؤلف) i, ${super.seriesAuthorSelector}" | ||||
|     override val seriesStatusSelector = | ||||
|         ".tsinfo .imptdt:contains(الحالة) i, ${super.seriesStatusSelector}" | ||||
|     override val seriesTypeSelector = | ||||
|         ".tsinfo .imptdt:contains(النوع) i, ${super.seriesTypeSelector}" | ||||
| 
 | ||||
|     override fun String?.parseStatus() = when { | ||||
|         this == null -> SManga.UNKNOWN | ||||
|         this.contains("مستمر", ignoreCase = true) -> SManga.ONGOING | ||||
|         this.contains("مكتمل", ignoreCase = true) -> SManga.COMPLETED | ||||
|         this.contains("متوقف", ignoreCase = true) -> SManga.ON_HIATUS | ||||
|         else -> SManga.UNKNOWN | ||||
|     } | ||||
| } | ||||
| After Width: | Height: | Size: 6.8 KiB | 
| After Width: | Height: | Size: 3.5 KiB | 
| After Width: | Height: | Size: 10 KiB | 
| After Width: | Height: | Size: 20 KiB | 
| After Width: | Height: | Size: 30 KiB | 
| After Width: | Height: | Size: 122 KiB | 
| @ -0,0 +1,30 @@ | ||||
| package eu.kanade.tachiyomi.extension.ar.beastscans | ||||
| 
 | ||||
| import eu.kanade.tachiyomi.multisrc.mangathemesia.MangaThemesia | ||||
| import eu.kanade.tachiyomi.source.model.SManga | ||||
| import java.text.SimpleDateFormat | ||||
| import java.util.Locale | ||||
| 
 | ||||
| class BeastScans : MangaThemesia( | ||||
|     "Beast Scans", | ||||
|     "https://beast-scans.com", | ||||
|     "ar", | ||||
|     dateFormat = SimpleDateFormat("MMMM dd, yyyy", Locale("ar")), | ||||
| ) { | ||||
|     override val seriesArtistSelector = | ||||
|         ".tsinfo .imptdt:contains(الرسام) i, ${super.seriesArtistSelector}" | ||||
|     override val seriesAuthorSelector = | ||||
|         ".tsinfo .imptdt:contains(المؤلف) i, ${super.seriesAuthorSelector}" | ||||
|     override val seriesStatusSelector = | ||||
|         ".tsinfo .imptdt:contains(الحالة) i, ${super.seriesStatusSelector}" | ||||
|     override val seriesTypeSelector = | ||||
|         ".tsinfo .imptdt:contains(النوع) i, ${super.seriesTypeSelector}" | ||||
| 
 | ||||
|     override fun String?.parseStatus() = when { | ||||
|         this == null -> SManga.UNKNOWN | ||||
|         this.contains("مستمر", ignoreCase = true) -> SManga.ONGOING | ||||
|         this.contains("مكتمل", ignoreCase = true) -> SManga.COMPLETED | ||||
|         this.contains("متوقف", ignoreCase = true) -> SManga.ON_HIATUS | ||||
|         else -> SManga.UNKNOWN | ||||
|     } | ||||
| } | ||||
| After Width: | Height: | Size: 6.0 KiB | 
| After Width: | Height: | Size: 3.1 KiB | 
| After Width: | Height: | Size: 8.3 KiB | 
| After Width: | Height: | Size: 16 KiB | 
| After Width: | Height: | Size: 22 KiB | 
| After Width: | Height: | Size: 120 KiB | 
| @ -0,0 +1,18 @@ | ||||
| package eu.kanade.tachiyomi.extension.ar.galaxymanga | ||||
| 
 | ||||
| import eu.kanade.tachiyomi.multisrc.mangathemesia.MangaThemesia | ||||
| import java.text.SimpleDateFormat | ||||
| import java.util.Locale | ||||
| 
 | ||||
| class GalaxyManga : MangaThemesia( | ||||
|     "جالاكسي مانجا", | ||||
|     "https://galaxymanga.org", | ||||
|     "ar", | ||||
|     dateFormat = SimpleDateFormat("MMMM dd, yyyy", Locale("ar")), | ||||
| ) { | ||||
|     override val seriesArtistSelector = ".infotable tr:contains(الرسام) td:last-child, ${super.seriesArtistSelector}" | ||||
|     override val seriesAuthorSelector = ".infotable tr:contains(المؤلف) td:last-child, ${super.seriesAuthorSelector}" | ||||
|     override val seriesStatusSelector = ".infotable tr:contains(الحالة) td:last-child, ${super.seriesStatusSelector}" | ||||
|     override val seriesTypeSelector = ".infotable tr:contains(النوع) td:last-child, ${super.seriesTypeSelector}" | ||||
|     override val seriesAltNameSelector = ".infotable tr:contains(الأسماء الثانوية) td:last-child, ${super.seriesAltNameSelector}" | ||||
| } | ||||
| After Width: | Height: | Size: 2.4 KiB | 
| After Width: | Height: | Size: 1.4 KiB | 
| After Width: | Height: | Size: 3.1 KiB | 
| After Width: | Height: | Size: 5.4 KiB | 
| After Width: | Height: | Size: 7.3 KiB | 
							
								
								
									
										
											BIN
										
									
								
								multisrc/overrides/mangathemesia/opscans/res/web_hi_res_512.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 25 KiB | 
| After Width: | Height: | Size: 6.6 KiB | 
| After Width: | Height: | Size: 3.4 KiB | 
| After Width: | Height: | Size: 9.9 KiB | 
| After Width: | Height: | Size: 20 KiB | 
| After Width: | Height: | Size: 31 KiB | 
| After Width: | Height: | Size: 221 KiB | 
| @ -0,0 +1,23 @@ | ||||
| package eu.kanade.tachiyomi.extension.ar.potatomanga | ||||
| 
 | ||||
| import eu.kanade.tachiyomi.multisrc.mangathemesia.MangaThemesia | ||||
| import java.text.SimpleDateFormat | ||||
| import java.util.Locale | ||||
| 
 | ||||
| class PotatoManga : MangaThemesia( | ||||
|     "PotatoManga", | ||||
|     "https://potatomanga.xyz", | ||||
|     "ar", | ||||
|     dateFormat = SimpleDateFormat("MMMM dd, yyyy", Locale("ar")), | ||||
| ) { | ||||
|     override val seriesArtistSelector = | ||||
|         ".infotable tr:contains(الرسام) td:last-child, ${super.seriesArtistSelector}" | ||||
|     override val seriesAuthorSelector = | ||||
|         ".infotable tr:contains(المؤلف) td:last-child, ${super.seriesAuthorSelector}" | ||||
|     override val seriesStatusSelector = | ||||
|         ".infotable tr:contains(الحالة) td:last-child, ${super.seriesStatusSelector}" | ||||
|     override val seriesTypeSelector = | ||||
|         ".infotable tr:contains(النوع) td:last-child, ${super.seriesTypeSelector}" | ||||
|     override val seriesAltNameSelector = | ||||
|         ".infotable tr:contains(الأسماء الثانوية) td:last-child, ${super.seriesAltNameSelector}" | ||||
| } | ||||
| After Width: | Height: | Size: 5.3 KiB | 
| After Width: | Height: | Size: 2.7 KiB | 
| After Width: | Height: | Size: 7.9 KiB | 
| After Width: | Height: | Size: 16 KiB | 
| After Width: | Height: | Size: 26 KiB | 
							
								
								
									
										
											BIN
										
									
								
								multisrc/overrides/mangathemesia/vexmanga/res/web_hi_res_512.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 220 KiB | 
							
								
								
									
										74
									
								
								multisrc/overrides/mangathemesia/vexmanga/src/VexManga.kt
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @ -0,0 +1,74 @@ | ||||
| package eu.kanade.tachiyomi.extension.ar.vexmanga | ||||
| 
 | ||||
| import eu.kanade.tachiyomi.multisrc.mangathemesia.MangaThemesia | ||||
| import eu.kanade.tachiyomi.source.model.Page | ||||
| import eu.kanade.tachiyomi.source.model.SChapter | ||||
| import eu.kanade.tachiyomi.source.model.SManga | ||||
| import kotlinx.serialization.json.jsonArray | ||||
| import kotlinx.serialization.json.jsonPrimitive | ||||
| import org.jsoup.nodes.Document | ||||
| import org.jsoup.nodes.Element | ||||
| import java.lang.IllegalArgumentException | ||||
| import java.util.Calendar | ||||
| 
 | ||||
| class VexManga : MangaThemesia( | ||||
|     "فيكس مانجا", | ||||
|     "https://vexmanga.net", | ||||
|     "ar", | ||||
| ) { | ||||
|     override fun searchMangaSelector() = ".listupd .latest-series, ${super.searchMangaSelector()}" | ||||
|     override val sendViewCount = false | ||||
|     override fun chapterListSelector() = ".ulChapterList > a, ${super.chapterListSelector()}" | ||||
| 
 | ||||
|     override val seriesArtistSelector = | ||||
|         ".tsinfo .imptdt:contains(الرسام) i, ${super.seriesArtistSelector}" | ||||
|     override val seriesAuthorSelector = | ||||
|         ".tsinfo .imptdt:contains(المؤلف) i, ${super.seriesAuthorSelector}" | ||||
|     override val seriesStatusSelector = | ||||
|         ".tsinfo .imptdt:contains(الحالة) i, ${super.seriesStatusSelector}" | ||||
|     override val seriesTypeSelector = | ||||
|         ".tsinfo .imptdt:contains(النوع) i, ${super.seriesTypeSelector}" | ||||
| 
 | ||||
|     override fun String?.parseStatus() = when { | ||||
|         this == null -> SManga.UNKNOWN | ||||
|         this.contains("مستمر", ignoreCase = true) -> SManga.ONGOING | ||||
|         this.contains("مكتمل", ignoreCase = true) -> SManga.COMPLETED | ||||
|         this.contains("متوقف", ignoreCase = true) -> SManga.ON_HIATUS | ||||
|         else -> SManga.UNKNOWN | ||||
|     } | ||||
| 
 | ||||
|     override fun chapterFromElement(element: Element) = SChapter.create().apply { | ||||
|         setUrlWithoutDomain(element.attr("href")) | ||||
|         name = element.select(".chapternum").text() | ||||
|         date_upload = element.select(".chapterdate").text().parseRelativeDate() | ||||
|     } | ||||
| 
 | ||||
|     private fun String.parseRelativeDate(): Long { | ||||
|         val number = Regex("""(\d+)""").find(this)?.value?.toIntOrNull() ?: return 0 | ||||
|         val cal = Calendar.getInstance() | ||||
| 
 | ||||
|         return when { | ||||
|             this.contains("أيام", true) -> cal.apply { add(Calendar.DAY_OF_MONTH, -number) }.timeInMillis | ||||
|             this.contains("ساعة", true) -> cal.apply { add(Calendar.HOUR, -number) }.timeInMillis | ||||
|             this.contains("دقائق", true) -> cal.apply { add(Calendar.MINUTE, -number) }.timeInMillis | ||||
|             this.contains("أسبوعين", true) -> cal.apply { add(Calendar.DAY_OF_MONTH, -number * 7) }.timeInMillis | ||||
|             this.contains("أشهر", true) -> cal.apply { add(Calendar.MONTH, -number) }.timeInMillis | ||||
|             else -> 0 | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     override fun pageListParse(document: Document): List<Page> { | ||||
|         val docString = document.toString() | ||||
|         val imageListJson = JSON_IMAGE_LIST_REGEX.find(docString)?.destructured?.toList()?.get(0).orEmpty() | ||||
|         val imageList = try { | ||||
|             json.parseToJsonElement(imageListJson).jsonArray | ||||
|         } catch (_: IllegalArgumentException) { | ||||
|             emptyList() | ||||
|         } | ||||
|         val scriptPages = imageList.mapIndexed { i, jsonEl -> | ||||
|             Page(i, "", jsonEl.jsonPrimitive.content) | ||||
|         } | ||||
| 
 | ||||
|         return scriptPages | ||||
|     } | ||||
| } | ||||
| @ -51,6 +51,7 @@ class MadaraGenerator : ThemeSourceGenerator { | ||||
|         SingleLang("BestManga", "https://bestmanga.club", "ru", overrideVersionCode = 1), | ||||
|         SingleLang("BestManhua", "https://bestmanhua.com", "en", overrideVersionCode = 2), | ||||
|         SingleLang("Bichen Traduções", "https://bichentraducoes.com", "pt-BR", isNsfw = true, className = "BichenTraducoes"), | ||||
|         SingleLang("BirdToon", "https://birdtoon.net", "id", isNsfw = true), | ||||
|         SingleLang("BL Manhwa Club", "https://blmanhwa.club", "pt-BR", isNsfw = true, className = "BlManhwaClub", overrideVersionCode = 2), | ||||
|         SingleLang("BlogManga", "https://blogmanga.net", "en"), | ||||
|         SingleLang("Blue Solo", "https://www1.bluesolo.org", "fr", isNsfw = true), | ||||
| @ -117,6 +118,7 @@ class MadaraGenerator : ThemeSourceGenerator { | ||||
|         SingleLang("Gekkou Scans", "https://gekkou.com.br", "pt-BR", isNsfw = true, pkgName = "gekkouscan"), | ||||
|         SingleLang("Glory Manga", "https://glorymanga.com", "tr"), | ||||
|         SingleLang("Goof Fansub", "https://gooffansub.com", "pt-BR", isNsfw = true), | ||||
|         SingleLang("Grabber Zone", "https://grabber.zone", "all"), | ||||
|         SingleLang("GuncelManga", "https://guncelmanga.com", "tr", overrideVersionCode = 1), | ||||
|         SingleLang("Hreads", "https://hreads.net", "en", isNsfw = true, overrideVersionCode = 1), | ||||
|         SingleLang("Hades no Fansub Hentai", "https://h.mangareaderpro.com", "es", isNsfw = true), | ||||
| @ -135,6 +137,7 @@ class MadaraGenerator : ThemeSourceGenerator { | ||||
|         SingleLang("HentaiWebtoon", "https://hentaiwebtoon.com", "en", isNsfw = true, overrideVersionCode = 1), | ||||
|         SingleLang("HentaiXComic", "https://hentaixcomic.com", "en", isNsfw = true), | ||||
|         SingleLang("HentaiXYuri", "https://hentaixyuri.com", "en", isNsfw = true), | ||||
|         SingleLang("HentaiXDickgirl", "https://hentaixdickgirl.com", "en", isNsfw = true), | ||||
|         SingleLang("HentaiZone", "https://hentaizone.xyz", "fr", isNsfw = true), | ||||
|         SingleLang("HerenScan", "https://herenscan.com", "es"), | ||||
|         SingleLang("HipercooL", "https://hipercool.xyz", "pt-BR", isNsfw = true, className = "Hipercool"), | ||||
| @ -207,6 +210,7 @@ class MadaraGenerator : ThemeSourceGenerator { | ||||
|         SingleLang("Manga Read", "https://mangaread.co", "en", overrideVersionCode = 1), | ||||
|         SingleLang("Manga Rock Team", "https://mangarockteam.com", "en", overrideVersionCode = 1), | ||||
|         SingleLang("Manga Rocky", "https://mangarocky.com", "en", overrideVersionCode = 1), | ||||
|         SingleLang("Manga Rose", "https://mangarose.net", "ar"), | ||||
|         SingleLang("Manga Starz", "https://mangalike.org", "ar", overrideVersionCode = 4), | ||||
|         SingleLang("Manga Too", "https://mangatoo.com", "en", overrideVersionCode = 1), | ||||
|         SingleLang("Manga Weebs", "https://mangaweebs.in", "en", overrideVersionCode = 7), | ||||
| @ -383,6 +387,7 @@ class MadaraGenerator : ThemeSourceGenerator { | ||||
|         SingleLang("Sensaina Yuri", "https://sensainayuri.dropescan.com", "pt-BR", isNsfw = true, overrideVersionCode = 2), | ||||
|         SingleLang("ShavelProiection", "https://www.shavelproiection.com", "it", true), | ||||
|         SingleLang("Shayami", "https://shayami.com", "es"), | ||||
|         SingleLang("Shiba Manga", "https://shibamanga.com", "en"), | ||||
|         SingleLang("Shield Manga", "https://shieldmanga.io", "en", overrideVersionCode = 3), | ||||
|         SingleLang("Shimada Scans", "https://shimadascans.com", "en"), | ||||
|         SingleLang("Shinigami", "https://shinigami.id", "id", overrideVersionCode = 1), | ||||
| @ -472,7 +477,10 @@ class MadaraGenerator : ThemeSourceGenerator { | ||||
|         SingleLang("مانجا العاشق", "https://3asq.org", "ar", className = "Manga3asq", overrideVersionCode = 2), | ||||
|         SingleLang("مانجا عرب تيم Manga Arab Team", "https://mangaarbteam.com", "ar", className = "MangaArabTeam", overrideVersionCode = 1), | ||||
|         SingleLang("مانجا ليك", "https://mangalek.com", "ar", className = "Mangalek", overrideVersionCode = 2), | ||||
|         SingleLang("مانجا ليكس", "https://mangaleks.com", "ar", className = "MangaLeks"), | ||||
|         SingleLang("مانجا لينك", "https://mangalink.io", "ar", className = "MangaLinkio", overrideVersionCode = 3), | ||||
|         SingleLang("كوميك العرب", "https://comicarab.com", "ar", isNsfw = true, className = "ComicArab"), | ||||
|         SingleLang("فالكون مانجا", "https://falconmanga.com", "ar", className = "FalconManga"), | ||||
|         SingleLang("巴卡漫画", "https://bakamh.com", "zh", isNsfw = true, className = "Bakamh"), | ||||
|     ) | ||||
| 
 | ||||
|  | ||||
| @ -21,9 +21,10 @@ class MangaThemesiaGenerator : ThemeSourceGenerator { | ||||
|         SingleLang("Animated Glitched Scans", "https://anigliscans.com", "en"), | ||||
|         SingleLang("Arena Scans", "https://arenascans.net", "en", overrideVersionCode = 1), | ||||
|         SingleLang("Azure Scans", "https://azuremanga.com", "en", overrideVersionCode = 1), | ||||
|         SingleLang("Banana-Scan", "https://banana-scan.com", "fr", className = "BananaScan", isNsfw = true), | ||||
|         SingleLang("Boosei", "https://boosei.net", "id", overrideVersionCode = 2), | ||||
|         SingleLang("Babel Wuxia", "https://babelwuxia.com", "en", overrideVersionCode = 1), | ||||
|         SingleLang("Banana-Scan", "https://banana-scan.com", "fr", className = "BananaScan", isNsfw = true), | ||||
|         SingleLang("Beast Scans", "https://beast-scans.com", "ar"), | ||||
|         SingleLang("Boosei", "https://boosei.net", "id", overrideVersionCode = 2), | ||||
|         SingleLang("Cartel de Manhwas", "https://carteldemanhwas.com", "es", overrideVersionCode = 5), | ||||
|         SingleLang("Cosmic Scans", "https://cosmicscans.com", "en", overrideVersionCode = 1), | ||||
|         SingleLang("CosmicScans.id", "https://cosmicscans.id", "id", overrideVersionCode = 1, className = "CosmicScansID"), | ||||
| @ -93,12 +94,14 @@ class MangaThemesiaGenerator : ThemeSourceGenerator { | ||||
|         SingleLang("NIGHT SCANS", "https://nightscans.org", "en", isNsfw = true, className = "NightScans", overrideVersionCode = 1), | ||||
|         SingleLang("Nocturnal Scans", "https://nocturnalscans.com", "en", overrideVersionCode = 1), | ||||
|         SingleLang("Noromax", "https://noromax.my.id", "id"), | ||||
|         SingleLang("OPSCANS", "https://opscans.com", "all"), | ||||
|         SingleLang("Origami Orpheans", "https://origami-orpheans.com.br", "pt-BR", overrideVersionCode = 9), | ||||
|         SingleLang("Ozul Scans", "https://ozulscans.com", "ar"), | ||||
|         SingleLang("Phantom Scans", "https://phantomscans.com", "en", overrideVersionCode = 1), | ||||
|         SingleLang("PhenixScans", "https://phenixscans.fr", "fr", className = "PhenixScans", overrideVersionCode = 1), | ||||
|         SingleLang("Pi Scans", "https://piscans.in", "id", overrideVersionCode = 1), | ||||
|         SingleLang("PMScans", "https://rackusreads.com", "en", overrideVersionCode = 3), | ||||
|         SingleLang("PotatoManga", "https://potatomanga.xyz", "ar"), | ||||
|         SingleLang("Queen Scans", "https://queenscans.com", "en"), | ||||
|         SingleLang("Raiki Scan", "https://raikiscan.com", "es"), | ||||
|         SingleLang("Raven Scans", "https://ravenscans.com", "en", overrideVersionCode = 1), | ||||
| @ -130,6 +133,9 @@ class MangaThemesiaGenerator : ThemeSourceGenerator { | ||||
|         SingleLang("xCaliBR Scans", "https://xcalibrscans.com", "en", overrideVersionCode = 4), | ||||
|         SingleLang("Zahard", "https://zahard.xyz", "en"), | ||||
|         SingleLang("สดใสเมะ", "https://www.xn--l3c0azab5a2gta.com", "th", isNsfw = true, className = "Sodsaime", overrideVersionCode = 1), | ||||
|         SingleLang("أريا مانجا", "https://www.areascans.net", "ar", className = "AreaManga"), | ||||
|         SingleLang("جالاكسي مانجا", "https://galaxymanga.org", "ar", className = "GalaxyManga"), | ||||
|         SingleLang("فيكس مانجا", "https://vexmanga.net", "ar", className = "VexManga"), | ||||
|     ) | ||||
| 
 | ||||
|     companion object { | ||||
|  | ||||
 AwkwardPeak7
						AwkwardPeak7