MMRCMS (+4 ES sources) (#1300)
MMRCMS (Add LeoManga, Mangadoor, Mangas.PW, submanga)
This commit is contained in:
parent
203ae81d5c
commit
9c36040de4
|
@ -5,7 +5,7 @@ ext {
|
|||
appName = 'Tachiyomi: My Manga Reader CMS (Many sources)'
|
||||
pkgNameSuffix = 'all.mmrcms'
|
||||
extClass = '.MyMangaReaderCMSSources'
|
||||
extVersionCode = 19
|
||||
extVersionCode = 20
|
||||
libVersion = '1.2'
|
||||
}
|
||||
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
package eu.kanade.tachiyomi.extension.all.mmrcms
|
||||
|
||||
// GENERATED FILE, DO NOT MODIFY!
|
||||
//Generated Sat, 13 Jul 2019 13:27:56 -0700
|
||||
//Generated Sun, 14 Jul 2019 15:22:17 -0400
|
||||
|
||||
private const val MMRSOURCE_1 = """{"language":"ar","name":"مانجا اون لاين","base_url":"https://www.on-manga.me","supports_latest":false,"item_url":"https://www.on-manga.me/manga/","categories":[{"id":"1","name":"أكشن"},{"id":"2","name":"مغامرة"},{"id":"3","name":"كوميدي"},{"id":"4","name":"شياطين"},{"id":"5","name":"دراما"},{"id":"6","name":"إيتشي"},{"id":"7","name":"خيال"},{"id":"8","name":"انحراف جنسي"},{"id":"9","name":"حريم"},{"id":"10","name":"تاريخي"},{"id":"11","name":"رعب"},{"id":"12","name":"جوسي"},{"id":"13","name":"فنون قتالية"},{"id":"14","name":"ناضج"},{"id":"15","name":"ميكا"},{"id":"16","name":"غموض"},{"id":"17","name":"وان شوت"},{"id":"18","name":"نفسي"},{"id":"19","name":"رومنسي"},{"id":"20","name":"حياة مدرسية"},{"id":"21","name":"خيال علمي"},{"id":"22","name":"سينين"},{"id":"23","name":"شوجو"},{"id":"24","name":"شوجو أي"},{"id":"25","name":"شونين"},{"id":"26","name":"شونين أي"},{"id":"27","name":"شريحة من الحياة"},{"id":"28","name":"رياضة"},{"id":"29","name":"خارق للطبيعة"},{"id":"30","name":"مأساة"},{"id":"31","name":"مصاصي الدماء"},{"id":"32","name":"سحر"},{"id":"33","name":"ويب تون"},{"id":"34","name":"دوجينشي"}],"tags":"null"}"""
|
||||
private const val MMRSOURCE_1 = """{"language":"ar","name":"مانجا اون لاين","base_url":"https://www.on-manga.me","supports_latest":false,"item_url":"https://www.on-manga.me/manga/","categories":[],"tags":"null"}"""
|
||||
private const val MMRSOURCE_2 = """{"language":"en","name":"Read Comics Online","base_url":"http://readcomicsonline.ru","supports_latest":true,"item_url":"https://readcomicsonline.ru/comic/","categories":[{"id":"1","name":"One Shots \u0026 TPBs"},{"id":"2","name":"DC Comics"},{"id":"3","name":"Marvel Comics"},{"id":"4","name":"Boom Studios"},{"id":"5","name":"Dynamite"},{"id":"6","name":"Rebellion"},{"id":"7","name":"Dark Horse"},{"id":"8","name":"IDW"},{"id":"9","name":"Archie"},{"id":"10","name":"Graphic India"},{"id":"11","name":"Darby Pop"},{"id":"12","name":"Oni Press"},{"id":"13","name":"Icon Comics"},{"id":"14","name":"United Plankton"},{"id":"15","name":"Udon"},{"id":"16","name":"Image Comics"},{"id":"17","name":"Valiant"},{"id":"18","name":"Vertigo"},{"id":"19","name":"Devils Due"},{"id":"20","name":"Aftershock Comics"},{"id":"21","name":"Antartic Press"},{"id":"22","name":"Action Lab"},{"id":"23","name":"American Mythology"},{"id":"24","name":"Zenescope"},{"id":"25","name":"Top Cow"},{"id":"26","name":"Hermes Press"},{"id":"27","name":"451"},{"id":"28","name":"Black Mask"},{"id":"29","name":"Chapterhouse Comics"},{"id":"30","name":"Red 5"},{"id":"31","name":"Heavy Metal"},{"id":"32","name":"Bongo"},{"id":"33","name":"Top Shelf"},{"id":"34","name":"Bubble"},{"id":"35","name":"Boundless"},{"id":"36","name":"Avatar Press"},{"id":"37","name":"Space Goat Productions"},{"id":"38","name":"BroadSword Comics"},{"id":"39","name":"AAM-Markosia"},{"id":"40","name":"Fantagraphics"},{"id":"41","name":"Aspen"},{"id":"42","name":"American Gothic Press"},{"id":"43","name":"Vault"},{"id":"44","name":"215 Ink"},{"id":"45","name":"Abstract Studio"},{"id":"46","name":"Albatross"},{"id":"47","name":"ARH Comix"},{"id":"48","name":"Legendary Comics"},{"id":"49","name":"Monkeybrain"},{"id":"50","name":"Joe Books"},{"id":"51","name":"MAD"},{"id":"52","name":"Comics Experience"},{"id":"53","name":"Alterna Comics"},{"id":"54","name":"Lion Forge"},{"id":"55","name":"Benitez"},{"id":"56","name":"Storm King"},{"id":"57","name":"Sucker"},{"id":"58","name":"Amryl Entertainment"},{"id":"59","name":"Ahoy Comics"}],"tags":"null"}"""
|
||||
private const val MMRSOURCE_3 = """{"language":"en","name":"Biamam Scans","base_url":"http://biamam.com/","supports_latest":false,"item_url":"http://biamam.com/manga/","categories":[],"tags":"null"}"""
|
||||
private const val MMRSOURCE_4 = """{"language":"en","name":"Fallen Angels","base_url":"http://manga.fascans.com","supports_latest":false,"item_url":"https://manga.fascans.com/manga/","categories":[],"tags":"null"}"""
|
||||
|
@ -24,5 +24,9 @@ private const val MMRSOURCE_18 = """{"language":"pl","name":"Nikushima","base_ur
|
|||
private const val MMRSOURCE_19 = """{"language":"ru","name":"Anigai clan","base_url":"http://anigai.ru","supports_latest":false,"item_url":"http://anigai.ru/manga/","categories":[{"id":"1","name":"Боевик"},{"id":"2","name":"Приключения"},{"id":"3","name":"Комедия"},{"id":"4","name":"Додзинси"},{"id":"5","name":"Драма"},{"id":"6","name":"Этти"},{"id":"7","name":"Фэнтези"},{"id":"8","name":"Гендерная интрига"},{"id":"9","name":"Гарем"},{"id":"10","name":"Исторический"},{"id":"11","name":"Ужасы"},{"id":"12","name":"Дзёсэй"},{"id":"13","name":"Боевые искусства"},{"id":"14","name":"Для взрослых (18+)"},{"id":"15","name":"Меха"},{"id":"16","name":"Мистика"},{"id":"17","name":"Сингл"},{"id":"18","name":"Психология"},{"id":"19","name":"Романтика"},{"id":"20","name":"Школа"},{"id":"21","name":"Научная фантастика"},{"id":"22","name":"Сэйнэн"},{"id":"23","name":"Сёдзе"},{"id":"24","name":"Сёдзе-ай"},{"id":"25","name":"Сёнэн"},{"id":"26","name":"Сёнэн-ай"},{"id":"27","name":"Повседневность"},{"id":"28","name":"Спорт"},{"id":"29","name":"Сверхъестественное"},{"id":"30","name":"Трагедия"},{"id":"31","name":"Яой"},{"id":"32","name":"Юри"}],"tags":"null"}"""
|
||||
private const val MMRSOURCE_20 = """{"language":"tr","name":"MangaHanta","base_url":"http://mangahanta.com","supports_latest":false,"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":"ball-room-e-youkoso","name":"Ball Room e Youkoso;"},{"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":"full-drive","name":"Full Drive"},{"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":"hanekoi-lion","name":"Hanekoi Lion"},{"id":"happiness","name":"Happiness"},{"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":"mangahanta","name":"mangahanta"},{"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":"monster-musume-no-iru-nichijou","name":"Monster Musume No Iru Nichijou"},{"id":"mutluluk","name":"Mutluluk"},{"id":"nanatsu-no-taizai","name":"Nanatsu No Taizai"},{"id":"oshimi-shuzo","name":"OSHIMI Shuzo"},{"id":"platina-end","name":"Platina End"},{"id":"platinum-end","name":"Platinum End"},{"id":"sousei-no-onmyouji","name":"Sousei no Onmyouji"},{"id":"sweep-over-the-dance-hall","name":"Sweep over the Dance Hall"},{"id":"the-case-study-of-vanitas","name":"The Case Study of Vanitas"},{"id":"the-seven-deadly-sins","name":"The Seven Deadly Sins"},{"id":"turkce-ceviri","name":"türkçe çeviri"},{"id":"turkce-manga","name":"Türkçe manga"},{"id":"turkce-oku","name":"Türkçe oku"},{"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"}]}"""
|
||||
private const val MMRSOURCE_21 = """{"language":"vi","name":"Fallen Angels Scans","base_url":"http://truyen.fascans.com","supports_latest":false,"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"}],"tags":"null"}"""
|
||||
private const val MMRSOURCE_22 = """{"language":"other","name":"HentaiShark","base_url":"https://www.hentaishark.com","supports_latest":false,"item_url":"https://www.hentaishark.com/manga/","categories":[{"id":"1","name":"Doujinshi"},{"id":"2","name":"Manga"},{"id":"3","name":"Western"},{"id":"4","name":"non-h"},{"id":"5","name":"imageset"},{"id":"6","name":"artistcg"},{"id":"7","name":"misc"}],"tags":"null"}"""
|
||||
val SOURCES: List<String> get() = listOf(MMRSOURCE_1, MMRSOURCE_2, MMRSOURCE_3, MMRSOURCE_4, MMRSOURCE_5, MMRSOURCE_6, MMRSOURCE_7, MMRSOURCE_8, MMRSOURCE_9, MMRSOURCE_10, MMRSOURCE_11, MMRSOURCE_12, MMRSOURCE_13, MMRSOURCE_14, MMRSOURCE_15, MMRSOURCE_16, MMRSOURCE_17, MMRSOURCE_18, MMRSOURCE_19, MMRSOURCE_20, MMRSOURCE_21, MMRSOURCE_22)
|
||||
private const val MMRSOURCE_22 = """{"language":"es","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"}]}"""
|
||||
private const val MMRSOURCE_23 = """{"language":"es","name":"submanga","base_url":"https://submanga.online","supports_latest":false,"item_url":"https://submanga.online/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"}]}"""
|
||||
private const val MMRSOURCE_24 = """{"language":"es","name":"Mangadoor","base_url":"https://mangadoor.com","supports_latest":false,"item_url":"https://mangadoor.com/manga/","categories":[{"id":"1","name":"Acción"},{"id":"2","name":"Aventura"},{"id":"3","name":"Comedia"},{"id":"4","name":"Drama"},{"id":"5","name":"Ecchi"},{"id":"6","name":"Fantasía"},{"id":"7","name":"Gender Bender"},{"id":"8","name":"Harem"},{"id":"9","name":"Histórico"},{"id":"10","name":"Horror"},{"id":"11","name":"Josei"},{"id":"12","name":"Artes Marciales"},{"id":"13","name":"Maduro"},{"id":"14","name":"Mecha"},{"id":"15","name":"Misterio"},{"id":"16","name":"One Shot"},{"id":"17","name":"Psicológico"},{"id":"18","name":"Romance"},{"id":"19","name":"Escolar"},{"id":"20","name":"Ciencia Ficción"},{"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":"Recuentos de la vida"},{"id":"27","name":"Deportes"},{"id":"28","name":"Supernatural"},{"id":"29","name":"Tragedia"},{"id":"30","name":"Yaoi"},{"id":"31","name":"Yuri"},{"id":"32","name":"Demonios"},{"id":"33","name":"Juegos"},{"id":"34","name":"Policial"},{"id":"35","name":"Militar"},{"id":"36","name":"Thriller"},{"id":"37","name":"Autos"},{"id":"38","name":"Música"},{"id":"39","name":"Vampiros"},{"id":"40","name":"Magia"},{"id":"41","name":"Samurai"},{"id":"42","name":"Boys love"},{"id":"43","name":"Hentai"}],"tags":"null"}"""
|
||||
private const val MMRSOURCE_25 = """{"language":"es","name":"Mangas.pw","base_url":"https://mangas.pw","supports_latest":false,"item_url":"https://mangas.pw/manga/","categories":[],"tags":"null"}"""
|
||||
private const val MMRSOURCE_26 = """{"language":"other","name":"HentaiShark","base_url":"https://www.hentaishark.com","supports_latest":false,"item_url":"https://www.hentaishark.com/manga/","categories":[{"id":"1","name":"Doujinshi"},{"id":"2","name":"Manga"},{"id":"3","name":"Western"},{"id":"4","name":"non-h"},{"id":"5","name":"imageset"},{"id":"6","name":"artistcg"},{"id":"7","name":"misc"}],"tags":"null"}"""
|
||||
val SOURCES: List<String> get() = listOf(MMRSOURCE_1, MMRSOURCE_2, MMRSOURCE_3, MMRSOURCE_4, MMRSOURCE_5, MMRSOURCE_6, MMRSOURCE_7, MMRSOURCE_8, MMRSOURCE_9, MMRSOURCE_10, MMRSOURCE_11, MMRSOURCE_12, MMRSOURCE_13, MMRSOURCE_14, MMRSOURCE_15, MMRSOURCE_16, MMRSOURCE_17, MMRSOURCE_18, MMRSOURCE_19, MMRSOURCE_20, MMRSOURCE_21, MMRSOURCE_22, MMRSOURCE_23, MMRSOURCE_24, MMRSOURCE_25, MMRSOURCE_26)
|
||||
|
|
|
@ -226,6 +226,10 @@ class Generator {
|
|||
Triple("ru", "Anigai clan", "http://anigai.ru"),
|
||||
Triple("tr", "MangaHanta", "http://mangahanta.com"),
|
||||
Triple("vi", "Fallen Angels Scans", "http://truyen.fascans.com"),
|
||||
Triple("es", "LeoManga", "https://leomanga.me"),
|
||||
Triple("es", "submanga", "https://submanga.online"),
|
||||
Triple("es", "Mangadoor", "https://mangadoor.com"),
|
||||
Triple("es", "Mangas.pw", "https://mangas.pw"),
|
||||
//NOTE: THIS SOURCE CONTAINS A CUSTOM LANGUAGE SYSTEM (which will be ignored)!
|
||||
Triple("other", "HentaiShark", "https://www.hentaishark.com"))
|
||||
//Now uses wpmanga
|
||||
|
|
|
@ -73,12 +73,13 @@ class MyMangaReaderCMSSource(override val lang: String,
|
|||
private fun internalMangaParse(response: Response): MangasPage {
|
||||
val document = response.asJsoup()
|
||||
|
||||
return MangasPage(document.select("div[class^=col-sm]").map {
|
||||
return MangasPage(document.select("div[class^=col-sm], div.col-xs-6").map {
|
||||
SManga.create().apply {
|
||||
val urlElement = it.getElementsByClass("chart-title")
|
||||
if (urlElement.size == 0) {
|
||||
url = getUrlWithoutBaseUrl(it.select("a").attr("href"))
|
||||
title = it.select("div.caption").text()
|
||||
(it.select("div.caption div").text()).let { if (it.isNotEmpty()) title = title.substringBefore(it)} // For submanga and to not break hentaishark
|
||||
} else {
|
||||
url = getUrlWithoutBaseUrl(urlElement.attr("href"))
|
||||
title = urlElement.text().trim()
|
||||
|
@ -142,63 +143,48 @@ class MyMangaReaderCMSSource(override val lang: String,
|
|||
thumbnail_url = coverGuess(document.select(".row .img-responsive").attr("src"), document.location())
|
||||
description = document.select(".row .well p").text().trim()
|
||||
|
||||
val detailAuthor = setOf<String>("author(s)","autor(es)","auteur(s)","著作","yazar(lar)","mangaka(lar)","pengarang/penulis","pengarang","penulis","autor","المؤلف","перевод")
|
||||
val detailArtist = setOf<String>("artist(s)","artiste(s)","sanatçi(lar)","artista(s)","artist(s)/ilustrator","الرسام","seniman")
|
||||
val detailGenre = setOf<String>("categories","categorías","catégories","ジャンル","kategoriler","categorias","kategorie","التصنيفات","жанр","kategori" )
|
||||
val detailStatus = setOf<String>("status","statut","estado","状態","durum","الحالة","статус")
|
||||
val detailStatusComplete = setOf<String>("complete","مكتملة","complet","completo")
|
||||
val detailStatusOngoing = setOf<String>("ongoing","مستمرة","en cours","em lançamento")
|
||||
val detailDescription = setOf<String>("description","resumen")
|
||||
|
||||
var cur: String? = null
|
||||
for (element in document.select(".row .dl-horizontal").select("dt,dd")) {
|
||||
when (element.tagName()) {
|
||||
"dt" -> cur = element.text().trim().toLowerCase()
|
||||
"dd" -> when (cur) {
|
||||
"author(s)",
|
||||
"autor(es)",
|
||||
"auteur(s)",
|
||||
"著作",
|
||||
"yazar(lar)",
|
||||
"mangaka(lar)",
|
||||
"pengarang/penulis",
|
||||
"pengarang",
|
||||
"penulis",
|
||||
"autor",
|
||||
"المؤلف",
|
||||
"перевод" -> author = element.text()
|
||||
|
||||
"artist(s)",
|
||||
"artiste(s)",
|
||||
"sanatçi(lar)",
|
||||
"artista(s)",
|
||||
"artist(s)/ilustrator",
|
||||
"الرسام",
|
||||
"seniman" -> artist = element.text()
|
||||
|
||||
"categories",
|
||||
"categorías",
|
||||
"catégories",
|
||||
"ジャンル",
|
||||
"kategoriler",
|
||||
"categorias",
|
||||
"kategorie",
|
||||
"التصنيفات",
|
||||
"жанр",
|
||||
"kategori" -> genre = element.getElementsByTag("a").joinToString {
|
||||
in detailAuthor -> author = element.text()
|
||||
in detailArtist -> artist = element.text()
|
||||
in detailGenre-> genre = element.getElementsByTag("a").joinToString {
|
||||
it.text().trim()
|
||||
}
|
||||
|
||||
"status",
|
||||
"statut",
|
||||
"estado",
|
||||
"状態",
|
||||
"durum",
|
||||
"الحالة",
|
||||
"статус" -> status = when (element.text().trim().toLowerCase()) {
|
||||
"complete",
|
||||
"مكتملة",
|
||||
"complet" -> SManga.COMPLETED
|
||||
"ongoing",
|
||||
"مستمرة",
|
||||
"en cours" -> SManga.ONGOING
|
||||
in detailStatus -> status = when (element.text().trim().toLowerCase()) {
|
||||
in detailStatusComplete -> SManga.COMPLETED
|
||||
in detailStatusOngoing -> SManga.ONGOING
|
||||
else -> SManga.UNKNOWN
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
// When details are in a .panel instead of .row
|
||||
for (element in document.select("div.panel span.list-group-item ")) {
|
||||
when (element.select("b").text().toLowerCase().substringBefore(":")) {
|
||||
in detailAuthor -> author = element.select("b + a").text()
|
||||
in detailArtist -> artist = element.select("b + a").text()
|
||||
in detailGenre -> genre = element.getElementsByTag("a").joinToString {
|
||||
it.text().trim()
|
||||
}
|
||||
in detailStatus -> status = when (element.select("b + span.label").text().toLowerCase()) {
|
||||
in detailStatusComplete -> SManga.COMPLETED
|
||||
in detailStatusOngoing -> SManga.ONGOING
|
||||
else -> SManga.UNKNOWN
|
||||
}
|
||||
in detailDescription -> description = element.ownText()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -216,7 +202,7 @@ class MyMangaReaderCMSSource(override val lang: String,
|
|||
/**
|
||||
* Returns the Jsoup selector that returns a list of [Element] corresponding to each chapter.
|
||||
*/
|
||||
fun chapterListSelector() = "ul[class^=chapters] > li:not(.btn)"
|
||||
fun chapterListSelector() = "ul[class^=chapters] > li:not(.btn), table.table tr"
|
||||
//Some websites add characters after "chapters" thus the need of checking classes that starts with "chapters"
|
||||
|
||||
/**
|
||||
|
@ -225,40 +211,59 @@ class MyMangaReaderCMSSource(override val lang: String,
|
|||
* @param element an element obtained from [chapterListSelector].
|
||||
*/
|
||||
private fun nullableChapterFromElement(element: Element): SChapter? {
|
||||
val titleWrapper = element.select("[class^=chapter-title-rtl]").first()
|
||||
//Some websites add characters after "..-rtl" thus the need of checking classes that starts with that
|
||||
val url = titleWrapper.getElementsByTag("a").attr("href")
|
||||
|
||||
// Ensure chapter actually links to a manga
|
||||
// Some websites use the chapters box to link to post announcements
|
||||
// The check is skipped if mangas are stored in the root of the website (ex '/one-piece' without a segment like '/manga/one-piece')
|
||||
if (itemUrlPath!=null&& !Uri.parse(url).pathSegments.firstOrNull().equals(itemUrlPath, true)) {
|
||||
return null
|
||||
}
|
||||
|
||||
val chapter = SChapter.create()
|
||||
|
||||
chapter.url = getUrlWithoutBaseUrl(url)
|
||||
chapter.name = titleWrapper.text()
|
||||
try {
|
||||
val titleWrapper = element.select("[class^=chapter-title-rtl]").first()
|
||||
//Some websites add characters after "..-rtl" thus the need of checking classes that starts with that
|
||||
val url = titleWrapper.getElementsByTag("a").attr("href")
|
||||
|
||||
// Parse date
|
||||
val dateText = element.getElementsByClass("date-chapter-title-rtl").text().trim()
|
||||
val formattedDate = try {
|
||||
// Ensure chapter actually links to a manga
|
||||
// Some websites use the chapters box to link to post announcements
|
||||
// The check is skipped if mangas are stored in the root of the website (ex '/one-piece' without a segment like '/manga/one-piece')
|
||||
if (itemUrlPath != null && !Uri.parse(url).pathSegments.firstOrNull().equals(itemUrlPath, true)) {
|
||||
return null
|
||||
}
|
||||
|
||||
chapter.url = getUrlWithoutBaseUrl(url)
|
||||
chapter.name = titleWrapper.text()
|
||||
|
||||
// Parse date
|
||||
val dateText = element.getElementsByClass("date-chapter-title-rtl").text().trim()
|
||||
chapter.date_upload = parseDate(dateText)
|
||||
|
||||
return chapter
|
||||
} catch (e: NullPointerException) {
|
||||
// For chapter list in a table
|
||||
if (element.select("td").hasText()) {
|
||||
element.select("td a").let {
|
||||
chapter.setUrlWithoutDomain(it.attr("href"))
|
||||
chapter.name = it.text()
|
||||
}
|
||||
val tableDateText = element.select("td + td").text()
|
||||
chapter.date_upload = parseDate(tableDateText)
|
||||
|
||||
return chapter
|
||||
}
|
||||
}
|
||||
|
||||
return null
|
||||
}
|
||||
|
||||
private fun parseDate (dateText: String): Long {
|
||||
return try {
|
||||
DATE_FORMAT.parse(dateText).time
|
||||
} catch (e: ParseException) {
|
||||
0L
|
||||
}
|
||||
chapter.date_upload = formattedDate
|
||||
|
||||
return chapter
|
||||
}
|
||||
|
||||
override fun pageListParse(response: Response) = response.asJsoup().select("#all > .img-responsive")
|
||||
.mapIndexed { i, e ->
|
||||
var url = e.attr("data-src")
|
||||
var url = e.attr("abs:data-src")
|
||||
|
||||
if (url.isBlank()) {
|
||||
url = e.attr("src")
|
||||
url = e.attr("abs:src")
|
||||
}
|
||||
|
||||
url = url.trim()
|
||||
|
|
Loading…
Reference in New Issue