From 9c36040de48b7c5557dbf510fd98eda87007e2d4 Mon Sep 17 00:00:00 2001 From: Mike <51273546+SnakeDoc83@users.noreply.github.com> Date: Tue, 16 Jul 2019 07:35:11 -0400 Subject: [PATCH] MMRCMS (+4 ES sources) (#1300) MMRCMS (Add LeoManga, Mangadoor, Mangas.PW, submanga) --- src/all/mmrcms/build.gradle | 2 +- .../extension/all/mmrcms/GeneratedSources.kt | 12 +- .../extension/all/mmrcms/Generator.kt | 4 + .../all/mmrcms/MyMangaReaderCMSSource.kt | 141 +++++++++--------- 4 files changed, 86 insertions(+), 73 deletions(-) diff --git a/src/all/mmrcms/build.gradle b/src/all/mmrcms/build.gradle index 3797dbb97..a9b0619e3 100644 --- a/src/all/mmrcms/build.gradle +++ b/src/all/mmrcms/build.gradle @@ -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' } diff --git a/src/all/mmrcms/src/eu/kanade/tachiyomi/extension/all/mmrcms/GeneratedSources.kt b/src/all/mmrcms/src/eu/kanade/tachiyomi/extension/all/mmrcms/GeneratedSources.kt index 3474740a8..e15e16585 100644 --- a/src/all/mmrcms/src/eu/kanade/tachiyomi/extension/all/mmrcms/GeneratedSources.kt +++ b/src/all/mmrcms/src/eu/kanade/tachiyomi/extension/all/mmrcms/GeneratedSources.kt @@ -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 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 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) diff --git a/src/all/mmrcms/src/eu/kanade/tachiyomi/extension/all/mmrcms/Generator.kt b/src/all/mmrcms/src/eu/kanade/tachiyomi/extension/all/mmrcms/Generator.kt index 7da22c183..4c0a11d51 100644 --- a/src/all/mmrcms/src/eu/kanade/tachiyomi/extension/all/mmrcms/Generator.kt +++ b/src/all/mmrcms/src/eu/kanade/tachiyomi/extension/all/mmrcms/Generator.kt @@ -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 diff --git a/src/all/mmrcms/src/eu/kanade/tachiyomi/extension/all/mmrcms/MyMangaReaderCMSSource.kt b/src/all/mmrcms/src/eu/kanade/tachiyomi/extension/all/mmrcms/MyMangaReaderCMSSource.kt index b38d2915a..8ba6315e2 100644 --- a/src/all/mmrcms/src/eu/kanade/tachiyomi/extension/all/mmrcms/MyMangaReaderCMSSource.kt +++ b/src/all/mmrcms/src/eu/kanade/tachiyomi/extension/all/mmrcms/MyMangaReaderCMSSource.kt @@ -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("author(s)","autor(es)","auteur(s)","著作","yazar(lar)","mangaka(lar)","pengarang/penulis","pengarang","penulis","autor","المؤلف","перевод") + val detailArtist = setOf("artist(s)","artiste(s)","sanatçi(lar)","artista(s)","artist(s)/ilustrator","الرسام","seniman") + val detailGenre = setOf("categories","categorías","catégories","ジャンル","kategoriler","categorias","kategorie","التصنيفات","жанр","kategori" ) + val detailStatus = setOf("status","statut","estado","状態","durum","الحالة","статус") + val detailStatusComplete = setOf("complete","مكتملة","complet","completo") + val detailStatusOngoing = setOf("ongoing","مستمرة","en cours","em lançamento") + val detailDescription = setOf("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()