Remove dead sources (#15995)
* JaiminisBox.net: Closes #15526 * Scantrad.net: Closes #15567 * Hatachi Manga -> hachiraw.com, related to #15618 * Zbulu sources, related to #15842 (BeeManga, Bulu, Koo) * Manga Hanta: Closes #15893 * Yetişkin Rüya Manga: Closes #15894 (YetiskinRuyaManga) * Glory Scans: Closes #15895 * Manga Vadisi: Closes #15896 * Manga Sepeti: Closes #15897 * Mabushimajo: Closes #15898 * Manga Hane: Closes #15904 * LovableSubs: Closes #15905
Before Width: | Height: | Size: 7.0 KiB |
Before Width: | Height: | Size: 3.6 KiB |
Before Width: | Height: | Size: 11 KiB |
Before Width: | Height: | Size: 24 KiB |
Before Width: | Height: | Size: 40 KiB |
Before Width: | Height: | Size: 345 KiB |
@ -1,5 +0,0 @@
|
||||
package eu.kanade.tachiyomi.extension.tr.mabushimajo
|
||||
|
||||
import eu.kanade.tachiyomi.multisrc.foolslide.FoolSlide
|
||||
|
||||
class Mabushimajo : FoolSlide("Mabushimajo", "http://mabushimajo.com", "tr", "/onlineokuma")
|
Before Width: | Height: | Size: 4.9 KiB |
Before Width: | Height: | Size: 2.6 KiB |
Before Width: | Height: | Size: 7.7 KiB |
Before Width: | Height: | Size: 15 KiB |
Before Width: | Height: | Size: 23 KiB |
Before Width: | Height: | Size: 146 KiB |
@ -1,14 +0,0 @@
|
||||
package eu.kanade.tachiyomi.extension.tr.gloryscans
|
||||
|
||||
import eu.kanade.tachiyomi.multisrc.madara.Madara
|
||||
import java.text.SimpleDateFormat
|
||||
import java.util.Locale
|
||||
|
||||
class GloryScans : Madara(
|
||||
"Glory Scans",
|
||||
"https://gloryscans.com",
|
||||
"tr",
|
||||
dateFormat = SimpleDateFormat("d MMM yyy", Locale("tr")),
|
||||
) {
|
||||
override val useNewChapterEndpoint = false
|
||||
}
|
Before Width: | Height: | Size: 3.8 KiB |
Before Width: | Height: | Size: 2.1 KiB |
Before Width: | Height: | Size: 5.5 KiB |
Before Width: | Height: | Size: 10 KiB |
Before Width: | Height: | Size: 18 KiB |
Before Width: | Height: | Size: 113 KiB |
@ -1,12 +0,0 @@
|
||||
package eu.kanade.tachiyomi.extension.en.jaiminisboxnet
|
||||
|
||||
import eu.kanade.tachiyomi.multisrc.madara.Madara
|
||||
import java.text.SimpleDateFormat
|
||||
import java.util.Locale
|
||||
|
||||
class Jaiminisboxnet : Madara(
|
||||
"JaiminisBox.net",
|
||||
"https://jaiminisbox.net",
|
||||
"en",
|
||||
dateFormat = SimpleDateFormat("MMM d, yyyy", Locale.US),
|
||||
)
|
Before Width: | Height: | Size: 5.7 KiB |
Before Width: | Height: | Size: 2.8 KiB |
Before Width: | Height: | Size: 7.9 KiB |
Before Width: | Height: | Size: 16 KiB |
Before Width: | Height: | Size: 24 KiB |
Before Width: | Height: | Size: 193 KiB |
@ -1,7 +0,0 @@
|
||||
package eu.kanade.tachiyomi.extension.tr.lovablesubs
|
||||
|
||||
import eu.kanade.tachiyomi.multisrc.madara.Madara
|
||||
import java.text.SimpleDateFormat
|
||||
import java.util.Locale
|
||||
|
||||
class LovableSubs : Madara("LovableSubs", "https://lovablesubs.com", "tr", SimpleDateFormat("dd MMM yyyy", Locale("tr")))
|
Before Width: | Height: | Size: 7.1 KiB |
Before Width: | Height: | Size: 3.5 KiB |
Before Width: | Height: | Size: 11 KiB |
Before Width: | Height: | Size: 22 KiB |
Before Width: | Height: | Size: 36 KiB |
Before Width: | Height: | Size: 277 KiB |
@ -1,7 +0,0 @@
|
||||
package eu.kanade.tachiyomi.extension.tr.mangahane
|
||||
|
||||
import eu.kanade.tachiyomi.multisrc.madara.Madara
|
||||
import java.text.SimpleDateFormat
|
||||
import java.util.Locale
|
||||
|
||||
class MangaHane : Madara("Manga Hane", "https://manga-hane.com", "tr", SimpleDateFormat("MMMMM dd, yyyy", Locale("tr")))
|
Before Width: | Height: | Size: 3.5 KiB |
Before Width: | Height: | Size: 1.9 KiB |
Before Width: | Height: | Size: 4.2 KiB |
Before Width: | Height: | Size: 7.6 KiB |
Before Width: | Height: | Size: 9.7 KiB |
Before Width: | Height: | Size: 37 KiB |
@ -1,12 +0,0 @@
|
||||
package eu.kanade.tachiyomi.extension.tr.mangasepeti
|
||||
|
||||
import eu.kanade.tachiyomi.multisrc.madara.Madara
|
||||
import java.text.SimpleDateFormat
|
||||
import java.util.Locale
|
||||
|
||||
class MangaSepeti : Madara(
|
||||
"Manga Sepeti",
|
||||
"https://www.mangasepeti.xyz",
|
||||
"tr",
|
||||
SimpleDateFormat("MMMMM d, yyyy", Locale("tr")),
|
||||
)
|
Before Width: | Height: | Size: 5.6 KiB |
Before Width: | Height: | Size: 2.9 KiB |
Before Width: | Height: | Size: 8.5 KiB |
Before Width: | Height: | Size: 17 KiB |
Before Width: | Height: | Size: 27 KiB |
Before Width: | Height: | Size: 187 KiB |
@ -1,30 +0,0 @@
|
||||
package eu.kanade.tachiyomi.extension.tr.yetiskinruyamanga
|
||||
|
||||
import eu.kanade.tachiyomi.multisrc.madara.Madara
|
||||
import eu.kanade.tachiyomi.source.model.Page
|
||||
import org.jsoup.nodes.Document
|
||||
import java.text.SimpleDateFormat
|
||||
import java.util.Locale
|
||||
|
||||
class YetiskinRuyaManga : Madara(
|
||||
"Yetişkin Rüya Manga",
|
||||
"https://yetiskin.ruyamanga.com",
|
||||
"tr",
|
||||
SimpleDateFormat("dd/MM/yyy", Locale("tr")),
|
||||
) {
|
||||
override val useNewChapterEndpoint = true
|
||||
|
||||
override fun pageListParse(document: Document): List<Page> {
|
||||
val blocked = document.select(".content-blocked").first()
|
||||
if (blocked != null) {
|
||||
/*
|
||||
* Bu bölümü okuyabilmek için GİRİŞ yapmak zorundasınız.
|
||||
* Eğer +18 seri'nin VIP bölümündeyseniz okuyabilmek için VIP satın almış olmak zorundasınız.
|
||||
* VIP SATIN ALMAK VEYA BİLGİ ALMAK İÇİN "VIP & DESTEK" SAYFAMIZI ZİYARET EDİNİZ.
|
||||
*/
|
||||
throw Exception(blocked.text())
|
||||
}
|
||||
|
||||
return super.pageListParse(document)
|
||||
}
|
||||
}
|
Before Width: | Height: | Size: 4.7 KiB |
Before Width: | Height: | Size: 2.7 KiB |
Before Width: | Height: | Size: 6.3 KiB |
Before Width: | Height: | Size: 11 KiB |
Before Width: | Height: | Size: 14 KiB |
Before Width: | Height: | Size: 65 KiB |
Before Width: | Height: | Size: 7.6 KiB |
Before Width: | Height: | Size: 3.8 KiB |
Before Width: | Height: | Size: 12 KiB |
Before Width: | Height: | Size: 22 KiB |
Before Width: | Height: | Size: 34 KiB |
Before Width: | Height: | Size: 213 KiB |
Before Width: | Height: | Size: 4.9 KiB |
Before Width: | Height: | Size: 2.5 KiB |
Before Width: | Height: | Size: 7.8 KiB |
Before Width: | Height: | Size: 16 KiB |
Before Width: | Height: | Size: 25 KiB |
Before Width: | Height: | Size: 169 KiB |
Before Width: | Height: | Size: 5.0 KiB |
Before Width: | Height: | Size: 2.6 KiB |
Before Width: | Height: | Size: 7.0 KiB |
Before Width: | Height: | Size: 14 KiB |
Before Width: | Height: | Size: 22 KiB |
Before Width: | Height: | Size: 175 KiB |
Before Width: | Height: | Size: 4.2 KiB |
Before Width: | Height: | Size: 2.4 KiB |
Before Width: | Height: | Size: 5.5 KiB |
Before Width: | Height: | Size: 10 KiB |
Before Width: | Height: | Size: 15 KiB |
Before Width: | Height: | Size: 71 KiB |
@ -22,7 +22,6 @@ class FoolSlideGenerator : ThemeSourceGenerator {
|
||||
SingleLang("Kirishima Fansub", "https://www.kirishimafansub.net", "es"),
|
||||
SingleLang("Le Cercle du Scan", "https://lel.lecercleduscan.com", "fr", className = "LeCercleDuScan", overrideVersionCode = 1),
|
||||
SingleLang("Lilyreader", "https://manga.smuglo.li", "en"),
|
||||
SingleLang("Mabushimajo", "http://mabushimajo.com", "tr"),
|
||||
SingleLang("MangaScouts", "http://onlinereader.mangascouts.org", "de", overrideVersionCode = 1),
|
||||
SingleLang("Mangatellers", "https://reader.mangatellers.gr", "en"),
|
||||
SingleLang("Menudo-Fansub", "https://www.menudo-fansub.com", "es", className = "MenudoFansub", overrideVersionCode = 1),
|
||||
|
@ -113,14 +113,13 @@ class MadaraGenerator : ThemeSourceGenerator {
|
||||
SingleLang("GeassToon", "https://geasstoon.com", "tr"),
|
||||
SingleLang("Glorious Scan", "https://gloriousscan.com", "pt-BR"),
|
||||
SingleLang("Glory Manga", "https://glorymanga.com", "tr"),
|
||||
SingleLang("Glory Scans", "https://gloryscans.com", "tr", isNsfw = true),
|
||||
SingleLang("Goof Fansub", "https://gooffansub.com", "pt-BR", isNsfw = true),
|
||||
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),
|
||||
SingleLang("Hades no Fansub", "https://mangareaderpro.com", "es", overrideVersionCode = 1),
|
||||
SingleLang("Harimanga", "https://harimanga.com", "en", overrideVersionCode = 2),
|
||||
SingleLang("Hatachi Manga", "https://hachimanga.com", "ja", isNsfw = true, overrideVersionCode = 1),
|
||||
SingleLang("Hatachi Manga", "https://hachiraw.com", "ja", isNsfw = true, overrideVersionCode = 2),
|
||||
SingleLang("Hattori Manga", "https://hattorimanga.com", "tr", isNsfw = true),
|
||||
SingleLang("Hayalistic", "https://hayalistic.com", "tr"),
|
||||
SingleLang("Hela Scan", "https://helascan.com", "pt-BR", isNsfw = true),
|
||||
@ -157,7 +156,6 @@ class MadaraGenerator : ThemeSourceGenerator {
|
||||
SingleLang("IsekaiScanManga (unoriginal)", "https://isekaiscanmanga.com", "en", className = "IsekaiScanManga", overrideVersionCode = 1),
|
||||
SingleLang("Its Your Right Manhua", "https://itsyourightmanhua.com", "en", className = "ItsYourRightManhua", overrideVersionCode = 2),
|
||||
SingleLang("Izakaya", "https://leitorizakaya.net", "pt-BR", isNsfw = true, overrideVersionCode = 1),
|
||||
SingleLang("JaiminisBox.net", "https://jaiminisbox.net", "en", className = "Jaiminisboxnet"),
|
||||
SingleLang("Jiangzaitoon", "https://jiangzaitoon.biz", "tr", isNsfw = true, overrideVersionCode = 1),
|
||||
SingleLang("Kalango Scan", "https://kalangoscan.online", "pt-BR"),
|
||||
SingleLang("Kami Sama Explorer", "https://leitor.kamisama.com.br", "pt-BR", overrideVersionCode = 2),
|
||||
@ -177,7 +175,6 @@ class MadaraGenerator : ThemeSourceGenerator {
|
||||
SingleLang("Lima Scans", "http://limascans.xyz/v2", "pt-BR", isNsfw = true, overrideVersionCode = 2),
|
||||
SingleLang("Lolicon", "https://lolicon.mobi", "en", isNsfw = true, overrideVersionCode = 2),
|
||||
SingleLang("Lord Manga", "https://lordmanga.com", "en"),
|
||||
SingleLang("LovableSubs", "https://lovablesubs.com", "tr", overrideVersionCode = 1),
|
||||
SingleLang("LuxManga", "https://luxmanga.com", "en"),
|
||||
SingleLang("MadaraDex", "https://madaradex.org", "en", isNsfw = true),
|
||||
SingleLang("Manga Action", "https://mangaaction.com", "en", overrideVersionCode = 2),
|
||||
@ -189,7 +186,6 @@ class MadaraGenerator : ThemeSourceGenerator {
|
||||
SingleLang("Manga Diyari", "https://manga-diyari.com", "tr", overrideVersionCode = 2),
|
||||
SingleLang("Manga Fenix", "https://manga-fenix.com", "es", overrideVersionCode = 2),
|
||||
SingleLang("Manga Galaxy", "https://mangagalaxy.me", "en", overrideVersionCode = 1),
|
||||
SingleLang("Manga Hane", "https://manga-hane.com", "tr"),
|
||||
SingleLang("Manga Hentai", "https://mangahentai.me", "en", isNsfw = true, overrideVersionCode = 2),
|
||||
SingleLang("Manga Keyfi", "https://mangakeyfi.net", "tr"),
|
||||
SingleLang("Manga Kio", "https://mangakio.com", "en", isNsfw = true, overrideVersionCode = 1),
|
||||
@ -203,7 +199,6 @@ 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 Sepeti", "https://www.mangasepeti.xyz", "tr", overrideVersionCode = 1),
|
||||
SingleLang("Manga Starz", "https://mangastarz.com", "ar", overrideVersionCode = 3),
|
||||
SingleLang("Manga Too", "https://mangatoo.com", "en", overrideVersionCode = 1),
|
||||
SingleLang("Manga Weebs", "https://mangaweebs.in", "en", overrideVersionCode = 7),
|
||||
@ -441,7 +436,6 @@ class MadaraGenerator : ThemeSourceGenerator {
|
||||
SingleLang("Yaoi.mobi", "https://yaoi.mobi", "en", isNsfw = true, className = "YaoiManga", pkgName = "yaoimanga", overrideVersionCode = 4),
|
||||
SingleLang("YaoiScan", "https://yaoiscan.com", "en", isNsfw = true),
|
||||
SingleLang("YaoiToon", "https://yaoitoon.com", "en", isNsfw = true),
|
||||
SingleLang("Yetişkin Rüya Manga", "https://yetiskin.ruyamanga.com", "tr", isNsfw = true, className = "YetiskinRuyaManga"),
|
||||
SingleLang("YonaBar", "https://yonabar.com", "ar", isNsfw = true, overrideVersionCode = 2),
|
||||
SingleLang("YugenMangas", "https://yugenmangas.com.br", "pt-BR", overrideVersionCode = 1),
|
||||
SingleLang("Yuri Verso", "https://yuri.live", "pt-BR", overrideVersionCode = 3),
|
||||
|
@ -20,7 +20,6 @@ class MMRCMSGenerator : ThemeSourceGenerator {
|
||||
SingleLang("Scan VF", "https://www.scan-vf.net", "fr", overrideVersionCode = 1),
|
||||
SingleLang("Scan OP", "https://scan-op.cc", "fr"),
|
||||
SingleLang("Komikid", "https://www.komikid.com", "id"),
|
||||
SingleLang("MangaHanta", "http://mangahanta.com", "tr", overrideVersionCode = 1),
|
||||
SingleLang("Fallen Angels Scans", "https://truyen.fascans.com", "vi"),
|
||||
SingleLang("LeoManga", "https://leomanga.me", "es", overrideVersionCode = 1),
|
||||
SingleLang("submanga", "https://submanga.io", "es"),
|
||||
@ -30,7 +29,6 @@ class MMRCMSGenerator : ThemeSourceGenerator {
|
||||
SingleLang("Scan-1", "https://wwv.scan-1.com", "fr", className = "ScanOne", overrideVersionCode = 2),
|
||||
SingleLang("Lelscan-VF", "https://lelscanvf.com", "fr", className = "LelscanVF", overrideVersionCode = 1),
|
||||
SingleLang("AnimaRegia", "https://animaregia.net", "pt-BR", overrideVersionCode = 4),
|
||||
SingleLang("MangaVadisi", "http://manga-v2.mangavadisi.org", "tr", overrideVersionCode = 1),
|
||||
SingleLang("MangaID", "https://mangaid.click", "id", overrideVersionCode = 1),
|
||||
SingleLang("Jpmangas", "https://jpmangas.cc", "fr", overrideVersionCode = 1),
|
||||
SingleLang("Op-VF", "https://www.op-vf.com", "fr", className = "OpVF"),
|
||||
|
@ -14,7 +14,6 @@ object SourceData {
|
||||
"https://scan-op.cc" -> """{"name":"Scan OP","base_url":"https://scan-op.cc","supports_latest":true,"item_url":"https://scan-op.cc/manga/","categories":[{"id":"1","name":"Comedy"},{"id":"2","name":"Doujinshi"},{"id":"3","name":"Drama"},{"id":"4","name":"Ecchi"},{"id":"5","name":"Fantasy"},{"id":"6","name":"Gender Bender"},{"id":"7","name":"Josei"},{"id":"8","name":"Mature"},{"id":"9","name":"Mecha"},{"id":"10","name":"Mystery"},{"id":"11","name":"One Shot"},{"id":"12","name":"Psychological"},{"id":"13","name":"Romance"},{"id":"14","name":"School Life"},{"id":"15","name":"Sci-fi"},{"id":"16","name":"Seinen"},{"id":"17","name":"Shoujo"},{"id":"18","name":"Shoujo Ai"},{"id":"19","name":"Shounen"},{"id":"20","name":"Shounen Ai"},{"id":"21","name":"Slice of Life"},{"id":"22","name":"Sports"},{"id":"23","name":"Supernatural"},{"id":"24","name":"Tragedy"},{"id":"25","name":"Yaoi"},{"id":"26","name":"Yuri"},{"id":"27","name":"Comics"},{"id":"28","name":"Autre"}],"tags":[{"id":"nouveau","name":"nouveau"}]}"""
|
||||
"https://www.komikid.com" -> """{"name":"Komikid","base_url":"https://www.komikid.com","supports_latest":true,"item_url":"https://www.komikid.com/manga/","categories":[{"id":"1","name":"Action"},{"id":"2","name":"Adventure"},{"id":"3","name":"Comedy"},{"id":"4","name":"Doujinshi"},{"id":"5","name":"Drama"},{"id":"6","name":"Fantasy"},{"id":"7","name":"Gender Bender"},{"id":"8","name":"Historical"},{"id":"9","name":"Horror"},{"id":"10","name":"Josei"},{"id":"11","name":"Martial Arts"},{"id":"12","name":"Mature"},{"id":"13","name":"Mecha"},{"id":"14","name":"Mystery"},{"id":"15","name":"One Shot"},{"id":"16","name":"Psychological"},{"id":"17","name":"Romance"},{"id":"18","name":"School Life"},{"id":"19","name":"Sci-fi"},{"id":"20","name":"Seinen"},{"id":"21","name":"Shoujo"},{"id":"22","name":"Shoujo Ai"},{"id":"23","name":"Shounen"},{"id":"24","name":"Shounen Ai"},{"id":"25","name":"Slice of Life"},{"id":"26","name":"Sports"},{"id":"27","name":"Supernatural"},{"id":"28","name":"Tragedy"},{"id":"29","name":"Yaoi"},{"id":"30","name":"Yuri"}]}"""
|
||||
"http://azbivo.webd.pro" -> """{"name":"Nikushima","base_url":"http://azbivo.webd.pro","supports_latest":false,"item_url":"\u003chtml\u003e \n \u003chead\u003e \n \u003cmeta http-equiv\u003d\"Content-Language\" content\u003d\"pl\"\u003e \n \u003cmeta http-equiv name\u003d\"pragma\" content\u003d\"no-cache\"\u003e \n \u003clink href\u003d\"style/style.css\" rel\u003d\"stylesheet\" type\u003d\"text/css\"\u003e \n \u003cmeta http-equiv\u003d\"Refresh\" content\u003d\"0; url\u003dhttps://www.webd.pl/_errnda.php?utm_source\u003dwn07\u0026amp;utm_medium\u003dwww\u0026amp;utm_campaign\u003dblock\"\u003e \n \u003cmeta name\u003d\"Robots\" content\u003d\"index, follow\"\u003e \n \u003cmeta name\u003d\"revisit-after\" content\u003d\"2 days\"\u003e \n \u003cmeta name\u003d\"rating\" content\u003d\"general\"\u003e \n \u003cmeta name\u003d\"keywords\" content\u003d\"STRONA ZAWIESZONA, WEBD, DOMENY, DOMENA, HOSTING, SERWER, INTERNET, PHP, MySQL, FTP, WEBMASTER, SERWERY WIRTUALNE, WWW, KONTO, MAIL, POCZTA, E-MAIL, NET, .COM, .ORG, TANIE, PHP+MySQL, DOMENY, DOMENA, HOSTING, SERWER, INTERNET, PHP, MySQL, FTP, WEBMASTER, SERWERY WIRTUALNE, WWW, KONTO, MAIL, POCZTA, E-MAIL, DOMENY, DOMENA, NET, .COM, .ORG, TANIE, PHP+MySQL, HOSTING, SERWER, INTERNET, PHP, MySQL, FTP, WEBMASTER, SERWERY WIRTUALNE, WWW, KONTO, MAIL, POCZTA, E-MAIL, NET, .COM, .ORG, TANIE, PHP+MySQL\"\u003e \n \u003cmeta name\u003d\"description\" content\u003d\"STRONA ZAWIESZONA - Oferujemy profesjonalny hosting z PHP + MySQL, rejestrujemy domeny. Sprawdz nasz hosting i przetestuj nasze serwery. Kupuj tanio domeny i serwery!\"\u003e \n \u003ctitle\u003eSTRONA ZAWIESZONA - WEBD.PL - Tw<54>j profesjonalny hosting za jedyne 4.99PLN! Serwery z PHP+MySQL, tanie domeny, serwer + domena .pl - taniej sie nie da!\u003c/title\u003e \n \u003cscript type\u003d\"text/javascript\"\u003e\nfunction init() {\n if (!document.getElementById) return\n var imgOriginSrc;\n var imgTemp \u003d new Array();\n var imgarr \u003d document.getElementsByTagName(\u0027img\u0027);\n for (var i \u003d 0; i \u003c imgarr.length; i++) {\n if (imgarr[i].getAttribute(\u0027hsrc\u0027)) {\n imgTemp[i] \u003d new Image();\n imgTemp[i].src \u003d imgarr[i].getAttribute(\u0027hsrc\u0027);\n imgarr[i].onmouseover \u003d function() {\n imgOriginSrc \u003d this.getAttribute(\u0027src\u0027);\n this.setAttribute(\u0027src\u0027,this.getAttribute(\u0027hsrc\u0027))\n }\n imgarr[i].onmouseout \u003d function() {\n this.setAttribute(\u0027src\u0027,imgOriginSrc)\n }\n }\n }\n}\nonload\u003dinit;\n\u003c/script\u003e \n \u003c/head\u003e \n \u003cbody\u003e\n Trwa przekierowanie .... \u0026gt;\u0026gt;\u0026gt;\u0026gt; \u003c!--\n--\u003e \n \u003c/body\u003e\n\u003c/html\u003e/","categories":[]}"""
|
||||
"http://mangahanta.com" -> """{"name":"MangaHanta","base_url":"http://mangahanta.com","supports_latest":true,"item_url":"http://mangahanta.com/manga/","categories":[{"id":"1","name":"Aksiyon"},{"id":"2","name":"Macera"},{"id":"3","name":"Komedi"},{"id":"4","name":"Doujinshi"},{"id":"5","name":"Drama"},{"id":"6","name":"Ecchi"},{"id":"7","name":"Fantezi"},{"id":"8","name":"Gender Bender"},{"id":"9","name":"Harem"},{"id":"10","name":"Tarihi"},{"id":"11","name":"Korku"},{"id":"12","name":"Josei"},{"id":"13","name":"Dövüş Sanatları"},{"id":"14","name":"Yetişkin"},{"id":"15","name":"Mecha"},{"id":"16","name":"Gizem"},{"id":"17","name":"One Shot"},{"id":"18","name":"Psikolojik"},{"id":"19","name":"Romantizm"},{"id":"20","name":"Okul Hayatı"},{"id":"21","name":"Bilim-Kurgu"},{"id":"22","name":"Seinen"},{"id":"23","name":"Shoujo"},{"id":"24","name":"Shoujo Ai"},{"id":"25","name":"Shounen"},{"id":"26","name":"Shounen Ai"},{"id":"27","name":"Hayattan Bir Parça"},{"id":"28","name":"Spor"},{"id":"29","name":"Doğaüstü"},{"id":"30","name":"Trajedi"},{"id":"31","name":"Yaoi"},{"id":"32","name":"Yuri"},{"id":"33","name":"Vampir"},{"id":"34","name":"Webtoon"}],"tags":[{"id":"tag","name":"-ヒトガタナ-"},{"id":"amber","name":"Amber"},{"id":"amber-manga","name":"Amber manga"},{"id":"amber-oku","name":"Amber oku"},{"id":"amber-turkce-oku","name":"Amber Türkçe Oku"},{"id":"amber-yuno","name":"Amber Yuno"},{"id":"back-stage","name":"Back Stage"},{"id":"ballroom-e-youkoso","name":"Ballroom e Youkoso"},{"id":"beauty-game","name":"Beauty Game"},{"id":"beauty-game-oku","name":"Beauty Game Oku"},{"id":"boku-wa-mari-no-naka","name":"Boku Wa Mari No Naka"},{"id":"god-eater-kyuuseishu-no-kikan","name":"God Eater - Kyuuseishu no Kikan"},{"id":"god-eater-the-spiral-fate","name":"God Eater - The Spiral Fate"},{"id":"happiness","name":"Happiness"},{"id":"happiness-manga-oku","name":"happiness manga oku"},{"id":"happiness-turkce-oku","name":"happiness türkçe oku"},{"id":"hitogatana","name":"Hitogatana"},{"id":"im-in-mari-im-inside-mari","name":"ぼくは麻理のなか I\u0027m in Mari I\u0027m Inside Mari"},{"id":"itsuwaribito-utsuho","name":"Itsuwaribito Utsuho"},{"id":"kaguya-sama-wa-kokurasetai","name":"Kaguya-sama wa Kokurasetai"},{"id":"les-memoires-de-vanitas","name":"Les Mémoires de Vanitas"},{"id":"mahouka-koukou-no-rettousei-tsuioku-hen","name":"Mahouka Koukou no Rettousei - Tsuioku Hen"},{"id":"manga-oku","name":"manga oku"},{"id":"maou-na-ore-to-fushihime-no-yubiwa","name":"Maou na Ore to Fushihime no Yubiwa"},{"id":"may-i-shake-your-hand","name":"May I shake your hand"},{"id":"may-i-shake-your-hand-oku","name":"may I shake your hand oku"},{"id":"may-i-shake-your-hand-turkce-oku","name":"May I Shake Your Hand türkçe oku"},{"id":"memoir-of-vanitas","name":"Memoir of Vanitas"},{"id":"mutluluk","name":"Mutluluk"},{"id":"nanatsu-no-taizai","name":"Nanatsu No Taizai"},{"id":"nanatsu-no-taizai-turkce-oku","name":"Nanatsu no taizai Türkçe oku"},{"id":"oshimi-shuzo","name":"OSHIMI Shuzo"},{"id":"sousei-manga-oku","name":"sousei manga oku"},{"id":"sousei-no-onmyouji","name":"Sousei no Onmyouji"},{"id":"sousei-no-onmyouji-manga-oku","name":"Sousei no onmyouji manga oku"},{"id":"sousei-no-onmyouji-turkce-oku","name":"sousei no onmyouji türkçe oku"},{"id":"the-case-study-of-vanitas","name":"The Case Study of Vanitas"},{"id":"the-seven-deadly-sins","name":"The Seven Deadly Sins"},{"id":"vanitas-no-carte","name":"Vanitas no Carte"},{"id":"vanitas-no-shuki","name":"Vanitas no Shuki"},{"id":"yedi-olumcul-gunah","name":"Yedi Ölümcül Günah"}]}"""
|
||||
"https://truyen.fascans.com" -> """{"name":"Fallen Angels Scans","base_url":"https://truyen.fascans.com","supports_latest":true,"item_url":"https://truyen.fascans.com/manga/","categories":[{"id":"1","name":"Action"},{"id":"2","name":"Adventure"},{"id":"3","name":"Comedy"},{"id":"4","name":"Doujinshi"},{"id":"5","name":"Drama"},{"id":"6","name":"Ecchi"},{"id":"7","name":"Fantasy"},{"id":"8","name":"Gender Bender"},{"id":"9","name":"Harem"},{"id":"10","name":"Historical"},{"id":"11","name":"Horror"},{"id":"12","name":"Josei"},{"id":"13","name":"Martial Arts"},{"id":"14","name":"Mature"},{"id":"15","name":"Mecha"},{"id":"16","name":"Mystery"},{"id":"17","name":"One Shot"},{"id":"18","name":"Psychological"},{"id":"19","name":"Romance"},{"id":"20","name":"School Life"},{"id":"21","name":"Sci-fi"},{"id":"22","name":"Seinen"},{"id":"23","name":"Shoujo"},{"id":"24","name":"Shoujo Ai"},{"id":"25","name":"Shounen"},{"id":"26","name":"Shounen Ai"},{"id":"27","name":"Slice of Life"},{"id":"28","name":"Sports"},{"id":"29","name":"Supernatural"},{"id":"30","name":"Tragedy"},{"id":"31","name":"Yaoi"},{"id":"32","name":"Yuri"}]}"""
|
||||
"https://leomanga.me" -> """{"name":"LeoManga","base_url":"https://leomanga.me","supports_latest":false,"item_url":"https://leomanga.me/manga/","categories":[{"id":"1","name":"Accion"},{"id":"2","name":"Aventura"},{"id":"3","name":"Comedia"},{"id":"4","name":"Doujinshi"},{"id":"5","name":"Drama"},{"id":"6","name":"Ecchi"},{"id":"7","name":"Fantasia"},{"id":"8","name":"Gender Bender"},{"id":"9","name":"Harem"},{"id":"10","name":"Historico"},{"id":"11","name":"Horror"},{"id":"12","name":"Josei"},{"id":"13","name":"Artes Marciales"},{"id":"14","name":"Madura"},{"id":"15","name":"Mecha"},{"id":"16","name":"Misterio"},{"id":"17","name":"One Shot"},{"id":"18","name":"Psicológico"},{"id":"19","name":"Romance"},{"id":"20","name":"Vida Cotidiana"},{"id":"21","name":"Sci-fi"},{"id":"22","name":"Seinen"},{"id":"23","name":"Shoujo"},{"id":"24","name":"Shoujo Ai"},{"id":"25","name":"Shounen"},{"id":"26","name":"Shounen Ai"},{"id":"27","name":"Slice of Life"},{"id":"28","name":"Supernatural"},{"id":"29","name":"Tragedia"},{"id":"30","name":"Yaoi"},{"id":"31","name":"Yuri"},{"id":"32","name":"Deporte"},{"id":"33","name":"Thriller"},{"id":"34","name":"Vida Escolar"},{"id":"35","name":"Boys Love"},{"id":"36","name":"Girls Love"},{"id":"37","name":"Gore"},{"id":"38","name":"Hentai"},{"id":"39","name":"Magia"},{"id":"40","name":"Manwha"},{"id":"41","name":"Policial"},{"id":"42","name":"Realidad Virtual"},{"id":"43","name":"Super Poderes"},{"id":"44","name":"Suspense"},{"id":"45","name":"Supervivencia"},{"id":"46","name":"Parodia"},{"id":"47","name":"Demonios"},{"id":"48","name":"Escolar"}],"tags":[{"id":"freaking-romance","name":"Freaking Romance"},{"id":"love-lucky","name":"Love Lucky"},{"id":"lust-awakening","name":"Lust Awakening"},{"id":"despertar-de-la-lujuria","name":"Despertar de la lujuria"},{"id":"inazumaelevenaresnotenbin","name":"inazumaelevenaresnotenbin"},{"id":"heir-of-the-penguins","name":"Heir of the Penguins"},{"id":"amor","name":"amor"},{"id":"drama","name":"drama"},{"id":"mysteries","name":"mysteries"},{"id":"anal","name":"anal"},{"id":"bukkake","name":"bukkake"},{"id":"doble-penetracion","name":"doble penetracion"},{"id":"orgia","name":"orgia"},{"id":"blow-job","name":"blow job"},{"id":"big-breasts","name":"big breasts"},{"id":"incesto","name":"incesto"},{"id":"milf","name":"milf"},{"id":"prenadas","name":"preñadas"},{"id":"slave-sex","name":"slave sex"},{"id":"lolicon","name":"lolicon"},{"id":"nurse","name":"nurse"},{"id":"reality","name":"Reality"},{"id":"glitch","name":"Glitch"},{"id":"glitcher","name":"Glitcher"},{"id":"horror","name":"Horror"},{"id":"suspenso","name":"Suspenso"},{"id":"realidad","name":"Realidad"},{"id":"slider","name":"Slider"},{"id":"novela","name":"Novela"},{"id":"sobrenatural","name":"Sobrenatural"},{"id":"tragedia","name":"Tragedia"},{"id":"error","name":"Error"},{"id":"psicologico","name":"Psicologico"},{"id":"sufrimiento","name":"Sufrimiento"},{"id":"visual","name":"Visual"},{"id":"narrativo","name":"Narrativo"},{"id":"shotacon","name":"shotacon"},{"id":"paizuri","name":"paizuri"},{"id":"kemonomimi","name":"kemonomimi"},{"id":"mundo-paralelo","name":"mundo paralelo"},{"id":"coleccion-hentai","name":"coleccion hentai"},{"id":"adultos","name":"adultos"}]}"""
|
||||
"https://submanga.io" -> """{"name":"submanga","base_url":"https://submanga.io","supports_latest":false,"item_url":"https://submanga.io/manga/","categories":[{"id":"1","name":"Accion"},{"id":"2","name":"Aventura"},{"id":"3","name":"Comedia"},{"id":"4","name":"Doujinshi"},{"id":"5","name":"Drama"},{"id":"6","name":"Ecchi"},{"id":"7","name":"Fantasia"},{"id":"8","name":"Gender Bender"},{"id":"9","name":"Harem"},{"id":"10","name":"Historico"},{"id":"11","name":"Horror"},{"id":"12","name":"Josei"},{"id":"13","name":"Artes Marciales"},{"id":"14","name":"Madura"},{"id":"15","name":"Mecha"},{"id":"16","name":"Misterio"},{"id":"17","name":"One Shot"},{"id":"18","name":"Psicológico"},{"id":"19","name":"Romance"},{"id":"20","name":"Vida Cotidiana"},{"id":"21","name":"Sci-fi"},{"id":"22","name":"Seinen"},{"id":"23","name":"Shoujo"},{"id":"24","name":"Shoujo Ai"},{"id":"25","name":"Shounen"},{"id":"26","name":"Shounen Ai"},{"id":"27","name":"Slice of Life"},{"id":"28","name":"Supernatural"},{"id":"29","name":"Tragedia"},{"id":"30","name":"Yaoi"},{"id":"31","name":"Yuri"},{"id":"32","name":"Deporte"},{"id":"33","name":"Thriller"},{"id":"34","name":"Vida Escolar"},{"id":"35","name":"Boys Love"},{"id":"36","name":"Girls Love"},{"id":"37","name":"Gore"},{"id":"38","name":"Hentai"},{"id":"39","name":"Magia"},{"id":"40","name":"Manwha"},{"id":"41","name":"Policial"},{"id":"42","name":"Realidad Virtual"},{"id":"43","name":"Super Poderes"},{"id":"44","name":"Suspense"},{"id":"45","name":"Supervivencia"},{"id":"46","name":"Parodia"},{"id":"47","name":"Demonios"},{"id":"48","name":"Escolar"}]}"""
|
||||
@ -25,7 +24,6 @@ object SourceData {
|
||||
"https://wwv.scan-1.com" -> """{"name":"Scan-1","base_url":"https://wwv.scan-1.com","supports_latest":true,"item_url":"https://wwv.scan-1.com/","categories":[{"id":"1","name":"Action"},{"id":"2","name":"Adventure"},{"id":"3","name":"Comedy"},{"id":"4","name":"Doujinshi"},{"id":"5","name":"Drama"},{"id":"6","name":"Ecchi"},{"id":"7","name":"Fantasy"},{"id":"8","name":"Gender Bender"},{"id":"9","name":"Harem"},{"id":"10","name":"Historical"},{"id":"11","name":"Horror"},{"id":"12","name":"Josei"},{"id":"13","name":"Martial Arts"},{"id":"14","name":"Mature"},{"id":"15","name":"Mecha"},{"id":"16","name":"Mystery"},{"id":"17","name":"One Shot"},{"id":"18","name":"Psychological"},{"id":"19","name":"Romance"},{"id":"20","name":"School Life"},{"id":"21","name":"Sci-fi"},{"id":"22","name":"Seinen"},{"id":"23","name":"Shoujo"},{"id":"24","name":"Shoujo Ai"},{"id":"25","name":"Shounen"},{"id":"26","name":"Shounen Ai"},{"id":"27","name":"Slice of Life"},{"id":"28","name":"Sports"},{"id":"29","name":"Supernatural"},{"id":"30","name":"Tragedy"},{"id":"31","name":"Yaoi"},{"id":"32","name":"Yuri"}]}"""
|
||||
"https://lelscanvf.com" -> """{"name":"Lelscan-VF","base_url":"https://lelscanvf.com","supports_latest":true,"item_url":"https://lelscanvf.com/manga/","categories":[{"id":"1","name":"Action"},{"id":"2","name":"Adventure"},{"id":"3","name":"Comedy"},{"id":"4","name":"Doujinshi"},{"id":"5","name":"Drama"},{"id":"6","name":"Ecchi"},{"id":"7","name":"Fantasy"},{"id":"8","name":"Gender Bender"},{"id":"9","name":"Harem"},{"id":"10","name":"Historical"},{"id":"11","name":"Horror"},{"id":"12","name":"Josei"},{"id":"13","name":"Martial Arts"},{"id":"14","name":"Mature"},{"id":"15","name":"Mecha"},{"id":"16","name":"Mystery"},{"id":"17","name":"One Shot"},{"id":"18","name":"Psychological"},{"id":"19","name":"Romance"},{"id":"20","name":"School Life"},{"id":"21","name":"Sci-fi"},{"id":"22","name":"Seinen"},{"id":"23","name":"Shoujo"},{"id":"24","name":"Shoujo Ai"},{"id":"25","name":"Shounen"},{"id":"26","name":"Shounen Ai"},{"id":"27","name":"Slice of Life"},{"id":"28","name":"Sports"},{"id":"29","name":"Supernatural"},{"id":"30","name":"Tragedy"},{"id":"31","name":"Yaoi"},{"id":"32","name":"Yuri"}]}"""
|
||||
"https://animaregia.net" -> """{"name":"AnimaRegia","base_url":"https://animaregia.net","supports_latest":true,"item_url":"http://animaregia.net/manga/","categories":[{"id":"1","name":"Action"},{"id":"2","name":"Adventure"},{"id":"3","name":"Comedy"},{"id":"4","name":"Doujinshi"},{"id":"5","name":"Drama"},{"id":"6","name":"Ecchi"},{"id":"7","name":"Fantasy"},{"id":"8","name":"Gender Bender"},{"id":"9","name":"Harem"},{"id":"10","name":"Historical"},{"id":"11","name":"Horror"},{"id":"12","name":"Josei"},{"id":"13","name":"Martial Arts"},{"id":"14","name":"Mature"},{"id":"15","name":"Mecha"},{"id":"16","name":"Mystery"},{"id":"17","name":"One Shot"},{"id":"18","name":"Psychological"},{"id":"19","name":"Romance"},{"id":"20","name":"School Life"},{"id":"21","name":"Sci-fi"},{"id":"22","name":"Seinen"},{"id":"23","name":"Shoujo"},{"id":"24","name":"Shoujo Ai"},{"id":"25","name":"Shounen"},{"id":"26","name":"Shounen Ai"},{"id":"27","name":"Slice of Life"},{"id":"28","name":"Sports"},{"id":"29","name":"Supernatural"},{"id":"30","name":"Tragedy"},{"id":"31","name":"Yaoi"},{"id":"32","name":"Yuri"}]}"""
|
||||
"http://manga-v2.mangavadisi.org" -> """{"name":"MangaVadisi","base_url":"http://manga-v2.mangavadisi.org","supports_latest":true,"item_url":"http://manga-v2.mangavadisi.org/manga/","categories":[{"id":"1","name":"Aksiyon"},{"id":"2","name":"Macera"},{"id":"3","name":"Komedi"},{"id":"4","name":"Doujinshi"},{"id":"5","name":"Drama"},{"id":"6","name":"Ecchi"},{"id":"7","name":"Fantastik"},{"id":"8","name":"Gender Bender"},{"id":"9","name":"Harem"},{"id":"10","name":"Tarihi"},{"id":"11","name":"Korku"},{"id":"12","name":"Josei"},{"id":"13","name":"Dövüş Sanatları"},{"id":"14","name":"Mature"},{"id":"15","name":"Mecha"},{"id":"16","name":"Gizem"},{"id":"17","name":"One Shot"},{"id":"18","name":"Psikolojik"},{"id":"19","name":"Romantizm"},{"id":"20","name":"Okul Hayatı"},{"id":"21","name":"Bilim Kurgu"},{"id":"22","name":"Seinen"},{"id":"23","name":"Shoujo"},{"id":"24","name":"Shoujo Ai"},{"id":"25","name":"Shounen"},{"id":"26","name":"Shounen Ai"},{"id":"27","name":"Günlük Yaşam"},{"id":"28","name":"Spor"},{"id":"29","name":"Doğaüstü"},{"id":"30","name":"Trajedi"},{"id":"31","name":"Yaoi"},{"id":"32","name":"Yuri"}]}"""
|
||||
"https://mangaid.click" -> """{"name":"MangaID","base_url":"https://mangaid.click","supports_latest":true,"item_url":"https://mangaid.click/manga/","categories":[{"id":"1","name":"Action"},{"id":"2","name":"Adventure"},{"id":"3","name":"Comedy"},{"id":"4","name":"Doujinshi"},{"id":"5","name":"Drama"},{"id":"6","name":"Ecchi"},{"id":"7","name":"Fantasy"},{"id":"8","name":"Gender Bender"},{"id":"9","name":"Harem"},{"id":"10","name":"Historical"},{"id":"11","name":"Horror"},{"id":"12","name":"Josei"},{"id":"13","name":"Martial Arts"},{"id":"14","name":"Mature"},{"id":"15","name":"Mecha"},{"id":"16","name":"Mystery"},{"id":"17","name":"Psychological"},{"id":"18","name":"Romance"},{"id":"19","name":"School Life"},{"id":"20","name":"Sci-fi"},{"id":"21","name":"Seinen"},{"id":"22","name":"Shoujo"},{"id":"23","name":"Shoujo Ai"},{"id":"24","name":"Shounen"},{"id":"25","name":"Shounen Ai"},{"id":"26","name":"Slice of Life"},{"id":"27","name":"Sports"},{"id":"28","name":"Supernatural"},{"id":"29","name":"Tragedy"},{"id":"30","name":"Yaoi"},{"id":"31","name":"Yuri"},{"id":"32","name":"School"},{"id":"33","name":"Isekai"},{"id":"34","name":"Military"}]}"""
|
||||
"https://jpmangas.cc" -> """{"name":"Jpmangas","base_url":"https://jpmangas.cc","supports_latest":true,"item_url":"https://jpmangas.cc/lecture-en-ligne/","categories":[{"id":"1","name":"Action"},{"id":"2","name":"Adventure"},{"id":"3","name":"Comedy"},{"id":"4","name":"Doujinshi"},{"id":"5","name":"Drama"},{"id":"6","name":"Ecchi"},{"id":"7","name":"Fantasy"},{"id":"8","name":"Gender Bender"},{"id":"9","name":"Harem"},{"id":"10","name":"Historical"},{"id":"11","name":"Horror"},{"id":"12","name":"Josei"},{"id":"13","name":"Martial Arts"},{"id":"14","name":"Mature"},{"id":"15","name":"Mecha"},{"id":"16","name":"Mystery"},{"id":"17","name":"One Shot"},{"id":"18","name":"Psychological"},{"id":"19","name":"Romance"},{"id":"20","name":"School Life"},{"id":"21","name":"Sci-fi"},{"id":"22","name":"Seinen"},{"id":"23","name":"Shoujo"},{"id":"24","name":"Shoujo Ai"},{"id":"25","name":"Shounen"},{"id":"26","name":"Shounen Ai"},{"id":"27","name":"Slice of Life"},{"id":"28","name":"Sports"},{"id":"29","name":"Supernatural"},{"id":"30","name":"Tragedy"},{"id":"31","name":"Yaoi"},{"id":"32","name":"Yuri"}]}"""
|
||||
"https://www.op-vf.com" -> """{"name":"Op-VF","base_url":"https://www.op-vf.com","supports_latest":true,"item_url":"https://www.op-vf.com/manga/","categories":[]}"""
|
||||
|
@ -12,10 +12,7 @@ class ZbuluGenerator : ThemeSourceGenerator {
|
||||
override val baseVersionCode: Int = 6
|
||||
|
||||
override val sources = listOf(
|
||||
SingleLang("BeeManga", "https://ww1.beemanga.com", "en"),
|
||||
SingleLang("Bulu Manga", "https://ww8.bulumanga.net", "en", overrideVersionCode = 1),
|
||||
SingleLang("HolyManga", "https://w30.holymanga.net", "en", isNsfw = true, overrideVersionCode = 2),
|
||||
SingleLang("Koo Manga", "https://ww9.koomanga.com", "en", overrideVersionCode = 1),
|
||||
SingleLang("My Toon", "https://mytoon.net", "en", isNsfw = true, overrideVersionCode = 1),
|
||||
)
|
||||
|
||||
|
@ -1,2 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<manifest package="eu.kanade.tachiyomi.extension" />
|
@ -1,11 +0,0 @@
|
||||
apply plugin: 'com.android.application'
|
||||
apply plugin: 'kotlin-android'
|
||||
|
||||
ext {
|
||||
extName = 'Scantrad'
|
||||
pkgNameSuffix = 'fr.scantrad'
|
||||
extClass = '.Scantrad'
|
||||
extVersionCode = 18
|
||||
}
|
||||
|
||||
apply from: "$rootDir/common.gradle"
|
Before Width: | Height: | Size: 3.6 KiB |
Before Width: | Height: | Size: 1.9 KiB |
Before Width: | Height: | Size: 5.2 KiB |
Before Width: | Height: | Size: 11 KiB |
Before Width: | Height: | Size: 18 KiB |
Before Width: | Height: | Size: 118 KiB |
@ -1,222 +0,0 @@
|
||||
package eu.kanade.tachiyomi.extension.fr.scantrad
|
||||
|
||||
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.MangasPage
|
||||
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.source.online.ParsedHttpSource
|
||||
import eu.kanade.tachiyomi.util.asJsoup
|
||||
import okhttp3.Headers
|
||||
import okhttp3.OkHttpClient
|
||||
import okhttp3.Request
|
||||
import okhttp3.Response
|
||||
import org.jsoup.nodes.Document
|
||||
import org.jsoup.nodes.Element
|
||||
import rx.Observable
|
||||
import java.text.SimpleDateFormat
|
||||
import java.util.Calendar
|
||||
import java.util.Locale
|
||||
import java.util.concurrent.TimeUnit
|
||||
|
||||
class Scantrad : ParsedHttpSource() {
|
||||
|
||||
override val name = "Scantrad"
|
||||
|
||||
override val baseUrl = "https://scantrad.net"
|
||||
|
||||
override val lang = "fr"
|
||||
|
||||
override val supportsLatest = true
|
||||
|
||||
override val client: OkHttpClient = network.cloudflareClient.newBuilder()
|
||||
.connectTimeout(10, TimeUnit.SECONDS)
|
||||
.readTimeout(30, TimeUnit.SECONDS)
|
||||
.rateLimit(1)
|
||||
.build()
|
||||
|
||||
override fun headersBuilder(): Headers.Builder = Headers.Builder()
|
||||
.add("User-Agent", "Mozilla/5.0 (Linux; Android 7.0; SM-G930VC Build/NRD90M; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/58.0.3029.83 Mobile Safari/537.36")
|
||||
.add("Accept-Language", "fr")
|
||||
|
||||
// Popular
|
||||
|
||||
override fun popularMangaRequest(page: Int): Request {
|
||||
return GET("$baseUrl/mangas", headers)
|
||||
}
|
||||
|
||||
override fun popularMangaSelector() = "div.manga"
|
||||
|
||||
override fun popularMangaFromElement(element: Element): SManga {
|
||||
val manga = SManga.create()
|
||||
|
||||
with(element) {
|
||||
select("a.mri-top").let {
|
||||
manga.setUrlWithoutDomain(it.attr("href"))
|
||||
manga.title = it.text()
|
||||
}
|
||||
|
||||
manga.thumbnail_url = select("div.manga_img img").attr("abs:data-src")
|
||||
}
|
||||
|
||||
return manga
|
||||
}
|
||||
|
||||
override fun popularMangaNextPageSelector() = "Not needed"
|
||||
|
||||
// Latest
|
||||
|
||||
override fun latestUpdatesRequest(page: Int): Request {
|
||||
return GET(baseUrl, headers)
|
||||
}
|
||||
|
||||
override fun latestUpdatesParse(response: Response): MangasPage {
|
||||
val document = response.asJsoup()
|
||||
val mangas = mutableListOf<SManga>()
|
||||
|
||||
document.select(latestUpdatesSelector()).map { mangas.add(latestUpdatesFromElement(it)) }
|
||||
|
||||
return MangasPage(mangas.distinctBy { it.url }, false)
|
||||
}
|
||||
|
||||
override fun latestUpdatesSelector() = "#home-chapter div.home-manga"
|
||||
|
||||
override fun latestUpdatesFromElement(element: Element): SManga {
|
||||
val manga = SManga.create()
|
||||
|
||||
manga.setUrlWithoutDomain(element.select("div.hmi-titre a").attr("abs:href"))
|
||||
manga.title = element.select("div.hmi-titre a").text()
|
||||
manga.thumbnail_url = element.select("a.hm-image img").attr("abs:data-src")
|
||||
|
||||
return manga
|
||||
}
|
||||
|
||||
override fun latestUpdatesNextPageSelector() = "not needed"
|
||||
|
||||
// Search
|
||||
|
||||
override fun fetchSearchManga(page: Int, query: String, filters: FilterList): Observable<MangasPage> {
|
||||
return client.newCall(searchMangaRequest(page, query, filters))
|
||||
.asObservableSuccess()
|
||||
.map { response ->
|
||||
searchMangaParse(response, query)
|
||||
}
|
||||
}
|
||||
|
||||
override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request = popularMangaRequest(1)
|
||||
|
||||
private fun searchMangaParse(response: Response, query: String): MangasPage {
|
||||
return MangasPage(popularMangaParse(response).mangas.filter { it.title.contains(query, ignoreCase = true) }, false)
|
||||
}
|
||||
|
||||
override fun searchMangaSelector() = throw UnsupportedOperationException("Not used")
|
||||
|
||||
override fun searchMangaFromElement(element: Element): SManga = throw UnsupportedOperationException("Not used")
|
||||
|
||||
override fun searchMangaNextPageSelector() = throw UnsupportedOperationException("Not used")
|
||||
|
||||
// Details
|
||||
|
||||
override fun mangaDetailsParse(document: Document): SManga {
|
||||
val manga = SManga.create()
|
||||
|
||||
document.select("div.mf-chapitre").let {
|
||||
manga.author = it.select("div.titre div").text().substringAfter("de").trim()
|
||||
// manga.title = it.select("div.titre").text().removeSuffix(manga.author.orEmpty())
|
||||
manga.description = it.select("div.new-main p").text()
|
||||
manga.thumbnail_url = it.select("div.ctt-img img").attr("abs:src")
|
||||
manga.status = parseStatus(it.select("div.sub-i").text())
|
||||
val genres = it.select("div.sub-i").text().substringBefore("Status").substringAfter("Genre :")
|
||||
manga.genre = genres.trim().replace(" ", ", ")
|
||||
}
|
||||
|
||||
return manga
|
||||
}
|
||||
|
||||
private fun parseStatus(status: String) = when {
|
||||
status.contains("En cours") -> SManga.ONGOING
|
||||
status.contains("Terminé") -> SManga.COMPLETED
|
||||
else -> SManga.UNKNOWN
|
||||
}
|
||||
|
||||
// Chapters
|
||||
|
||||
override fun chapterListSelector() = "div.chapitre"
|
||||
|
||||
override fun chapterFromElement(element: Element): SChapter {
|
||||
val chapter = SChapter.create()
|
||||
|
||||
chapter.setUrlWithoutDomain(element.select("a.ch-left").attr("href"))
|
||||
chapter.name = element.select("span.chl-num").text()
|
||||
chapter.date_upload = parseChapterDate(element.select("div.chl-date").text())
|
||||
|
||||
return chapter
|
||||
}
|
||||
|
||||
private fun parseChapterDate(date: String): Long {
|
||||
val value = date.split(" ")[0].toIntOrNull()
|
||||
|
||||
return if (value != null) {
|
||||
when (date.split(" ")[1]) {
|
||||
"minute", "minutes" -> Calendar.getInstance().apply {
|
||||
add(Calendar.MINUTE, value * -1)
|
||||
set(Calendar.SECOND, 0)
|
||||
set(Calendar.MILLISECOND, 0)
|
||||
}.timeInMillis
|
||||
"heure", "heures" -> Calendar.getInstance().apply {
|
||||
add(Calendar.HOUR_OF_DAY, value * -1)
|
||||
set(Calendar.SECOND, 0)
|
||||
set(Calendar.MILLISECOND, 0)
|
||||
}.timeInMillis
|
||||
"jour", "jours" -> Calendar.getInstance().apply {
|
||||
add(Calendar.DATE, value * -1)
|
||||
set(Calendar.SECOND, 0)
|
||||
set(Calendar.MILLISECOND, 0)
|
||||
}.timeInMillis
|
||||
"semaine", "semaines" -> Calendar.getInstance().apply {
|
||||
add(Calendar.DATE, value * 7 * -1)
|
||||
set(Calendar.SECOND, 0)
|
||||
set(Calendar.MILLISECOND, 0)
|
||||
}.timeInMillis
|
||||
"mois" -> Calendar.getInstance().apply {
|
||||
add(Calendar.MONTH, value * -1)
|
||||
set(Calendar.SECOND, 0)
|
||||
set(Calendar.MILLISECOND, 0)
|
||||
}.timeInMillis
|
||||
"an", "ans", "année", "années" -> Calendar.getInstance().apply {
|
||||
add(Calendar.YEAR, value * -1)
|
||||
set(Calendar.SECOND, 0)
|
||||
set(Calendar.MILLISECOND, 0)
|
||||
}.timeInMillis
|
||||
else -> {
|
||||
return 0L
|
||||
}
|
||||
}
|
||||
} else {
|
||||
try {
|
||||
SimpleDateFormat("dd MMM yyyy", Locale.FRENCH).parse(date.substringAfter("le "))?.time ?: 0
|
||||
} catch (_: Exception) {
|
||||
0L
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Pages
|
||||
|
||||
override fun pageListParse(document: Document): List<Page> {
|
||||
val pages = mutableListOf<Page>()
|
||||
|
||||
document.select("div.sc-lel img[id]").forEachIndexed { i, img ->
|
||||
pages.add(Page(i, "", img.attr("abs:data-src")))
|
||||
}
|
||||
|
||||
return pages
|
||||
}
|
||||
|
||||
override fun imageUrlParse(document: Document) = throw UnsupportedOperationException("Not used")
|
||||
|
||||
override fun getFilterList() = FilterList()
|
||||
}
|