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
This commit is contained in:
stevenyomi 2023-04-08 10:17:13 +08:00 committed by GitHub
parent 1dfe90917d
commit dbfd751f3d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
93 changed files with 1 additions and 337 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 345 KiB

View File

@ -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")

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 146 KiB

View File

@ -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
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 113 KiB

View File

@ -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),
)

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 193 KiB

View File

@ -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")))

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 277 KiB

View File

@ -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")))

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 37 KiB

View File

@ -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")),
)

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 187 KiB

View File

@ -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)
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 65 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 213 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 169 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 175 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 71 KiB

View File

@ -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),

View File

@ -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),

View File

@ -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"),

View File

@ -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":[]}"""

View File

@ -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),
)

View File

@ -1,2 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest package="eu.kanade.tachiyomi.extension" />

View File

@ -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"

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 118 KiB

View File

@ -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()
}