From 4b6e56e0238cdb53be27ebf251a990d9cd70d544 Mon Sep 17 00:00:00 2001 From: kodjomoustapha <107993382+kodjodevf@users.noreply.github.com> Date: Fri, 7 Jul 2023 21:43:56 +0100 Subject: [PATCH] first commit --- index.json | 3107 ++++++++++++++++++ model/source.dart | 60 + multisrc/heancms/heancms-v0.0.1.dart | 203 ++ multisrc/heancms/sources.dart | 34 + multisrc/madara/madara-v0.0.1.dart | 282 ++ multisrc/madara/sources.dart | 637 ++++ multisrc/mangareader/mangareader-v0.0.1.dart | 194 ++ multisrc/mangareader/sources.dart | 927 ++++++ multisrc/mmrcms/mmrcms-v0.0.1.dart | 173 + multisrc/mmrcms/sources.dart | 166 + sources_generator.dart | 32 + src/all/comick/comick-v0.0.1.dart | 138 + src/all/comick/sources.dart | 221 ++ src/all/mangadex/mangadex-v0.0.1.dart | 385 +++ src/all/mangadex/sources.dart | 216 ++ src/en/mangahere/mangahere-v0.0.1.dart | 210 ++ src/en/mangahere/source.dart | 17 + 17 files changed, 7002 insertions(+) create mode 100644 index.json create mode 100644 model/source.dart create mode 100644 multisrc/heancms/heancms-v0.0.1.dart create mode 100644 multisrc/heancms/sources.dart create mode 100644 multisrc/madara/madara-v0.0.1.dart create mode 100644 multisrc/madara/sources.dart create mode 100644 multisrc/mangareader/mangareader-v0.0.1.dart create mode 100644 multisrc/mangareader/sources.dart create mode 100644 multisrc/mmrcms/mmrcms-v0.0.1.dart create mode 100644 multisrc/mmrcms/sources.dart create mode 100644 sources_generator.dart create mode 100644 src/all/comick/comick-v0.0.1.dart create mode 100644 src/all/comick/sources.dart create mode 100644 src/all/mangadex/mangadex-v0.0.1.dart create mode 100644 src/all/mangadex/sources.dart create mode 100644 src/en/mangahere/mangahere-v0.0.1.dart create mode 100644 src/en/mangahere/source.dart diff --git a/index.json b/index.json new file mode 100644 index 00000000..4da0ec88 --- /dev/null +++ b/index.json @@ -0,0 +1,3107 @@ +[ + { + "name": "FR-Scan", + "id": 669019889, + "baseUrl": "https://fr-scan.com", + "lang": "fr", + "typeSource": "madara", + "iconUrl": "", + "dateFormat": "MMMM d, yyyy", + "dateFormatLocale": "fr", + "isNsfw": false, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/multisrc/madara/madara-v0.0.1.dart", + "apiUrl": "", + "version": "0.0.1" + }, + { + "name": "AstralManga", + "id": 1028022993, + "baseUrl": "https://astral-manga.fr", + "lang": "fr", + "typeSource": "madara", + "iconUrl": "", + "dateFormat": "dd/mm/yyyy", + "dateFormatLocale": "fr", + "isNsfw": false, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/multisrc/madara/madara-v0.0.1.dart", + "apiUrl": "", + "version": "0.0.1" + }, + { + "name": "Akuma no Tenshi", + "id": 781005881, + "baseUrl": "https://akumanotenshi.com", + "lang": "tr", + "typeSource": "madara", + "iconUrl": "", + "dateFormat": "dd/MM/yyyy", + "dateFormatLocale": "pt-BR", + "isNsfw": false, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/multisrc/madara/madara-v0.0.1.dart", + "apiUrl": "", + "version": "0.0.1" + }, + { + "name": "Adult Webtoon", + "id": 772321498, + "baseUrl": "https://adultwebtoon.com", + "lang": "en", + "typeSource": "madara", + "iconUrl": "", + "dateFormat": "MMMM dd, yyyy", + "dateFormatLocale": "en_US", + "isNsfw": true, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/multisrc/madara/madara-v0.0.1.dart", + "apiUrl": "", + "version": "0.0.1" + }, + { + "name": "ArazNovel", + "id": 966932111, + "baseUrl": "https://www.araznovel.com", + "lang": "tr", + "typeSource": "madara", + "iconUrl": "", + "dateFormat": "d MMMM yyyy", + "dateFormatLocale": "en", + "isNsfw": false, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/multisrc/madara/madara-v0.0.1.dart", + "apiUrl": "", + "version": "0.0.1" + }, + { + "name": "BestManga", + "id": 926276360, + "baseUrl": "https://bestmanga.club", + "lang": "ru", + "typeSource": "madara", + "iconUrl": "", + "dateFormat": "dd.MM.yyyy", + "dateFormatLocale": "ru", + "isNsfw": false, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/multisrc/madara/madara-v0.0.1.dart", + "apiUrl": "", + "version": "0.0.1" + }, + { + "name": "Chibi Manga", + "id": 105430403, + "baseUrl": "https://www.cmreader.info", + "lang": "en", + "typeSource": "madara", + "iconUrl": "", + "dateFormat": "MMMM dd, yyyy", + "dateFormatLocale": "en_US", + "isNsfw": false, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/multisrc/madara/madara-v0.0.1.dart", + "apiUrl": "", + "version": "0.0.1" + }, + { + "name": "CookieToon", + "id": 942249414, + "baseUrl": "https://cookietoon.online", + "lang": "pt-br", + "typeSource": "madara", + "iconUrl": "", + "dateFormat": "dd/MM/yyyy", + "dateFormatLocale": "pt-BR", + "isNsfw": false, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/multisrc/madara/madara-v0.0.1.dart", + "apiUrl": "", + "version": "0.0.1" + }, + { + "name": "Drope Scan", + "id": 1009900715, + "baseUrl": "https://dropescan.com", + "lang": "pt-br", + "typeSource": "madara", + "iconUrl": "", + "dateFormat": "dd/MM/yyyy", + "dateFormatLocale": "pt-BR", + "isNsfw": false, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/multisrc/madara/madara-v0.0.1.dart", + "apiUrl": "", + "version": "0.0.1" + }, + { + "name": "EvaScans", + "id": 439004766, + "baseUrl": "https://evascans.com", + "lang": "tr", + "typeSource": "madara", + "iconUrl": "", + "dateFormat": "MMM d, yyy", + "dateFormatLocale": "tr", + "isNsfw": false, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/multisrc/madara/madara-v0.0.1.dart", + "apiUrl": "", + "version": "0.0.1" + }, + { + "name": "Final Scans", + "id": 477960837, + "baseUrl": "https://finalscans.com", + "lang": "pt-br", + "typeSource": "madara", + "iconUrl": "", + "dateFormat": "MMMM d, yyyy", + "dateFormatLocale": "pt-BR", + "isNsfw": true, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/multisrc/madara/madara-v0.0.1.dart", + "apiUrl": "", + "version": "0.0.1" + }, + { + "name": "Glory Manga", + "id": 284318957, + "baseUrl": "https://glorymanga.com", + "lang": "tr", + "typeSource": "madara", + "iconUrl": "", + "dateFormat": "dd/MM/yyy", + "dateFormatLocale": "tr", + "isNsfw": false, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/multisrc/madara/madara-v0.0.1.dart", + "apiUrl": "", + "version": "0.0.1" + }, + { + "name": "Hentai Manga", + "id": 380525964, + "baseUrl": "https://hentaimanga.me", + "lang": "en", + "typeSource": "madara", + "iconUrl": "", + "dateFormat": "MMMM d, yyyy", + "dateFormatLocale": "en_US", + "isNsfw": true, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/multisrc/madara/madara-v0.0.1.dart", + "apiUrl": "", + "version": "0.0.1" + }, + { + "name": "HentaiWebtoon", + "id": 1002766402, + "baseUrl": "https://hentaiwebtoon.com", + "lang": "en", + "typeSource": "madara", + "iconUrl": "", + "dateFormat": "MMMM d, yyyy", + "dateFormatLocale": "en_US", + "isNsfw": true, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/multisrc/madara/madara-v0.0.1.dart", + "apiUrl": "", + "version": "0.0.1" + }, + { + "name": "Ikifeng", + "id": 852484272, + "baseUrl": "https://ikifeng.com", + "lang": "es", + "typeSource": "madara", + "iconUrl": "", + "dateFormat": "dd/MM/yyyy", + "dateFormatLocale": "es", + "isNsfw": true, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/multisrc/madara/madara-v0.0.1.dart", + "apiUrl": "", + "version": "0.0.1" + }, + { + "name": "Inmortal Scan", + "id": 809387434, + "baseUrl": "https://manga.mundodrama.site", + "lang": "es", + "typeSource": "madara", + "iconUrl": "", + "dateFormat": "MMMM d, yyyy", + "dateFormatLocale": "es", + "isNsfw": false, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/multisrc/madara/madara-v0.0.1.dart", + "apiUrl": "", + "version": "0.0.1" + }, + { + "name": "Its Your Right Manhua", + "id": 71580703, + "baseUrl": "https://itsyourightmanhua.com/", + "lang": "en", + "typeSource": "madara", + "iconUrl": "", + "dateFormat": "MMMM d, yyyy", + "dateFormatLocale": "en_US", + "isNsfw": false, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/multisrc/madara/madara-v0.0.1.dart", + "apiUrl": "", + "version": "0.0.1" + }, + { + "name": "Kami Sama Explorer", + "id": 797019242, + "baseUrl": "https://leitor.kamisama.com.br", + "lang": "pt-br", + "typeSource": "madara", + "iconUrl": "", + "dateFormat": "dd 'de' MMMM 'de' yyyy", + "dateFormatLocale": "pt-BR", + "isNsfw": false, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/multisrc/madara/madara-v0.0.1.dart", + "apiUrl": "", + "version": "0.0.1" + }, + { + "name": "KlikManga", + "id": 325512770, + "baseUrl": "https://klikmanga.id", + "lang": "id", + "typeSource": "madara", + "iconUrl": "", + "dateFormat": "MMMM dd, yyyy", + "dateFormatLocale": "id", + "isNsfw": false, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/multisrc/madara/madara-v0.0.1.dart", + "apiUrl": "", + "version": "0.0.1" + }, + { + "name": "KSGroupScans", + "id": 374902680, + "baseUrl": "https://ksgroupscans.com", + "lang": "en", + "typeSource": "madara", + "iconUrl": "", + "dateFormat": "MMMM dd, yyyy", + "dateFormatLocale": "en_US", + "isNsfw": false, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/multisrc/madara/madara-v0.0.1.dart", + "apiUrl": "", + "version": "0.0.1" + }, + { + "name": "LHTranslation", + "id": 21247797, + "baseUrl": "https://lhtranslation.net", + "lang": "en", + "typeSource": "madara", + "iconUrl": "", + "dateFormat": "MMMM dd, yyyy", + "dateFormatLocale": "en_US", + "isNsfw": false, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/multisrc/madara/madara-v0.0.1.dart", + "apiUrl": "", + "version": "0.0.1" + }, + { + "name": "Lolicon", + "id": 526980015, + "baseUrl": "https://lolicon.mobi", + "lang": "en", + "typeSource": "madara", + "iconUrl": "", + "dateFormat": "MMMM dd, yyyy", + "dateFormatLocale": "en_US", + "isNsfw": true, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/multisrc/madara/madara-v0.0.1.dart", + "apiUrl": "", + "version": "0.0.1" + }, + { + "name": "Lord Manga", + "id": 596414805, + "baseUrl": "https://lordmanga.com", + "lang": "en", + "typeSource": "madara", + "iconUrl": "", + "dateFormat": "MMMM d, yyyy", + "dateFormatLocale": "en_US", + "isNsfw": false, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/multisrc/madara/madara-v0.0.1.dart", + "apiUrl": "", + "version": "0.0.1" + }, + { + "name": "MangaVisa", + "id": 433907810, + "baseUrl": "https://mangavisa.com", + "lang": "en", + "typeSource": "madara", + "iconUrl": "", + "dateFormat": "MMMM dd, yyyy", + "dateFormatLocale": "en_US", + "isNsfw": false, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/multisrc/madara/madara-v0.0.1.dart", + "apiUrl": "", + "version": "0.0.1" + }, + { + "name": "MangaClash", + "id": 1022665553, + "baseUrl": "https://mangaclash.com", + "lang": "en", + "typeSource": "madara", + "iconUrl": "", + "dateFormat": "MM/dd/yy", + "dateFormatLocale": "en_US", + "isNsfw": false, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/multisrc/madara/madara-v0.0.1.dart", + "apiUrl": "", + "version": "0.0.1" + }, + { + "name": "Manga District", + "id": 1005025423, + "baseUrl": "https://mangadistrict.com", + "lang": "tr", + "typeSource": "madara", + "iconUrl": "", + "dateFormat": "MMMM d, yyyy", + "dateFormatLocale": "en_US", + "isNsfw": true, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/multisrc/madara/madara-v0.0.1.dart", + "apiUrl": "", + "version": "0.0.1" + }, + { + "name": "Manga-fast.com", + "id": 304908872, + "baseUrl": "https://manga-fast.com", + "lang": "en", + "typeSource": "madara", + "iconUrl": "", + "dateFormat": "d MMMM'،' yyyy", + "dateFormatLocale": "en_US", + "isNsfw": false, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/multisrc/madara/madara-v0.0.1.dart", + "apiUrl": "", + "version": "0.0.1" + }, + { + "name": "Manga Fenix", + "id": 533195191, + "baseUrl": "https://manga-fenix.com", + "lang": "es", + "typeSource": "madara", + "iconUrl": "", + "dateFormat": "MMMM d, yyyy", + "dateFormatLocale": "es", + "isNsfw": false, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/multisrc/madara/madara-v0.0.1.dart", + "apiUrl": "", + "version": "0.0.1" + }, + { + "name": "MangaFreak.online", + "id": 223793266, + "baseUrl": "https://mangafreak.online", + "lang": "en", + "typeSource": "madara", + "iconUrl": "", + "dateFormat": "d MMMM، yyy", + "dateFormatLocale": "en_US", + "isNsfw": false, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/multisrc/madara/madara-v0.0.1.dart", + "apiUrl": "", + "version": "0.0.1" + }, + { + "name": "MangaGreat", + "id": 1054806605, + "baseUrl": "https://mangagreat.com", + "lang": "en", + "typeSource": "madara", + "iconUrl": "", + "dateFormat": "MMMM dd, yyyy", + "dateFormatLocale": "en_US", + "isNsfw": false, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/multisrc/madara/madara-v0.0.1.dart", + "apiUrl": "", + "version": "0.0.1" + }, + { + "name": "Manga Hentai", + "id": 941440375, + "baseUrl": "https://mangahentai.me", + "lang": "en", + "typeSource": "madara", + "iconUrl": "", + "dateFormat": "MMMM dd, yyyy", + "dateFormatLocale": "en_US", + "isNsfw": true, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/multisrc/madara/madara-v0.0.1.dart", + "apiUrl": "", + "version": "0.0.1" + }, + { + "name": "MangaMe", + "id": 322854945, + "baseUrl": "https://mangame.org", + "lang": "en", + "typeSource": "madara", + "iconUrl": "", + "dateFormat": "dd.MM.yyyy", + "dateFormatLocale": "en_US", + "isNsfw": false, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/multisrc/madara/madara-v0.0.1.dart", + "apiUrl": "", + "version": "0.0.1" + }, + { + "name": "Manga One Love", + "id": 1052625940, + "baseUrl": "https://mangaonelove.site", + "lang": "ru", + "typeSource": "madara", + "iconUrl": "", + "dateFormat": "dd.MM.yyyy", + "dateFormatLocale": "en_US", + "isNsfw": true, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/multisrc/madara/madara-v0.0.1.dart", + "apiUrl": "", + "version": "0.0.1" + }, + { + "name": "Manga Read", + "id": 256879643, + "baseUrl": "https://mangaread.co", + "lang": "en", + "typeSource": "madara", + "iconUrl": "", + "dateFormat": "yyyy-MM-dd", + "dateFormatLocale": "en_US", + "isNsfw": false, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/multisrc/madara/madara-v0.0.1.dart", + "apiUrl": "", + "version": "0.0.1" + }, + { + "name": "MangaRolls", + "id": 720109919, + "baseUrl": "https://mangarolls.com", + "lang": "en", + "typeSource": "madara", + "iconUrl": "", + "dateFormat": "MMMM dd, yyyy", + "dateFormatLocale": "en_US", + "isNsfw": false, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/multisrc/madara/madara-v0.0.1.dart", + "apiUrl": "", + "version": "0.0.1" + }, + { + "name": "Manga Şehri", + "id": 865354788, + "baseUrl": "https://mangasehri.com", + "lang": "tr", + "typeSource": "madara", + "iconUrl": "", + "dateFormat": "dd/MM/yyy", + "dateFormatLocale": "tr", + "isNsfw": false, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/multisrc/madara/madara-v0.0.1.dart", + "apiUrl": "", + "version": "0.0.1" + }, + { + "name": "Mangasushi", + "id": 224429716, + "baseUrl": "https://mangasushi.org", + "lang": "en", + "typeSource": "madara", + "iconUrl": "", + "dateFormat": "MMMM dd, yyyy", + "dateFormatLocale": "en_US", + "isNsfw": false, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/multisrc/madara/madara-v0.0.1.dart", + "apiUrl": "", + "version": "0.0.1" + }, + { + "name": "Manhwa68", + "id": 1002141127, + "baseUrl": "https://manhwa68.com", + "lang": "en", + "typeSource": "madara", + "iconUrl": "", + "dateFormat": "MMMM d, yyyy", + "dateFormatLocale": "en_US", + "isNsfw": true, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/multisrc/madara/madara-v0.0.1.dart", + "apiUrl": "", + "version": "0.0.1" + }, + { + "name": "Manhwua.fans", + "id": 611350226, + "baseUrl": "https://manhwua.fans", + "lang": "en", + "typeSource": "madara", + "iconUrl": "", + "dateFormat": "yyyy'年'M'月'd", + "dateFormatLocale": "en_US", + "isNsfw": false, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/multisrc/madara/madara-v0.0.1.dart", + "apiUrl": "", + "version": "0.0.1" + }, + { + "name": "ManyToon.me", + "id": 435647617, + "baseUrl": "https://manytoon.me", + "lang": "en", + "typeSource": "madara", + "iconUrl": "", + "dateFormat": "MMMM d, yyyy", + "dateFormatLocale": "en_US", + "isNsfw": true, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/multisrc/madara/madara-v0.0.1.dart", + "apiUrl": "", + "version": "0.0.1" + }, + { + "name": "Milftoon", + "id": 381914974, + "baseUrl": "https://milftoon.xxx", + "lang": "en", + "typeSource": "madara", + "iconUrl": "", + "dateFormat": "d MMMM, yyyy", + "dateFormatLocale": "en_US", + "isNsfw": true, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/multisrc/madara/madara-v0.0.1.dart", + "apiUrl": "", + "version": "0.0.1" + }, + { + "name": "MurimScan", + "id": 104886226, + "baseUrl": "https://murimscan.run", + "lang": "en", + "typeSource": "madara", + "iconUrl": "", + "dateFormat": "MMMM d, yyyy", + "dateFormatLocale": "en_US", + "isNsfw": true, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/multisrc/madara/madara-v0.0.1.dart", + "apiUrl": "", + "version": "0.0.1" + }, + { + "name": "Ninja Scan", + "id": 334761951, + "baseUrl": "https://ninjascan.xyz", + "lang": "pt-br", + "typeSource": "madara", + "iconUrl": "", + "dateFormat": "dd 'de' MMMMM 'de' yyyy", + "dateFormatLocale": "pt-BR", + "isNsfw": false, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/multisrc/madara/madara-v0.0.1.dart", + "apiUrl": "", + "version": "0.0.1" + }, + { + "name": "NovelCrow", + "id": 768834856, + "baseUrl": "https://novelcrow.com", + "lang": "en", + "typeSource": "madara", + "iconUrl": "", + "dateFormat": "MMMM dd, yyyy", + "dateFormatLocale": "en_US", + "isNsfw": true, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/multisrc/madara/madara-v0.0.1.dart", + "apiUrl": "", + "version": "0.0.1" + }, + { + "name": "Pirulito Rosa", + "id": 716955506, + "baseUrl": "https://pirulitorosa.site", + "lang": "pt-br", + "typeSource": "madara", + "iconUrl": "", + "dateFormat": "dd/MM/yyy", + "dateFormatLocale": "pt-BR", + "isNsfw": true, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/multisrc/madara/madara-v0.0.1.dart", + "apiUrl": "", + "version": "0.0.1" + }, + { + "name": "RagnarokScan", + "id": 718180358, + "baseUrl": "https://ragnarokscan.com", + "lang": "es", + "typeSource": "madara", + "iconUrl": "", + "dateFormat": "MMMMM dd, yyyy", + "dateFormatLocale": "es", + "isNsfw": false, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/multisrc/madara/madara-v0.0.1.dart", + "apiUrl": "", + "version": "0.0.1" + }, + { + "name": "Ragnarok Scanlation", + "id": 1045851788, + "baseUrl": "https://ragnarokscanlation.com", + "lang": "es", + "typeSource": "madara", + "iconUrl": "", + "dateFormat": "MMMM d, yyyy", + "dateFormatLocale": "es", + "isNsfw": false, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/multisrc/madara/madara-v0.0.1.dart", + "apiUrl": "", + "version": "0.0.1" + }, + { + "name": "Rio2 Manga", + "id": 110090511, + "baseUrl": "https://rio2manga.com", + "lang": "en", + "typeSource": "madara", + "iconUrl": "", + "dateFormat": "MMMM dd, yyyy", + "dateFormatLocale": "en_US", + "isNsfw": false, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/multisrc/madara/madara-v0.0.1.dart", + "apiUrl": "", + "version": "0.0.1" + }, + { + "name": "Romantik Manga", + "id": 944131896, + "baseUrl": "https://rio2manga.com", + "lang": "tr", + "typeSource": "madara", + "iconUrl": "", + "dateFormat": "MMMM d, yyyy", + "dateFormatLocale": "en_US", + "isNsfw": false, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/multisrc/madara/madara-v0.0.1.dart", + "apiUrl": "", + "version": "0.0.1" + }, + { + "name": "SamuraiScan", + "id": 76766511, + "baseUrl": "https://samuraiscan.com", + "lang": "es", + "typeSource": "madara", + "iconUrl": "", + "dateFormat": "MMMM d, yyyy", + "dateFormatLocale": "es", + "isNsfw": false, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/multisrc/madara/madara-v0.0.1.dart", + "apiUrl": "", + "version": "0.0.1" + }, + { + "name": "Sdl scans", + "id": 759077599, + "baseUrl": "https://sdlscans.com", + "lang": "es", + "typeSource": "madara", + "iconUrl": "", + "dateFormat": "MMMMM dd, yyyy", + "dateFormatLocale": "es", + "isNsfw": false, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/multisrc/madara/madara-v0.0.1.dart", + "apiUrl": "", + "version": "0.0.1" + }, + { + "name": "Shayami", + "id": 341491591, + "baseUrl": "https://shayami.com", + "lang": "es", + "typeSource": "madara", + "iconUrl": "", + "dateFormat": "MMM d, yyy", + "dateFormatLocale": "es", + "isNsfw": false, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/multisrc/madara/madara-v0.0.1.dart", + "apiUrl": "", + "version": "0.0.1" + }, + { + "name": "Taurus Fansub", + "id": 1036726988, + "baseUrl": "https://tatakaescan.com", + "lang": "es", + "typeSource": "madara", + "iconUrl": "", + "dateFormat": "dd/MM/yyy", + "dateFormatLocale": "es", + "isNsfw": false, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/multisrc/madara/madara-v0.0.1.dart", + "apiUrl": "", + "version": "0.0.1" + }, + { + "name": "The Sugar", + "id": 686092783, + "baseUrl": "https://thesugarscan.com", + "lang": "pt-br", + "typeSource": "madara", + "iconUrl": "", + "dateFormat": "dd/MM/yyyy", + "dateFormatLocale": "pt-BR", + "isNsfw": false, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/multisrc/madara/madara-v0.0.1.dart", + "apiUrl": "", + "version": "0.0.1" + }, + { + "name": "365Manga", + "id": 256359338, + "baseUrl": "https://365manga.com", + "lang": "en", + "typeSource": "madara", + "iconUrl": "", + "dateFormat": "MMMM dd, yyyy", + "dateFormatLocale": "en_US", + "isNsfw": false, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/multisrc/madara/madara-v0.0.1.dart", + "apiUrl": "", + "version": "0.0.1" + }, + { + "name": "Tortuga Ceviri", + "id": 294602572, + "baseUrl": "https://tortuga-ceviri.com", + "lang": "tr", + "typeSource": "madara", + "iconUrl": "", + "dateFormat": "MMMM d, yyyy", + "dateFormatLocale": "tr", + "isNsfw": false, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/multisrc/madara/madara-v0.0.1.dart", + "apiUrl": "", + "version": "0.0.1" + }, + { + "name": "Tumangaonline.site", + "id": 634231178, + "baseUrl": "https://tumangaonline.site", + "lang": "es", + "typeSource": "madara", + "iconUrl": "", + "dateFormat": "dd MMMMM, yyyy", + "dateFormatLocale": "es", + "isNsfw": true, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/multisrc/madara/madara-v0.0.1.dart", + "apiUrl": "", + "version": "0.0.1" + }, + { + "name": "Winter Scan", + "id": 133057358, + "baseUrl": "https://winterscan.com", + "lang": "pt-br", + "typeSource": "madara", + "iconUrl": "", + "dateFormat": "dd 'de' MMMM 'de' yyyy", + "dateFormatLocale": "pt-BR", + "isNsfw": false, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/multisrc/madara/madara-v0.0.1.dart", + "apiUrl": "", + "version": "0.0.1" + }, + { + "name": "Yuri Verso", + "id": 756257030, + "baseUrl": "https://yuri.live", + "lang": "pt-br", + "typeSource": "madara", + "iconUrl": "", + "dateFormat": "dd/MM/yyyy", + "dateFormatLocale": "pt-BR", + "isNsfw": false, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/multisrc/madara/madara-v0.0.1.dart", + "apiUrl": "", + "version": "0.0.1" + }, + { + "name": "Zero Scan", + "id": 637786379, + "baseUrl": "https://zeroscan.com.br", + "lang": "pt-br", + "typeSource": "madara", + "iconUrl": "", + "dateFormat": "dd/MM/yyyy", + "dateFormatLocale": "pt-BR", + "isNsfw": true, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/multisrc/madara/madara-v0.0.1.dart", + "apiUrl": "", + "version": "0.0.1" + }, + { + "name": "مانجا ليك", + "id": 290673359, + "baseUrl": "https://mangalek.com", + "lang": "ar", + "typeSource": "madara", + "iconUrl": "", + "dateFormat": "MMMM dd, yyyy", + "dateFormatLocale": "ar", + "isNsfw": false, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/multisrc/madara/madara-v0.0.1.dart", + "apiUrl": "", + "version": "0.0.1" + }, + { + "name": "Comick", + "id": 955190069, + "baseUrl": "https://comick.app", + "lang": "en", + "typeSource": "comick", + "iconUrl": "https://comick.app/_next/image?url=%2Fstatic%2Ficons%2Funicorn-64.png&w=144&q=75", + "dateFormat": "yyyy-MM-dd'T'HH:mm:ss'Z'", + "dateFormatLocale": "en", + "isNsfw": true, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/src/all/comick/comick-v0.0.1.dart", + "apiUrl": "https://api.comick.fun", + "version": "0.0.1" + }, + { + "name": "Comick", + "id": 602472856, + "baseUrl": "https://comick.app", + "lang": "ar", + "typeSource": "comick", + "iconUrl": "https://comick.app/_next/image?url=%2Fstatic%2Ficons%2Funicorn-64.png&w=144&q=75", + "dateFormat": "yyyy-MM-dd'T'HH:mm:ss'Z'", + "dateFormatLocale": "en", + "isNsfw": true, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/src/all/comick/comick-v0.0.1.dart", + "apiUrl": "https://api.comick.fun", + "version": "0.0.1" + }, + { + "name": "Comick", + "id": 678647945, + "baseUrl": "https://comick.app", + "lang": "pt", + "typeSource": "comick", + "iconUrl": "https://comick.app/_next/image?url=%2Fstatic%2Ficons%2Funicorn-64.png&w=144&q=75", + "dateFormat": "yyyy-MM-dd'T'HH:mm:ss'Z'", + "dateFormatLocale": "en", + "isNsfw": true, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/src/all/comick/comick-v0.0.1.dart", + "apiUrl": "https://api.comick.fun", + "version": "0.0.1" + }, + { + "name": "Comick", + "id": 494197461, + "baseUrl": "https://comick.app", + "lang": "pt-br", + "typeSource": "comick", + "iconUrl": "https://comick.app/_next/image?url=%2Fstatic%2Ficons%2Funicorn-64.png&w=144&q=75", + "dateFormat": "yyyy-MM-dd'T'HH:mm:ss'Z'", + "dateFormatLocale": "en", + "isNsfw": true, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/src/all/comick/comick-v0.0.1.dart", + "apiUrl": "https://api.comick.fun", + "version": "0.0.1" + }, + { + "name": "Comick", + "id": 851891714, + "baseUrl": "https://comick.app", + "lang": "it", + "typeSource": "comick", + "iconUrl": "https://comick.app/_next/image?url=%2Fstatic%2Ficons%2Funicorn-64.png&w=144&q=75", + "dateFormat": "yyyy-MM-dd'T'HH:mm:ss'Z'", + "dateFormatLocale": "en", + "isNsfw": true, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/src/all/comick/comick-v0.0.1.dart", + "apiUrl": "https://api.comick.fun", + "version": "0.0.1" + }, + { + "name": "Comick", + "id": 1050814052, + "baseUrl": "https://comick.app", + "lang": "ru", + "typeSource": "comick", + "iconUrl": "https://comick.app/_next/image?url=%2Fstatic%2Ficons%2Funicorn-64.png&w=144&q=75", + "dateFormat": "yyyy-MM-dd'T'HH:mm:ss'Z'", + "dateFormatLocale": "en", + "isNsfw": true, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/src/all/comick/comick-v0.0.1.dart", + "apiUrl": "https://api.comick.fun", + "version": "0.0.1" + }, + { + "name": "Comick", + "id": 115169439, + "baseUrl": "https://comick.app", + "lang": "es", + "typeSource": "comick", + "iconUrl": "https://comick.app/_next/image?url=%2Fstatic%2Ficons%2Funicorn-64.png&w=144&q=75", + "dateFormat": "yyyy-MM-dd'T'HH:mm:ss'Z'", + "dateFormatLocale": "en", + "isNsfw": true, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/src/all/comick/comick-v0.0.1.dart", + "apiUrl": "https://api.comick.fun", + "version": "0.0.1" + }, + { + "name": "Comick", + "id": 296390197, + "baseUrl": "https://comick.app", + "lang": "es-419", + "typeSource": "comick", + "iconUrl": "https://comick.app/_next/image?url=%2Fstatic%2Ficons%2Funicorn-64.png&w=144&q=75", + "dateFormat": "yyyy-MM-dd'T'HH:mm:ss'Z'", + "dateFormatLocale": "en", + "isNsfw": true, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/src/all/comick/comick-v0.0.1.dart", + "apiUrl": "https://api.comick.fun", + "version": "0.0.1" + }, + { + "name": "Comick", + "id": 719269008, + "baseUrl": "https://comick.app", + "lang": "id", + "typeSource": "comick", + "iconUrl": "https://comick.app/_next/image?url=%2Fstatic%2Ficons%2Funicorn-64.png&w=144&q=75", + "dateFormat": "yyyy-MM-dd'T'HH:mm:ss'Z'", + "dateFormatLocale": "en", + "isNsfw": true, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/src/all/comick/comick-v0.0.1.dart", + "apiUrl": "https://api.comick.fun", + "version": "0.0.1" + }, + { + "name": "Comick", + "id": 683471552, + "baseUrl": "https://comick.app", + "lang": "hi", + "typeSource": "comick", + "iconUrl": "https://comick.app/_next/image?url=%2Fstatic%2Ficons%2Funicorn-64.png&w=144&q=75", + "dateFormat": "yyyy-MM-dd'T'HH:mm:ss'Z'", + "dateFormatLocale": "en", + "isNsfw": true, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/src/all/comick/comick-v0.0.1.dart", + "apiUrl": "https://api.comick.fun", + "version": "0.0.1" + }, + { + "name": "Comick", + "id": 401493183, + "baseUrl": "https://comick.app", + "lang": "de", + "typeSource": "comick", + "iconUrl": "https://comick.app/_next/image?url=%2Fstatic%2Ficons%2Funicorn-64.png&w=144&q=75", + "dateFormat": "yyyy-MM-dd'T'HH:mm:ss'Z'", + "dateFormatLocale": "en", + "isNsfw": true, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/src/all/comick/comick-v0.0.1.dart", + "apiUrl": "https://api.comick.fun", + "version": "0.0.1" + }, + { + "name": "Comick", + "id": 796489006, + "baseUrl": "https://comick.app", + "lang": "ja", + "typeSource": "comick", + "iconUrl": "https://comick.app/_next/image?url=%2Fstatic%2Ficons%2Funicorn-64.png&w=144&q=75", + "dateFormat": "yyyy-MM-dd'T'HH:mm:ss'Z'", + "dateFormatLocale": "en", + "isNsfw": true, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/src/all/comick/comick-v0.0.1.dart", + "apiUrl": "https://api.comick.fun", + "version": "0.0.1" + }, + { + "name": "Comick", + "id": 507059585, + "baseUrl": "https://comick.app", + "lang": "tr", + "typeSource": "comick", + "iconUrl": "https://comick.app/_next/image?url=%2Fstatic%2Ficons%2Funicorn-64.png&w=144&q=75", + "dateFormat": "yyyy-MM-dd'T'HH:mm:ss'Z'", + "dateFormatLocale": "en", + "isNsfw": true, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/src/all/comick/comick-v0.0.1.dart", + "apiUrl": "https://api.comick.fun", + "version": "0.0.1" + }, + { + "name": "Comick", + "id": 242913014, + "baseUrl": "https://comick.app", + "lang": "pl", + "typeSource": "comick", + "iconUrl": "https://comick.app/_next/image?url=%2Fstatic%2Ficons%2Funicorn-64.png&w=144&q=75", + "dateFormat": "yyyy-MM-dd'T'HH:mm:ss'Z'", + "dateFormatLocale": "en", + "isNsfw": true, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/src/all/comick/comick-v0.0.1.dart", + "apiUrl": "https://api.comick.fun", + "version": "0.0.1" + }, + { + "name": "Comick", + "id": 752155292, + "baseUrl": "https://comick.app", + "lang": "zh", + "typeSource": "comick", + "iconUrl": "https://comick.app/_next/image?url=%2Fstatic%2Ficons%2Funicorn-64.png&w=144&q=75", + "dateFormat": "yyyy-MM-dd'T'HH:mm:ss'Z'", + "dateFormatLocale": "en", + "isNsfw": true, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/src/all/comick/comick-v0.0.1.dart", + "apiUrl": "https://api.comick.fun", + "version": "0.0.1" + }, + { + "name": "Comick", + "id": 113594984, + "baseUrl": "https://comick.app", + "lang": "zh-hk", + "typeSource": "comick", + "iconUrl": "https://comick.app/_next/image?url=%2Fstatic%2Ficons%2Funicorn-64.png&w=144&q=75", + "dateFormat": "yyyy-MM-dd'T'HH:mm:ss'Z'", + "dateFormatLocale": "en", + "isNsfw": true, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/src/all/comick/comick-v0.0.1.dart", + "apiUrl": "https://api.comick.fun", + "version": "0.0.1" + }, + { + "name": "Comick", + "id": 380505196, + "baseUrl": "https://comick.app", + "lang": "fr", + "typeSource": "comick", + "iconUrl": "https://comick.app/_next/image?url=%2Fstatic%2Ficons%2Funicorn-64.png&w=144&q=75", + "dateFormat": "yyyy-MM-dd'T'HH:mm:ss'Z'", + "dateFormatLocale": "en", + "isNsfw": true, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/src/all/comick/comick-v0.0.1.dart", + "apiUrl": "https://api.comick.fun", + "version": "0.0.1" + }, + { + "name": "MangaDex", + "id": 810342358, + "baseUrl": "https://mangadex.org", + "lang": "en", + "typeSource": "mangadex", + "iconUrl": "", + "dateFormat": "yyyy-MM-dd'T'HH:mm:ss+SSS", + "dateFormatLocale": "en_Us", + "isNsfw": true, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/src/all/mangadex/mangadex-v0.0.1.dart", + "apiUrl": "https://api.mangadex.org", + "version": "0.0.1" + }, + { + "name": "MangaDex", + "id": 202373705, + "baseUrl": "https://mangadex.org", + "lang": "ar", + "typeSource": "mangadex", + "iconUrl": "", + "dateFormat": "yyyy-MM-dd'T'HH:mm:ss+SSS", + "dateFormatLocale": "en_Us", + "isNsfw": true, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/src/all/mangadex/mangadex-v0.0.1.dart", + "apiUrl": "https://api.mangadex.org", + "version": "0.0.1" + }, + { + "name": "MangaDex", + "id": 1027115198, + "baseUrl": "https://mangadex.org", + "lang": "pt", + "typeSource": "mangadex", + "iconUrl": "", + "dateFormat": "yyyy-MM-dd'T'HH:mm:ss+SSS", + "dateFormatLocale": "en_Us", + "isNsfw": true, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/src/all/mangadex/mangadex-v0.0.1.dart", + "apiUrl": "https://api.mangadex.org", + "version": "0.0.1" + }, + { + "name": "MangaDex", + "id": 417850874, + "baseUrl": "https://mangadex.org", + "lang": "pt-br", + "typeSource": "mangadex", + "iconUrl": "", + "dateFormat": "yyyy-MM-dd'T'HH:mm:ss+SSS", + "dateFormatLocale": "en_Us", + "isNsfw": true, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/src/all/mangadex/mangadex-v0.0.1.dart", + "apiUrl": "https://api.mangadex.org", + "version": "0.0.1" + }, + { + "name": "MangaDex", + "id": 127887438, + "baseUrl": "https://mangadex.org", + "lang": "it", + "typeSource": "mangadex", + "iconUrl": "", + "dateFormat": "yyyy-MM-dd'T'HH:mm:ss+SSS", + "dateFormatLocale": "en_Us", + "isNsfw": true, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/src/all/mangadex/mangadex-v0.0.1.dart", + "apiUrl": "https://api.mangadex.org", + "version": "0.0.1" + }, + { + "name": "MangaDex", + "id": 367421943, + "baseUrl": "https://mangadex.org", + "lang": "ru", + "typeSource": "mangadex", + "iconUrl": "", + "dateFormat": "yyyy-MM-dd'T'HH:mm:ss+SSS", + "dateFormatLocale": "en_Us", + "isNsfw": true, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/src/all/mangadex/mangadex-v0.0.1.dart", + "apiUrl": "https://api.mangadex.org", + "version": "0.0.1" + }, + { + "name": "MangaDex", + "id": 736630443, + "baseUrl": "https://mangadex.org", + "lang": "es", + "typeSource": "mangadex", + "iconUrl": "", + "dateFormat": "yyyy-MM-dd'T'HH:mm:ss+SSS", + "dateFormatLocale": "en_Us", + "isNsfw": true, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/src/all/mangadex/mangadex-v0.0.1.dart", + "apiUrl": "https://api.mangadex.org", + "version": "0.0.1" + }, + { + "name": "MangaDex", + "id": 823535267, + "baseUrl": "https://mangadex.org", + "lang": "es-419", + "typeSource": "mangadex", + "iconUrl": "", + "dateFormat": "yyyy-MM-dd'T'HH:mm:ss+SSS", + "dateFormatLocale": "en_Us", + "isNsfw": true, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/src/all/mangadex/mangadex-v0.0.1.dart", + "apiUrl": "https://api.mangadex.org", + "version": "0.0.1" + }, + { + "name": "MangaDex", + "id": 183977130, + "baseUrl": "https://mangadex.org", + "lang": "id", + "typeSource": "mangadex", + "iconUrl": "", + "dateFormat": "yyyy-MM-dd'T'HH:mm:ss+SSS", + "dateFormatLocale": "en_Us", + "isNsfw": true, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/src/all/mangadex/mangadex-v0.0.1.dart", + "apiUrl": "https://api.mangadex.org", + "version": "0.0.1" + }, + { + "name": "MangaDex", + "id": 986826068, + "baseUrl": "https://mangadex.org", + "lang": "hi", + "typeSource": "mangadex", + "iconUrl": "", + "dateFormat": "yyyy-MM-dd'T'HH:mm:ss+SSS", + "dateFormatLocale": "en_Us", + "isNsfw": true, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/src/all/mangadex/mangadex-v0.0.1.dart", + "apiUrl": "https://api.mangadex.org", + "version": "0.0.1" + }, + { + "name": "MangaDex", + "id": 110023605, + "baseUrl": "https://mangadex.org", + "lang": "de", + "typeSource": "mangadex", + "iconUrl": "", + "dateFormat": "yyyy-MM-dd'T'HH:mm:ss+SSS", + "dateFormatLocale": "en_Us", + "isNsfw": true, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/src/all/mangadex/mangadex-v0.0.1.dart", + "apiUrl": "https://api.mangadex.org", + "version": "0.0.1" + }, + { + "name": "MangaDex", + "id": 204112007, + "baseUrl": "https://mangadex.org", + "lang": "ja", + "typeSource": "mangadex", + "iconUrl": "", + "dateFormat": "yyyy-MM-dd'T'HH:mm:ss+SSS", + "dateFormatLocale": "en_Us", + "isNsfw": true, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/src/all/mangadex/mangadex-v0.0.1.dart", + "apiUrl": "https://api.mangadex.org", + "version": "0.0.1" + }, + { + "name": "MangaDex", + "id": 1008587213, + "baseUrl": "https://mangadex.org", + "lang": "tr", + "typeSource": "mangadex", + "iconUrl": "", + "dateFormat": "yyyy-MM-dd'T'HH:mm:ss+SSS", + "dateFormatLocale": "en_Us", + "isNsfw": true, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/src/all/mangadex/mangadex-v0.0.1.dart", + "apiUrl": "https://api.mangadex.org", + "version": "0.0.1" + }, + { + "name": "MangaDex", + "id": 683661227, + "baseUrl": "https://mangadex.org", + "lang": "pl", + "typeSource": "mangadex", + "iconUrl": "", + "dateFormat": "yyyy-MM-dd'T'HH:mm:ss+SSS", + "dateFormatLocale": "en_Us", + "isNsfw": true, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/src/all/mangadex/mangadex-v0.0.1.dart", + "apiUrl": "https://api.mangadex.org", + "version": "0.0.1" + }, + { + "name": "MangaDex", + "id": 593575397, + "baseUrl": "https://mangadex.org", + "lang": "zh", + "typeSource": "mangadex", + "iconUrl": "", + "dateFormat": "yyyy-MM-dd'T'HH:mm:ss+SSS", + "dateFormatLocale": "en_Us", + "isNsfw": true, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/src/all/mangadex/mangadex-v0.0.1.dart", + "apiUrl": "https://api.mangadex.org", + "version": "0.0.1" + }, + { + "name": "MangaDex", + "id": 115179159, + "baseUrl": "https://mangadex.org", + "lang": "zh-hk", + "typeSource": "mangadex", + "iconUrl": "", + "dateFormat": "yyyy-MM-dd'T'HH:mm:ss+SSS", + "dateFormatLocale": "en_Us", + "isNsfw": true, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/src/all/mangadex/mangadex-v0.0.1.dart", + "apiUrl": "https://api.mangadex.org", + "version": "0.0.1" + }, + { + "name": "MangaDex", + "id": 545017689, + "baseUrl": "https://mangadex.org", + "lang": "fr", + "typeSource": "mangadex", + "iconUrl": "", + "dateFormat": "yyyy-MM-dd'T'HH:mm:ss+SSS", + "dateFormatLocale": "en_Us", + "isNsfw": true, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/src/all/mangadex/mangadex-v0.0.1.dart", + "apiUrl": "https://api.mangadex.org", + "version": "0.0.1" + }, + { + "name": "Asura Scans", + "id": 524070078, + "baseUrl": "https://www.asurascans.com", + "lang": "en", + "typeSource": "", + "iconUrl": "", + "dateFormat": "MMM d, yyyy", + "dateFormatLocale": "en_US", + "isNsfw": false, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/multisrc/mangareader/mangareader-v0.0.1.dart", + "apiUrl": "", + "version": "0.0.1" + }, + { + "name": "Legacy Scans", + "id": 310973833, + "baseUrl": "https://legacy-scans.com", + "lang": "fr", + "typeSource": "", + "iconUrl": "", + "dateFormat": "MMMM dd, yyyy", + "dateFormatLocale": "fr", + "isNsfw": false, + "hasCloudflare": true, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/multisrc/mangareader/mangareader-v0.0.1.dart", + "apiUrl": "", + "version": "0.0.1" + }, + { + "name": "Komik Lab", + "id": 932554594, + "baseUrl": "https://komiklab.com", + "lang": "en", + "typeSource": "", + "iconUrl": "", + "dateFormat": "MMMM dd, yyyy", + "dateFormatLocale": "en_US", + "isNsfw": false, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/multisrc/mangareader/mangareader-v0.0.1.dart", + "apiUrl": "", + "version": "0.0.1" + }, + { + "name": "Miau Scan", + "id": 731119411, + "baseUrl": "https://miauscan.com", + "lang": "pt-BR", + "typeSource": "", + "iconUrl": "", + "dateFormat": "MMMM dd, yyyy", + "dateFormatLocale": "en_US", + "isNsfw": false, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/multisrc/mangareader/mangareader-v0.0.1.dart", + "apiUrl": "", + "version": "0.0.1" + }, + { + "name": "Animated Glitched Scans", + "id": 617152951, + "baseUrl": "https://anigliscans.com", + "lang": "en", + "typeSource": "", + "iconUrl": "", + "dateFormat": "MMMM dd, yyyy", + "dateFormatLocale": "en_US", + "isNsfw": false, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/multisrc/mangareader/mangareader-v0.0.1.dart", + "apiUrl": "", + "version": "0.0.1" + }, + { + "name": "Arena Scans", + "id": 379149791, + "baseUrl": "https://arenascans.net", + "lang": "en", + "typeSource": "", + "iconUrl": "", + "dateFormat": "MMMM dd, yyyy", + "dateFormatLocale": "en_US", + "isNsfw": false, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/multisrc/mangareader/mangareader-v0.0.1.dart", + "apiUrl": "", + "version": "0.0.1" + }, + { + "name": "Azure Scans", + "id": 316512590, + "baseUrl": "https://azuremanga.com", + "lang": "en", + "typeSource": "", + "iconUrl": "", + "dateFormat": "MMMM dd, yyyy", + "dateFormatLocale": "en_US", + "isNsfw": false, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/multisrc/mangareader/mangareader-v0.0.1.dart", + "apiUrl": "", + "version": "0.0.1" + }, + { + "name": "Banana-Scan", + "id": 46988346, + "baseUrl": "https://banana-scan.com", + "lang": "fr", + "typeSource": "", + "iconUrl": "", + "dateFormat": "MMMM dd, yyyy", + "dateFormatLocale": "fr", + "isNsfw": true, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/multisrc/mangareader/mangareader-v0.0.1.dart", + "apiUrl": "", + "version": "0.0.1" + }, + { + "name": "Boosei", + "id": 1031591772, + "baseUrl": "https://boosei.net", + "lang": "id", + "typeSource": "", + "iconUrl": "", + "dateFormat": "MMMM dd, yyyy", + "dateFormatLocale": "id", + "isNsfw": false, + "hasCloudflare": true, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/multisrc/mangareader/mangareader-v0.0.1.dart", + "apiUrl": "", + "version": "0.0.1" + }, + { + "name": "Babel Wuxia", + "id": 754265719, + "baseUrl": "https://babelwuxia.com", + "lang": "en", + "typeSource": "", + "iconUrl": "", + "dateFormat": "MMMM dd, yyyy", + "dateFormatLocale": "en_US", + "isNsfw": false, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/multisrc/mangareader/mangareader-v0.0.1.dart", + "apiUrl": "", + "version": "0.0.1" + }, + { + "name": "Clayrer", + "id": 282657830, + "baseUrl": "https://clayrer.net", + "lang": "es", + "typeSource": "", + "iconUrl": "", + "dateFormat": "MMM d, yyyy", + "dateFormatLocale": "es", + "isNsfw": false, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/multisrc/mangareader/mangareader-v0.0.1.dart", + "apiUrl": "", + "version": "0.0.1" + }, + { + "name": "Constellar Scans", + "id": 1019773606, + "baseUrl": "https://constellarscans.com", + "lang": "en", + "typeSource": "", + "iconUrl": "", + "dateFormat": "MMMM dd, yyyy", + "dateFormatLocale": "en_US", + "isNsfw": true, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/multisrc/mangareader/mangareader-v0.0.1.dart", + "apiUrl": "", + "version": "0.0.1" + }, + { + "name": "Cosmic Scans", + "id": 938687459, + "baseUrl": "https://cosmicscans.com", + "lang": "en", + "typeSource": "", + "iconUrl": "", + "dateFormat": "MMMM dd, yyyy", + "dateFormatLocale": "en_US", + "isNsfw": false, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/multisrc/mangareader/mangareader-v0.0.1.dart", + "apiUrl": "", + "version": "0.0.1" + }, + { + "name": "CosmicScans.id", + "id": 1053293978, + "baseUrl": "https://cosmicscans.id", + "lang": "id", + "typeSource": "", + "iconUrl": "", + "dateFormat": "MMMM dd, yyyy", + "dateFormatLocale": "en_US", + "isNsfw": false, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/multisrc/mangareader/mangareader-v0.0.1.dart", + "apiUrl": "", + "version": "0.0.1" + }, + { + "name": "Diskus Scan", + "id": 726431939, + "baseUrl": "https://diskusscan.com", + "lang": "pt-BR", + "typeSource": "", + "iconUrl": "", + "dateFormat": "MMMMM dd, yyyy", + "dateFormatLocale": "pt-BR", + "isNsfw": false, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/multisrc/mangareader/mangareader-v0.0.1.dart", + "apiUrl": "", + "version": "0.0.1" + }, + { + "name": "Dojing.net", + "id": 725568407, + "baseUrl": "https://dojing.net", + "lang": "id", + "typeSource": "", + "iconUrl": "", + "dateFormat": "MMMM dd, yyyy", + "dateFormatLocale": "en_US", + "isNsfw": true, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/multisrc/mangareader/mangareader-v0.0.1.dart", + "apiUrl": "", + "version": "0.0.1" + }, + { + "name": "DragonTranslation", + "id": 608999343, + "baseUrl": "https://dragontranslation.com", + "lang": "es", + "typeSource": "", + "iconUrl": "", + "dateFormat": "MMMM dd, yyyy", + "dateFormatLocale": "en_US", + "isNsfw": true, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/multisrc/mangareader/mangareader-v0.0.1.dart", + "apiUrl": "", + "version": "0.0.1" + }, + { + "name": "DuniaKomik.id", + "id": 326969052, + "baseUrl": "https://duniakomik.id", + "lang": "id", + "typeSource": "", + "iconUrl": "", + "dateFormat": "MMMM dd, yyyy", + "dateFormatLocale": "id", + "isNsfw": false, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/multisrc/mangareader/mangareader-v0.0.1.dart", + "apiUrl": "", + "version": "0.0.1" + }, + { + "name": "ElarcPage", + "id": 496805784, + "baseUrl": "https://elarcpage.com", + "lang": "en", + "typeSource": "", + "iconUrl": "", + "dateFormat": "MMMM dd, yyyy", + "dateFormatLocale": "en_US", + "isNsfw": false, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/multisrc/mangareader/mangareader-v0.0.1.dart", + "apiUrl": "", + "version": "0.0.1" + }, + { + "name": "Epsilon Scan", + "id": 106172437, + "baseUrl": "https://epsilonscan.fr", + "lang": "fr", + "typeSource": "", + "iconUrl": "", + "dateFormat": "MMMM dd, yyyy", + "dateFormatLocale": "fr", + "isNsfw": true, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/multisrc/mangareader/mangareader-v0.0.1.dart", + "apiUrl": "", + "version": "0.0.1" + }, + { + "name": "Franxx Mangás", + "id": 581383345, + "baseUrl": "https://franxxmangas.net", + "lang": "pt-BR", + "typeSource": "", + "iconUrl": "", + "dateFormat": "MMMMM dd, yyyy", + "dateFormatLocale": "pt-BR", + "isNsfw": true, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/multisrc/mangareader/mangareader-v0.0.1.dart", + "apiUrl": "", + "version": "0.0.1" + }, + { + "name": "Gecenin Lordu", + "id": 622207049, + "baseUrl": "https://geceninlordu.com", + "lang": "tr", + "typeSource": "", + "iconUrl": "", + "dateFormat": "MMMM dd, yyyy", + "dateFormatLocale": "en_US", + "isNsfw": false, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/multisrc/mangareader/mangareader-v0.0.1.dart", + "apiUrl": "", + "version": "0.0.1" + }, + { + "name": "GoGoManga", + "id": 544236529, + "baseUrl": "https://gogomanga.fun", + "lang": "en", + "typeSource": "", + "iconUrl": "", + "dateFormat": "MMMM dd, yyyy", + "dateFormatLocale": "en_US", + "isNsfw": false, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/multisrc/mangareader/mangareader-v0.0.1.dart", + "apiUrl": "", + "version": "0.0.1" + }, + { + "name": "Gremory Mangas", + "id": 643211287, + "baseUrl": "https://gremorymangas.com", + "lang": "es", + "typeSource": "", + "iconUrl": "", + "dateFormat": "MMMM dd, yyyy", + "dateFormatLocale": "en_US", + "isNsfw": false, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/multisrc/mangareader/mangareader-v0.0.1.dart", + "apiUrl": "", + "version": "0.0.1" + }, + { + "name": "Hanuman Scan", + "id": 125651433, + "baseUrl": "https://hanumanscan.com", + "lang": "en", + "typeSource": "", + "iconUrl": "", + "dateFormat": "MMMM dd, yyyy", + "dateFormatLocale": "en_US", + "isNsfw": false, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/multisrc/mangareader/mangareader-v0.0.1.dart", + "apiUrl": "", + "version": "0.0.1" + }, + { + "name": "Heroxia", + "id": 379208114, + "baseUrl": "https://heroxia.com", + "lang": "id", + "typeSource": "", + "iconUrl": "", + "dateFormat": "MMMM dd, yyyy", + "dateFormatLocale": "en_US", + "isNsfw": true, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/multisrc/mangareader/mangareader-v0.0.1.dart", + "apiUrl": "", + "version": "0.0.1" + }, + { + "name": "Imagine Scan", + "id": 240754387, + "baseUrl": "https://imaginescan.com.br", + "lang": "pt-BR", + "typeSource": "", + "iconUrl": "", + "dateFormat": "MMMMM dd, yyyy", + "dateFormatLocale": "pt-BR", + "isNsfw": true, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/multisrc/mangareader/mangareader-v0.0.1.dart", + "apiUrl": "", + "version": "0.0.1" + }, + { + "name": "Infernal Void Scans", + "id": 460393112, + "baseUrl": "https://void-scans.com", + "lang": "en", + "typeSource": "", + "iconUrl": "", + "dateFormat": "MMMM dd, yyyy", + "dateFormatLocale": "en_US", + "isNsfw": false, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/multisrc/mangareader/mangareader-v0.0.1.dart", + "apiUrl": "", + "version": "0.0.1" + }, + { + "name": "KataKomik", + "id": 61302571, + "baseUrl": "https://katakomik.online", + "lang": "id", + "typeSource": "", + "iconUrl": "", + "dateFormat": "MMMM dd, yyyy", + "dateFormatLocale": "en_US", + "isNsfw": false, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/multisrc/mangareader/mangareader-v0.0.1.dart", + "apiUrl": "", + "version": "0.0.1" + }, + { + "name": "Komik Seru", + "id": 834193526, + "baseUrl": "https://komikseru.me", + "lang": "id", + "typeSource": "", + "iconUrl": "", + "dateFormat": "MMMM dd, yyyy", + "dateFormatLocale": "en_US", + "isNsfw": true, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/multisrc/mangareader/mangareader-v0.0.1.dart", + "apiUrl": "", + "version": "0.0.1" + }, + { + "name": "Kanzenin", + "id": 729954705, + "baseUrl": "https://kanzenin.xyz", + "lang": "id", + "typeSource": "", + "iconUrl": "", + "dateFormat": "MMMM dd, yyyy", + "dateFormatLocale": "en_US", + "isNsfw": true, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/multisrc/mangareader/mangareader-v0.0.1.dart", + "apiUrl": "", + "version": "0.0.1" + }, + { + "name": "KomikSan", + "id": 1001221680, + "baseUrl": "https://komiksan.ml", + "lang": "id", + "typeSource": "", + "iconUrl": "", + "dateFormat": "MMMM dd, yyyy", + "dateFormatLocale": "en_US", + "isNsfw": false, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/multisrc/mangareader/mangareader-v0.0.1.dart", + "apiUrl": "", + "version": "0.0.1" + }, + { + "name": "Kiryuu", + "id": 729634849, + "baseUrl": "https://kiryuu.id", + "lang": "id", + "typeSource": "", + "iconUrl": "", + "dateFormat": "MMMM dd, yyyy", + "dateFormatLocale": "id", + "isNsfw": false, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/multisrc/mangareader/mangareader-v0.0.1.dart", + "apiUrl": "", + "version": "0.0.1" + }, + { + "name": "Komik AV", + "id": 895787869, + "baseUrl": "https://komikav.com", + "lang": "id", + "typeSource": "", + "iconUrl": "", + "dateFormat": "MMMM dd, yyyy", + "dateFormatLocale": "id", + "isNsfw": false, + "hasCloudflare": true, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/multisrc/mangareader/mangareader-v0.0.1.dart", + "apiUrl": "", + "version": "0.0.1" + }, + { + "name": "Komik Station", + "id": 866615506, + "baseUrl": "https://komikstation.co", + "lang": "id", + "typeSource": "", + "iconUrl": "", + "dateFormat": "MMMM dd, yyyy", + "dateFormatLocale": "en_US", + "isNsfw": false, + "hasCloudflare": true, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/multisrc/mangareader/mangareader-v0.0.1.dart", + "apiUrl": "", + "version": "0.0.1" + }, + { + "name": "KomikMama", + "id": 148959602, + "baseUrl": "https://komikmama.co", + "lang": "id", + "typeSource": "", + "iconUrl": "", + "dateFormat": "MMMM dd, yyyy", + "dateFormatLocale": "id", + "isNsfw": false, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/multisrc/mangareader/mangareader-v0.0.1.dart", + "apiUrl": "", + "version": "0.0.1" + }, + { + "name": "KumaPoi", + "id": 855502386, + "baseUrl": "https://kumapoi.club", + "lang": "id", + "typeSource": "", + "iconUrl": "", + "dateFormat": "MMMM dd, yyyy", + "dateFormatLocale": "id", + "isNsfw": true, + "hasCloudflare": true, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/multisrc/mangareader/mangareader-v0.0.1.dart", + "apiUrl": "", + "version": "0.0.1" + }, + { + "name": "Komiku.com", + "id": 869906392, + "baseUrl": "https://komiku.com", + "lang": "id", + "typeSource": "", + "iconUrl": "", + "dateFormat": "MMMM dd, yyyy", + "dateFormatLocale": "id", + "isNsfw": false, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/multisrc/mangareader/mangareader-v0.0.1.dart", + "apiUrl": "", + "version": "0.0.1" + }, + { + "name": "Kuma Scans (Kuma Translation)", + "id": 625910494, + "baseUrl": "https://kumascans.com", + "lang": "en", + "typeSource": "", + "iconUrl": "", + "dateFormat": "MMMM dd, yyyy", + "dateFormatLocale": "en_US", + "isNsfw": false, + "hasCloudflare": true, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/multisrc/mangareader/mangareader-v0.0.1.dart", + "apiUrl": "", + "version": "0.0.1" + }, + { + "name": "Legacy Scans", + "id": 310973833, + "baseUrl": "https://legacy-scans.com", + "lang": "fr", + "typeSource": "", + "iconUrl": "", + "dateFormat": "MMMM dd, yyyy", + "dateFormatLocale": "en_US", + "isNsfw": false, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/multisrc/mangareader/mangareader-v0.0.1.dart", + "apiUrl": "", + "version": "0.0.1" + }, + { + "name": "LianScans", + "id": 127293188, + "baseUrl": "https://www.lianscans.my.id", + "lang": "id", + "typeSource": "", + "iconUrl": "", + "dateFormat": "MMMM dd, yyyy", + "dateFormatLocale": "en_US", + "isNsfw": true, + "hasCloudflare": true, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/multisrc/mangareader/mangareader-v0.0.1.dart", + "apiUrl": "", + "version": "0.0.1" + }, + { + "name": "Magus Manga", + "id": 487156426, + "baseUrl": "https://magusmanga.com", + "lang": "ar", + "typeSource": "", + "iconUrl": "", + "dateFormat": "MMMMM d, yyyy", + "dateFormatLocale": "ar", + "isNsfw": false, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/multisrc/mangareader/mangareader-v0.0.1.dart", + "apiUrl": "", + "version": "0.0.1" + }, + { + "name": "Manga Indo.me", + "id": 425166803, + "baseUrl": "https://mangaindo.me", + "lang": "id", + "typeSource": "", + "iconUrl": "", + "dateFormat": "MMMM dd, yyyy", + "dateFormatLocale": "en_US", + "isNsfw": false, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/multisrc/mangareader/mangareader-v0.0.1.dart", + "apiUrl": "", + "version": "0.0.1" + }, + { + "name": "Manga Raw.org", + "id": 933359985, + "baseUrl": "https://mangaraw.org", + "lang": "ja", + "typeSource": "", + "iconUrl": "", + "dateFormat": "MMMM dd, yyyy", + "dateFormatLocale": "en_US", + "isNsfw": false, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/multisrc/mangareader/mangareader-v0.0.1.dart", + "apiUrl": "", + "version": "0.0.1" + }, + { + "name": "Mangacim", + "id": 642410916, + "baseUrl": "https://www.mangacim.com", + "lang": "tr", + "typeSource": "", + "iconUrl": "", + "dateFormat": "MMM d, yyy", + "dateFormatLocale": "tr", + "isNsfw": false, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/multisrc/mangareader/mangareader-v0.0.1.dart", + "apiUrl": "", + "version": "0.0.1" + }, + { + "name": "MangaKita", + "id": 265973674, + "baseUrl": "https://mangakita.net", + "lang": "id", + "typeSource": "", + "iconUrl": "", + "dateFormat": "MMMM dd, yyyy", + "dateFormatLocale": "en_US", + "isNsfw": false, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/multisrc/mangareader/mangareader-v0.0.1.dart", + "apiUrl": "", + "version": "0.0.1" + }, + { + "name": "MangaTale", + "id": 343986734, + "baseUrl": "https://mangatale.co", + "lang": "id", + "typeSource": "", + "iconUrl": "", + "dateFormat": "MMMM dd, yyyy", + "dateFormatLocale": "en_US", + "isNsfw": false, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/multisrc/mangareader/mangareader-v0.0.1.dart", + "apiUrl": "", + "version": "0.0.1" + }, + { + "name": "MangaWT", + "id": 1014190199, + "baseUrl": "https://mangawt.com", + "lang": "tr", + "typeSource": "", + "iconUrl": "", + "dateFormat": "MMM d, yyyy", + "dateFormatLocale": "tr", + "isNsfw": false, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/multisrc/mangareader/mangareader-v0.0.1.dart", + "apiUrl": "", + "version": "0.0.1" + }, + { + "name": "Mangayaro", + "id": 685775531, + "baseUrl": "https://mangayaro.net", + "lang": "id", + "typeSource": "", + "iconUrl": "", + "dateFormat": "MMMM dd, yyyy", + "dateFormatLocale": "en_US", + "isNsfw": false, + "hasCloudflare": true, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/multisrc/mangareader/mangareader-v0.0.1.dart", + "apiUrl": "", + "version": "0.0.1" + }, + { + "name": "Manhwa Lover", + "id": 236666669, + "baseUrl": "https://manhwalover.com", + "lang": "en", + "typeSource": "", + "iconUrl": "", + "dateFormat": "MMMM dd, yyyy", + "dateFormatLocale": "en_US", + "isNsfw": true, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/multisrc/mangareader/mangareader-v0.0.1.dart", + "apiUrl": "", + "version": "0.0.1" + }, + { + "name": "MangaSwat", + "id": 1022922869, + "baseUrl": "https://swatop.club/", + "lang": "ar", + "typeSource": "", + "iconUrl": "", + "dateFormat": "MMMM dd, yyyy", + "dateFormatLocale": "en_US", + "isNsfw": false, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/multisrc/mangareader/mangareader-v0.0.1.dart", + "apiUrl": "", + "version": "0.0.1" + }, + { + "name": "Mangás Chan", + "id": 27624977, + "baseUrl": "https://mangaschan.com", + "lang": "pt-BR", + "typeSource": "", + "iconUrl": "", + "dateFormat": "MMMM dd, yyyy", + "dateFormatLocale": "pt-br", + "isNsfw": false, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/multisrc/mangareader/mangareader-v0.0.1.dart", + "apiUrl": "", + "version": "0.0.1" + }, + { + "name": "Manhwa Freak", + "id": 89348660, + "baseUrl": "https://manhwafreak.com", + "lang": "en", + "typeSource": "", + "iconUrl": "", + "dateFormat": "MMMM dd, yyyy", + "dateFormatLocale": "en_US", + "isNsfw": false, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/multisrc/mangareader/mangareader-v0.0.1.dart", + "apiUrl": "", + "version": "0.0.1" + }, + { + "name": "ManhwaLand.mom", + "id": 263984076, + "baseUrl": "https://manhwaland.us", + "lang": "id", + "typeSource": "", + "iconUrl": "", + "dateFormat": "MMMM dd, yyyy", + "dateFormatLocale": "en_US", + "isNsfw": true, + "hasCloudflare": true, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/multisrc/mangareader/mangareader-v0.0.1.dart", + "apiUrl": "", + "version": "0.0.1" + }, + { + "name": "Manhwax", + "id": 188130307, + "baseUrl": "https://manhwax.com", + "lang": "en", + "typeSource": "", + "iconUrl": "", + "dateFormat": "MMMM dd, yyyy", + "dateFormatLocale": "en_US", + "isNsfw": true, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/multisrc/mangareader/mangareader-v0.0.1.dart", + "apiUrl": "", + "version": "0.0.1" + }, + { + "name": "Mareceh", + "id": 867592813, + "baseUrl": "https://mareceh.com", + "lang": "id", + "typeSource": "", + "iconUrl": "", + "dateFormat": "MMMM dd, yyyy", + "dateFormatLocale": "en_US", + "isNsfw": true, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/multisrc/mangareader/mangareader-v0.0.1.dart", + "apiUrl": "", + "version": "0.0.1" + }, + { + "name": "MasterKomik", + "id": 829222746, + "baseUrl": "https://masterkomik.com", + "lang": "id", + "typeSource": "", + "iconUrl": "", + "dateFormat": "MMMM dd, yyyy", + "dateFormatLocale": "id", + "isNsfw": false, + "hasCloudflare": true, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/multisrc/mangareader/mangareader-v0.0.1.dart", + "apiUrl": "", + "version": "0.0.1" + }, + { + "name": "MELOKOMIK", + "id": 532392938, + "baseUrl": "https://melokomik.xyz", + "lang": "id", + "typeSource": "", + "iconUrl": "", + "dateFormat": "MMMM dd, yyyy", + "dateFormatLocale": "id", + "isNsfw": false, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/multisrc/mangareader/mangareader-v0.0.1.dart", + "apiUrl": "", + "version": "0.0.1" + }, + { + "name": "Mihentai", + "id": 59058359, + "baseUrl": "https://mihentai.com", + "lang": "all", + "typeSource": "", + "iconUrl": "", + "dateFormat": "MMMM dd, yyyy", + "dateFormatLocale": "en_US", + "isNsfw": true, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/multisrc/mangareader/mangareader-v0.0.1.dart", + "apiUrl": "", + "version": "0.0.1" + }, + { + "name": "Mode Scanlator", + "id": 484904020, + "baseUrl": "https://modescanlator.com", + "lang": "pt-BR", + "typeSource": "", + "iconUrl": "", + "dateFormat": "MMMMM dd, yyyy", + "dateFormatLocale": "pt-BR", + "isNsfw": false, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/multisrc/mangareader/mangareader-v0.0.1.dart", + "apiUrl": "", + "version": "0.0.1" + }, + { + "name": "Mundo Mangá-Kun", + "id": 763538681, + "baseUrl": "https://mundomangakun.com.br", + "lang": "pt-BR", + "typeSource": "", + "iconUrl": "", + "dateFormat": "MMMMM dd, yyyy", + "dateFormatLocale": "pt-BR", + "isNsfw": true, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/multisrc/mangareader/mangareader-v0.0.1.dart", + "apiUrl": "", + "version": "0.0.1" + }, + { + "name": "Nekomik", + "id": 383230791, + "baseUrl": "https://nekomik.com", + "lang": "id", + "typeSource": "", + "iconUrl": "", + "dateFormat": "MMMM dd, yyyy", + "dateFormatLocale": "en_US", + "isNsfw": false, + "hasCloudflare": true, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/multisrc/mangareader/mangareader-v0.0.1.dart", + "apiUrl": "", + "version": "0.0.1" + }, + { + "name": "Ngomik", + "id": 618924537, + "baseUrl": "https://ngomik.net", + "lang": "id", + "typeSource": "", + "iconUrl": "", + "dateFormat": "MMMM dd, yyyy", + "dateFormatLocale": "en_US", + "isNsfw": false, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/multisrc/mangareader/mangareader-v0.0.1.dart", + "apiUrl": "", + "version": "0.0.1" + }, + { + "name": "Nocturnal Scans", + "id": 526354092, + "baseUrl": "https://nocturnalscans.com", + "lang": "en", + "typeSource": "", + "iconUrl": "", + "dateFormat": "MMMM dd, yyyy", + "dateFormatLocale": "en_US", + "isNsfw": false, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/multisrc/mangareader/mangareader-v0.0.1.dart", + "apiUrl": "", + "version": "0.0.1" + }, + { + "name": "Origami Orpheans", + "id": 827249516, + "baseUrl": "https://origami-orpheans.com.br", + "lang": "pt-BR", + "typeSource": "", + "iconUrl": "", + "dateFormat": "MMMMM dd, yyyy", + "dateFormatLocale": "pt-BR", + "isNsfw": false, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/multisrc/mangareader/mangareader-v0.0.1.dart", + "apiUrl": "", + "version": "0.0.1" + }, + { + "name": "Ozul Scans", + "id": 585804375, + "baseUrl": "https://ozulscans.com", + "lang": "ar", + "typeSource": "", + "iconUrl": "", + "dateFormat": "MMM d, yyy", + "dateFormatLocale": "ar", + "isNsfw": false, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/multisrc/mangareader/mangareader-v0.0.1.dart", + "apiUrl": "", + "version": "0.0.1" + }, + { + "name": "Patatescans", + "id": 541245259, + "baseUrl": "https://patatescans.com", + "lang": "fr", + "typeSource": "", + "iconUrl": "", + "dateFormat": "MMMM dd, yyyy", + "dateFormatLocale": "en_US", + "isNsfw": true, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/multisrc/mangareader/mangareader-v0.0.1.dart", + "apiUrl": "", + "version": "0.0.1" + }, + { + "name": "Phantom Scans", + "id": 330024672, + "baseUrl": "https://phantomscans.com", + "lang": "en", + "typeSource": "", + "iconUrl": "", + "dateFormat": "MMMM dd, yyyy", + "dateFormatLocale": "en_US", + "isNsfw": false, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/multisrc/mangareader/mangareader-v0.0.1.dart", + "apiUrl": "", + "version": "0.0.1" + }, + { + "name": "PhenixScans", + "id": 984162065, + "baseUrl": "https://phenixscans.fr", + "lang": "fr", + "typeSource": "", + "iconUrl": "", + "dateFormat": "MMMM dd, yyyy", + "dateFormatLocale": "fr", + "isNsfw": false, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/multisrc/mangareader/mangareader-v0.0.1.dart", + "apiUrl": "", + "version": "0.0.1" + }, + { + "name": "Pi Scans", + "id": 548699583, + "baseUrl": "https://piscans.in", + "lang": "id", + "typeSource": "", + "iconUrl": "", + "dateFormat": "MMMM dd, yyyy", + "dateFormatLocale": "en_US", + "isNsfw": false, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/multisrc/mangareader/mangareader-v0.0.1.dart", + "apiUrl": "", + "version": "0.0.1" + }, + { + "name": "PMScans", + "id": 724822356, + "baseUrl": "https://rackusreads.com", + "lang": "en", + "typeSource": "", + "iconUrl": "", + "dateFormat": "MMMM dd, yyyy", + "dateFormatLocale": "en_US", + "isNsfw": false, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/multisrc/mangareader/mangareader-v0.0.1.dart", + "apiUrl": "", + "version": "0.0.1" + }, + { + "name": "Raiki Scan", + "id": 550138305, + "baseUrl": "https://raikiscan.com", + "lang": "es", + "typeSource": "", + "iconUrl": "", + "dateFormat": "MMMM dd, yyyy", + "dateFormatLocale": "en_US", + "isNsfw": false, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/multisrc/mangareader/mangareader-v0.0.1.dart", + "apiUrl": "", + "version": "0.0.1" + }, + { + "name": "Raven Scans", + "id": 299682436, + "baseUrl": "https://ravenscans.com", + "lang": "en", + "typeSource": "", + "iconUrl": "", + "dateFormat": "MMMM dd, yyyy", + "dateFormatLocale": "en_US", + "isNsfw": false, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/multisrc/mangareader/mangareader-v0.0.1.dart", + "apiUrl": "", + "version": "0.0.1" + }, + { + "name": "Rawkuma", + "id": 169043906, + "baseUrl": "https://rawkuma.com/", + "lang": "ja", + "typeSource": "", + "iconUrl": "", + "dateFormat": "MMMM dd, yyyy", + "dateFormatLocale": "en_US", + "isNsfw": false, + "hasCloudflare": true, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/multisrc/mangareader/mangareader-v0.0.1.dart", + "apiUrl": "", + "version": "0.0.1" + }, + { + "name": "Readkomik", + "id": 136259958, + "baseUrl": "https://readkomik.com", + "lang": "en", + "typeSource": "", + "iconUrl": "", + "dateFormat": "MMMM dd, yyyy", + "dateFormatLocale": "en_US", + "isNsfw": false, + "hasCloudflare": true, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/multisrc/mangareader/mangareader-v0.0.1.dart", + "apiUrl": "", + "version": "0.0.1" + }, + { + "name": "Ryukonesia", + "id": 226819661, + "baseUrl": "https://ryukonesia.net", + "lang": "id", + "typeSource": "", + "iconUrl": "", + "dateFormat": "MMMM dd, yyyy", + "dateFormatLocale": "en_US", + "isNsfw": false, + "hasCloudflare": true, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/multisrc/mangareader/mangareader-v0.0.1.dart", + "apiUrl": "", + "version": "0.0.1" + }, + { + "name": "Sekaikomik", + "id": 447268483, + "baseUrl": "https://www.sekaikomik.pro", + "lang": "id", + "typeSource": "", + "iconUrl": "", + "dateFormat": "MMMM dd, yyyy", + "dateFormatLocale": "id", + "isNsfw": true, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/multisrc/mangareader/mangareader-v0.0.1.dart", + "apiUrl": "", + "version": "0.0.1" + }, + { + "name": "Sekte Doujin", + "id": 168557312, + "baseUrl": "https://sektedoujin.lol", + "lang": "id", + "typeSource": "", + "iconUrl": "", + "dateFormat": "MMMM dd, yyyy", + "dateFormatLocale": "id", + "isNsfw": true, + "hasCloudflare": true, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/multisrc/mangareader/mangareader-v0.0.1.dart", + "apiUrl": "", + "version": "0.0.1" + }, + { + "name": "Senpai Ediciones", + "id": 483474103, + "baseUrl": "http://senpaiediciones.com", + "lang": "es", + "typeSource": "", + "iconUrl": "", + "dateFormat": "MMMM dd, yyyy", + "dateFormatLocale": "en_US", + "isNsfw": false, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/multisrc/mangareader/mangareader-v0.0.1.dart", + "apiUrl": "", + "version": "0.0.1" + }, + { + "name": "Shadow Mangas", + "id": 229424731, + "baseUrl": "https://shadowmangas.com", + "lang": "es", + "typeSource": "", + "iconUrl": "", + "dateFormat": "MMMM dd, yyyy", + "dateFormatLocale": "es", + "isNsfw": false, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/multisrc/mangareader/mangareader-v0.0.1.dart", + "apiUrl": "", + "version": "0.0.1" + }, + { + "name": "Shea Manga", + "id": 732403984, + "baseUrl": "https://sheakomik.com", + "lang": "id", + "typeSource": "", + "iconUrl": "", + "dateFormat": "MMMM dd, yyyy", + "dateFormatLocale": "id", + "isNsfw": false, + "hasCloudflare": true, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/multisrc/mangareader/mangareader-v0.0.1.dart", + "apiUrl": "", + "version": "0.0.1" + }, + { + "name": "Silence Scan", + "id": 337333800, + "baseUrl": "https://silencescan.com.br", + "lang": "pt-BR", + "typeSource": "", + "iconUrl": "", + "dateFormat": "MMMMM dd, yyyy", + "dateFormatLocale": "pt-BR", + "isNsfw": true, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/multisrc/mangareader/mangareader-v0.0.1.dart", + "apiUrl": "", + "version": "0.0.1" + }, + { + "name": "Snudae Scans", + "id": 708592870, + "baseUrl": "https://snudaescans.com", + "lang": "en", + "typeSource": "", + "iconUrl": "", + "dateFormat": "MMMM dd, yyyy", + "dateFormatLocale": "en_US", + "isNsfw": true, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/multisrc/mangareader/mangareader-v0.0.1.dart", + "apiUrl": "", + "version": "0.0.1" + }, + { + "name": "Summer Fansub", + "id": 573978557, + "baseUrl": "https://smmr.in", + "lang": "pt-BR", + "typeSource": "", + "iconUrl": "", + "dateFormat": "MMMMM dd, yyyy", + "dateFormatLocale": "pt-BR", + "isNsfw": true, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/multisrc/mangareader/mangareader-v0.0.1.dart", + "apiUrl": "", + "version": "0.0.1" + }, + { + "name": "Surya Scans", + "id": 935389321, + "baseUrl": "https://suryascans.com", + "lang": "en", + "typeSource": "", + "iconUrl": "", + "dateFormat": "MMMM dd, yyyy", + "dateFormatLocale": "en_US", + "isNsfw": false, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/multisrc/mangareader/mangareader-v0.0.1.dart", + "apiUrl": "", + "version": "0.0.1" + }, + { + "name": "Sushi-Scan", + "id": 972784612, + "baseUrl": "https://sushiscan.net", + "lang": "fr", + "typeSource": "", + "iconUrl": "", + "dateFormat": "MMMM dd, yyyy", + "dateFormatLocale": "fr", + "isNsfw": false, + "hasCloudflare": true, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/multisrc/mangareader/mangareader-v0.0.1.dart", + "apiUrl": "", + "version": "0.0.1" + }, + { + "name": "Tarot Scans", + "id": 347606260, + "baseUrl": "https://www.tarotscans.com", + "lang": "tr", + "typeSource": "", + "iconUrl": "", + "dateFormat": "MMMM dd, yyyy", + "dateFormatLocale": "tr", + "isNsfw": false, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/multisrc/mangareader/mangareader-v0.0.1.dart", + "apiUrl": "", + "version": "0.0.1" + }, + { + "name": "The Apollo Team", + "id": 1000718792, + "baseUrl": "https://theapollo.team", + "lang": "en", + "typeSource": "", + "iconUrl": "", + "dateFormat": "MMMM dd, yyyy", + "dateFormatLocale": "en_US", + "isNsfw": false, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/multisrc/mangareader/mangareader-v0.0.1.dart", + "apiUrl": "", + "version": "0.0.1" + }, + { + "name": "Tsundoku Traduções", + "id": 186846226, + "baseUrl": "https://tsundoku.com.br", + "lang": "pt-BR", + "typeSource": "", + "iconUrl": "", + "dateFormat": "MMMMM dd, yyyy", + "dateFormatLocale": "pt-BR", + "isNsfw": false, + "hasCloudflare": true, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/multisrc/mangareader/mangareader-v0.0.1.dart", + "apiUrl": "", + "version": "0.0.1" + }, + { + "name": "TukangKomik", + "id": 884904192, + "baseUrl": "https://tukangkomik.id", + "lang": "id", + "typeSource": "", + "iconUrl": "", + "dateFormat": "MMM d, yyyy", + "dateFormatLocale": "tr", + "isNsfw": false, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/multisrc/mangareader/mangareader-v0.0.1.dart", + "apiUrl": "", + "version": "0.0.1" + }, + { + "name": "TurkToon", + "id": 579681001, + "baseUrl": "https://turktoon.com", + "lang": "tr", + "typeSource": "", + "iconUrl": "", + "dateFormat": "MMMM dd, yyyy", + "dateFormatLocale": "en_US", + "isNsfw": false, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/multisrc/mangareader/mangareader-v0.0.1.dart", + "apiUrl": "", + "version": "0.0.1" + }, + { + "name": "Uzay Manga", + "id": 762273201, + "baseUrl": "https://uzaymanga.com", + "lang": "tr", + "typeSource": "", + "iconUrl": "", + "dateFormat": "MMM d, yyyy", + "dateFormatLocale": "tr", + "isNsfw": false, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/multisrc/mangareader/mangareader-v0.0.1.dart", + "apiUrl": "", + "version": "0.0.1" + }, + { + "name": "Walpurgi Scan", + "id": 83686844, + "baseUrl": "https://www.walpurgiscan.com", + "lang": "it", + "typeSource": "", + "iconUrl": "", + "dateFormat": "MMM d, yyyy", + "dateFormatLocale": "it", + "isNsfw": false, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/multisrc/mangareader/mangareader-v0.0.1.dart", + "apiUrl": "", + "version": "0.0.1" + }, + { + "name": "West Manga", + "id": 671316608, + "baseUrl": "https://westmanga.info", + "lang": "id", + "typeSource": "", + "iconUrl": "", + "dateFormat": "MMMM dd, yyyy", + "dateFormatLocale": "en_US", + "isNsfw": false, + "hasCloudflare": true, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/multisrc/mangareader/mangareader-v0.0.1.dart", + "apiUrl": "", + "version": "0.0.1" + }, + { + "name": "xCaliBR Scans", + "id": 699314250, + "baseUrl": "https://xcalibrscans.com", + "lang": "en", + "typeSource": "", + "iconUrl": "", + "dateFormat": "MMMM dd, yyyy", + "dateFormatLocale": "en_US", + "isNsfw": false, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/multisrc/mangareader/mangareader-v0.0.1.dart", + "apiUrl": "", + "version": "0.0.1" + }, + { + "name": "สดใสเมะ", + "id": 806535873, + "baseUrl": "https://www.xn--l3c0azab5a2gta.com", + "lang": "th", + "typeSource": "", + "iconUrl": "", + "dateFormat": "MMMM dd, yyyy", + "dateFormatLocale": "th", + "isNsfw": true, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/multisrc/mangareader/mangareader-v0.0.1.dart", + "apiUrl": "", + "version": "0.0.1" + }, + { + "name": "Scan FR", + "id": 404191169, + "baseUrl": "https://www.scan-fr.org", + "lang": "fr", + "typeSource": "mmrcms", + "iconUrl": "", + "dateFormat": "d MMM. yyyy", + "dateFormatLocale": "en_US", + "isNsfw": false, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/multisrc/mmrcms/mmrcms-v0.0.1.dart", + "apiUrl": "", + "version": "0.0.1" + }, + { + "name": "Scan VF", + "id": 929253523, + "baseUrl": "https://www.scan-vf.net", + "lang": "fr", + "typeSource": "mmrcms", + "iconUrl": "", + "dateFormat": "d MMM. yyyy", + "dateFormatLocale": "en_US", + "isNsfw": false, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/multisrc/mmrcms/mmrcms-v0.0.1.dart", + "apiUrl": "", + "version": "0.0.1" + }, + { + "name": "Komikid", + "id": 400330220, + "baseUrl": "https://www.komikid.com", + "lang": "id", + "typeSource": "mmrcms", + "iconUrl": "", + "dateFormat": "d MMM. yyyy", + "dateFormatLocale": "en_US", + "isNsfw": false, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/multisrc/mmrcms/mmrcms-v0.0.1.dart", + "apiUrl": "", + "version": "0.0.1" + }, + { + "name": "MangaID", + "id": 181458486, + "baseUrl": "https://mangaid.click", + "lang": "id", + "typeSource": "mmrcms", + "iconUrl": "", + "dateFormat": "d MMM. yyyy", + "dateFormatLocale": "en_US", + "isNsfw": false, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/multisrc/mmrcms/mmrcms-v0.0.1.dart", + "apiUrl": "", + "version": "0.0.1" + }, + { + "name": "Jpmangas", + "id": 1009609900, + "baseUrl": "https://jpmangas.cc", + "lang": "fr", + "typeSource": "mmrcms", + "iconUrl": "", + "dateFormat": "d MMM. yyyy", + "dateFormatLocale": "en_US", + "isNsfw": false, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/multisrc/mmrcms/mmrcms-v0.0.1.dart", + "apiUrl": "", + "version": "0.0.1" + }, + { + "name": "مانجا اون لاين", + "id": 19018595, + "baseUrl": "https://onma.top", + "lang": "ar", + "typeSource": "mmrcms", + "iconUrl": "", + "dateFormat": "d MMM. yyyy", + "dateFormatLocale": "en_US", + "isNsfw": false, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/multisrc/mmrcms/mmrcms-v0.0.1.dart", + "apiUrl": "", + "version": "0.0.1" + }, + { + "name": "Read Comics Online", + "id": 1021546729, + "baseUrl": "https://readcomicsonline.ru", + "lang": "en", + "typeSource": "mmrcms", + "iconUrl": "", + "dateFormat": "d MMM. yyyy", + "dateFormatLocale": "en_US", + "isNsfw": false, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/multisrc/mmrcms/mmrcms-v0.0.1.dart", + "apiUrl": "", + "version": "0.0.1" + }, + { + "name": "Zahard", + "id": 580957372, + "baseUrl": "https://zahard.xyz", + "lang": "en", + "typeSource": "mmrcms", + "iconUrl": "", + "dateFormat": "d MMM. yyyy", + "dateFormatLocale": "en_US", + "isNsfw": false, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/multisrc/mmrcms/mmrcms-v0.0.1.dart", + "apiUrl": "", + "version": "0.0.1" + }, + { + "name": "Mangadoor", + "id": 436215210, + "baseUrl": "https://mangadoor.com", + "lang": "es", + "typeSource": "mmrcms", + "iconUrl": "", + "dateFormat": "d MMM. yyyy", + "dateFormatLocale": "en_US", + "isNsfw": false, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/multisrc/mmrcms/mmrcms-v0.0.1.dart", + "apiUrl": "", + "version": "0.0.1" + }, + { + "name": "Utsukushii", + "id": 695900100, + "baseUrl": "https://manga.utsukushii-bg.com", + "lang": "bg", + "typeSource": "mmrcms", + "iconUrl": "", + "dateFormat": "d MMM. yyyy", + "dateFormatLocale": "en_US", + "isNsfw": false, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/multisrc/mmrcms/mmrcms-v0.0.1.dart", + "apiUrl": "", + "version": "0.0.1" + }, + { + "name": "Phoenix-Scans", + "id": 607601995, + "baseUrl": "https://phoenix-scans.pl", + "lang": "pl", + "typeSource": "mmrcms", + "iconUrl": "", + "dateFormat": "d MMM. yyyy", + "dateFormatLocale": "en_US", + "isNsfw": false, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/multisrc/mmrcms/mmrcms-v0.0.1.dart", + "apiUrl": "", + "version": "0.0.1" + }, + { + "name": "Lelscan-VF", + "id": 529915550, + "baseUrl": "https://www.lelscanvf.cc/", + "lang": "fr", + "typeSource": "mmrcms", + "iconUrl": "", + "dateFormat": "d MMM. yyyy", + "dateFormatLocale": "en_US", + "isNsfw": false, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/multisrc/mmrcms/mmrcms-v0.0.1.dart", + "apiUrl": "", + "version": "0.0.1" + }, + { + "name": "Manga-FR", + "id": 410779276, + "baseUrl": "https://manga-fr.me", + "lang": "fr", + "typeSource": "mmrcms", + "iconUrl": "", + "dateFormat": "d MMM. yyyy", + "dateFormatLocale": "en_US", + "isNsfw": false, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/multisrc/mmrcms/mmrcms-v0.0.1.dart", + "apiUrl": "", + "version": "0.0.1" + }, + { + "name": "YugenMangas", + "id": 719565854, + "baseUrl": "https://yugenmangas.net", + "lang": "es", + "typeSource": "heancms", + "iconUrl": "", + "dateFormat": "yyyy-MM-dd'T'HH:mm:ss.SSSZZZZZ", + "dateFormatLocale": "en", + "isNsfw": true, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/multisrc/heancms/heancms-v0.0.1.dart", + "apiUrl": "https://api.yugenmangas.net", + "version": "0.0.1" + }, + { + "name": "OmegaScans", + "id": 555665028, + "baseUrl": "https://omegascans.org", + "lang": "en", + "typeSource": "heancms", + "iconUrl": "", + "dateFormat": "yyyy-MM-dd'T'HH:mm:ss.SSSZZZZZ", + "dateFormatLocale": "en", + "isNsfw": true, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/multisrc/heancms/heancms-v0.0.1.dart", + "apiUrl": "https://api.omegascans.org", + "version": "0.0.1" + }, + { + "name": "MangaHere", + "id": 434984458, + "baseUrl": "http://www.mangahere.cc", + "lang": "en", + "typeSource": "single", + "iconUrl": "", + "dateFormat": "MMM dd,yyyy", + "dateFormatLocale": "en", + "isNsfw": false, + "hasCloudflare": false, + "sourceCodeUrl": "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/src/en/mangahere/mangahere-v0.0.1.dart", + "apiUrl": "", + "version": "0.0.1" + } +] \ No newline at end of file diff --git a/model/source.dart b/model/source.dart new file mode 100644 index 00000000..c3e5989e --- /dev/null +++ b/model/source.dart @@ -0,0 +1,60 @@ +class Source { + String? id; + String? name; + + String? baseUrl; + + String? lang; + + bool? isNsfw; + + String? sourceCodeUrl; + + String? typeSource; + + String? iconUrl; + + bool? hasCloudflare; + + String? dateFormat; + + String? dateFormatLocale; + + String? apiUrl; + + String? version; + + Source({ + this.id = null, + this.name = "", + this.baseUrl = "", + this.lang = "", + this.typeSource = "", + this.iconUrl = "", + this.dateFormat, + this.dateFormatLocale, + this.isNsfw = false, + this.hasCloudflare = false, + this.sourceCodeUrl = "", + this.apiUrl = "", + this.version = "", + }); + + Map toJson() { + return { + 'name': name, + 'id': id ?? 'mangayomi-$lang.$name'.hashCode, + 'baseUrl': baseUrl, + "lang": lang, + "typeSource": typeSource, + "iconUrl": iconUrl, + "dateFormat": dateFormat, + "dateFormatLocale": dateFormatLocale, + "isNsfw": isNsfw, + "hasCloudflare": hasCloudflare, + "sourceCodeUrl": sourceCodeUrl, + "apiUrl": apiUrl, + "version": version + }; + } +} diff --git a/multisrc/heancms/heancms-v0.0.1.dart b/multisrc/heancms/heancms-v0.0.1.dart new file mode 100644 index 00000000..420a41b3 --- /dev/null +++ b/multisrc/heancms/heancms-v0.0.1.dart @@ -0,0 +1,203 @@ +// import 'dart:convert'; +// import 'package:bridge_lib/bridge_lib.dart'; + +// searchManga(MangaModel manga) async { +// final headers = getHeader(manga.baseUrl); +// final url = "${manga.apiUrl}/series/search"; +// final body = {"term": manga.query}; +// final data = {"url": url, "headers": headers, "body": body}; +// final res = await MBridge.http(json.encode(data), 1); +// if (res.isEmpty) { +// return manga; +// } +// List jsonList = []; +// List names = []; +// List urls = []; +// List images = []; +// if (res.startsWith("{")) { +// jsonList = MBridge.jsonPathToList(res, r'$.data[*]'); +// } else { +// jsonList = MBridge.jsonDecodeToList(res); +// } +// for (var a in jsonList) { +// final thumbnail = MBridge.getMapValue(a, "thumbnail", 0); +// if (thumbnail.startsWith("https://")) { +// images.add(thumbnail); +// } else { +// images.add("${manga.apiUrl}/cover/$thumbnail"); +// } +// names.add(MBridge.getMapValue(a, "title", 0)); +// final seriesSlug = MBridge.regExp( +// MBridge.getMapValue(a, "series_slug", 0), "-\\d+", "", 0, 0); +// urls.add("/series/$seriesSlug"); +// } +// manga.urls = urls; +// manga.images = images; +// manga.names = names; +// return manga; +// } + +// getPopularManga(MangaModel manga) async { +// final headers = getHeader(manga.baseUrl); +// final url = "${manga.apiUrl}/series/querysearch"; +// final body = { +// "page": manga.page, +// "order": "desc", +// "order_by": "total_views", +// "series_status": "Ongoing", +// "series_type": "Comic" +// }; +// final data = { +// "url": url, +// "headers": headers, +// "sourceId": manga.sourceId, +// "body": body +// }; +// final res = await MBridge.http(json.encode(data), 1); +// if (res.isEmpty) { +// return manga; +// } +// List jsonList = []; +// List names = []; +// List urls = []; +// List images = []; +// if (res.startsWith("{")) { +// jsonList = MBridge.jsonPathToList(res, r'$.data[*]'); +// } else { +// jsonList = MBridge.jsonDecodeToList(res); +// } +// for (var a in jsonList) { +// final thumbnail = MBridge.getMapValue(a, "thumbnail", 0); +// if (thumbnail.startsWith("https://")) { +// images.add(thumbnail); +// } else { +// images.add("${manga.apiUrl}/cover/$thumbnail"); +// } +// names.add(MBridge.getMapValue(a, "title", 0)); +// final seriesSlug = MBridge.regExp( +// MBridge.getMapValue(a, "series_slug", 0), "-\\d+", "", 0, 0); +// urls.add("/series/$seriesSlug"); +// } +// manga.urls = urls; +// manga.images = images; +// manga.names = names; +// return manga; +// } + +// getLatestUpdatesManga(MangaModel manga) async { +// final headers = getHeader(manga.baseUrl); +// final url = "${manga.apiUrl}/series/querysearch"; +// final body = { +// "page": manga.page, +// "order": "desc", +// "order_by": "latest", +// "series_status": "Ongoing", +// "series_type": "Comic" +// }; +// final data = { +// "url": url, +// "headers": headers, +// "sourceId": manga.sourceId, +// "body": body +// }; +// final res = await MBridge.http(json.encode(data), 1); +// if (res.isEmpty) { +// return manga; +// } +// List jsonList = []; +// List names = []; +// List urls = []; +// List images = []; +// if (res.startsWith("{")) { +// jsonList = MBridge.jsonPathToList(res, r'$.data[*]'); +// } else { +// jsonList = MBridge.jsonDecodeToList(res); +// } +// for (var a in jsonList) { +// final thumbnail = MBridge.getMapValue(a, "thumbnail", 0); +// if (thumbnail.startsWith("https://")) { +// images.add(thumbnail); +// } else { +// images.add("${manga.apiUrl}/cover/$thumbnail"); +// } +// names.add(MBridge.getMapValue(a, "title", 0)); +// final seriesSlug = MBridge.regExp( +// MBridge.getMapValue(a, "series_slug", 0), "-\\d+", "", 0, 0); +// urls.add("/series/$seriesSlug"); +// } +// manga.urls = urls; +// manga.images = images; +// manga.names = names; +// return manga; +// } + +// getMangaDetail(MangaModel manga) async { +// String currentSlug = MBridge.listParse(manga.link.split('/'), 2)[0]; + +// final headers = getHeader(manga.baseUrl); +// final url = "${manga.apiUrl}/series/$currentSlug"; +// final data = {"url": url, "headers": headers}; +// final res = await MBridge.http(json.encode(data), 0); +// if (res.isEmpty) { +// return manga; +// } +// manga.author = MBridge.getMapValue(res, "author", 0); + +// manga.description = MBridge.getMapValue(res, "description", 0); +// manga.genre = +// MBridge.jsonPathToString(res, r"$.tags[*].name", "._").split("._"); + +// final chapters = MBridge.jsonPathToList(res, r"$.chapters[*]"); +// List chapterTitles = []; +// List chapterUrls = []; +// List chapterDates = []; +// for (var chapter in chapters) { +// final chapterName = MBridge.getMapValue(chapter, "chapter_name", 0); +// final chapterSlug = MBridge.getMapValue(chapter, "chapter_slug", 0); +// final chapterId = MBridge.getMapValue(chapter, "id", 0); +// final createdAt = MBridge.getMapValue(chapter, "created_at", 0); +// chapterUrls.add("/series/$currentSlug/$chapterSlug#$chapterId"); +// chapterTitles.add(chapterName); +// chapterDates.add(createdAt); +// } +// manga.urls = chapterUrls; +// manga.names = chapterTitles; +// manga.chaptersDateUploads = MBridge.listParse( +// MBridge.listParseDateTime( +// chapterDates, manga.dateFormat, manga.dateFormatLocale), +// 0); +// return manga; +// } + +// getChapterUrl(MangaModel manga) async { +// String chapterId = MBridge.listParse(manga.link.split('#'), 2)[0]; + +// final headers = getHeader(manga.baseUrl); +// final url = "${manga.apiUrl}/series/chapter/$chapterId"; +// final data = {"url": url, "headers": headers}; +// final res = await MBridge.http(json.encode(data), 0); +// if (res.isEmpty) { +// return []; +// } +// final pages = MBridge.jsonPathToList(res, r"$.content.images[*]"); +// List pageUrls = []; +// for (var u in pages) { +// final url = u.replaceAll('"', ""); +// if (url.startsWith("http")) { +// pageUrls.add(url); +// } else { +// pageUrls.add("${manga.apiUrl}/$url"); +// } +// } +// return pageUrls; +// } + +// Map getHeader(String url) { +// final headers = { +// 'Origin': url, +// 'Referer': '$url/', +// 'Accept': 'application/json, text/plain, */*', +// 'Content-Type': 'application/json' +// }; +// return headers; +// } diff --git a/multisrc/heancms/sources.dart b/multisrc/heancms/sources.dart new file mode 100644 index 00000000..a40216c7 --- /dev/null +++ b/multisrc/heancms/sources.dart @@ -0,0 +1,34 @@ +import '../../model/source.dart'; + +const heancmsVersion = "0.0.1"; +const heancmsSourceCodeUrl = + "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/multisrc/heancms/heancms-v$heancmsVersion.dart"; +const defaultDateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSZZZZZ"; +const defaultDateFormatLocale = "en"; +List get heanCmsSourcesList => _heanCmsSourcesList; +List _heanCmsSourcesList = [ + Source( + name: "YugenMangas", + baseUrl: "https://yugenmangas.net", + apiUrl: "https://api.yugenmangas.net", + lang: "es", + typeSource: "heancms", + isNsfw: true, + iconUrl: '', + sourceCodeUrl: heancmsSourceCodeUrl, + version: heancmsVersion, + dateFormat: defaultDateFormat, + dateFormatLocale: defaultDateFormatLocale), + Source( + name: "OmegaScans", + baseUrl: "https://omegascans.org", + apiUrl: "https://api.omegascans.org", + lang: "en", + typeSource: "heancms", + isNsfw: true, + iconUrl: '', + sourceCodeUrl: heancmsSourceCodeUrl, + version: heancmsVersion, + dateFormat: defaultDateFormat, + dateFormatLocale: defaultDateFormatLocale), +]; diff --git a/multisrc/madara/madara-v0.0.1.dart b/multisrc/madara/madara-v0.0.1.dart new file mode 100644 index 00000000..bcb13e0a --- /dev/null +++ b/multisrc/madara/madara-v0.0.1.dart @@ -0,0 +1,282 @@ +// import 'dart:convert'; + +// getPopularManga(MangaModel manga) async { +// final url = "${manga.baseUrl}/manga/page/${manga.page}/?m_orderby=views"; +// final data = {"url": url, "headers": null, "sourceId": manga.sourceId}; +// final res = await MBridge.http(json.encode(data), 0); +// if (res.isEmpty) { +// return manga; +// } +// manga.urls = MBridge.xpath(res, '//*[@class^="post-title"]/h3/a/@href', '-.') +// .split("-."); +// String images = +// MBridge.xpath(res, '//*[@id^="manga-item"]/a/img/@data-src', '-.'); +// if (images.isEmpty) { +// images = +// MBridge.xpath(res, '//*[@id^="manga-item"]/a/img/@data-lazy-src', '-.'); +// if (images.isEmpty) { +// images = MBridge.xpath(res, '//*[@id^="manga-item"]/a/img/@srcset', '-.'); +// if (images.isEmpty) { +// images = MBridge.xpath(res, '//*[@id^="manga-item"]/a/img/@src', '-.'); +// } +// } +// } +// manga.images = images.split("-."); +// manga.names = +// MBridge.xpath(res, '//*[@id^="manga-item"]/a/@title', '-.').split("-."); + +// return manga; +// } + +// getMangaDetail(MangaModel manga) async { +// final statusList = [ +// { +// "OnGoing": 0, +// "Продолжается": 0, +// "Updating": 0, +// "Em Lançamento": 0, +// "Em lançamento": 0, +// "Em andamento": 0, +// "Em Andamento": 0, +// "En cours": 0, +// "Ativo": 0, +// "Lançando": 0, +// "Đang Tiến Hành": 0, +// "Devam Ediyor": 0, +// "Devam ediyor": 0, +// "In Corso": 0, +// "In Arrivo": 0, +// "مستمرة": 0, +// "مستمر": 0, +// "En Curso": 0, +// "En curso": 0, +// "Emision": 0, +// "En marcha": 0, +// "Publicandose": 0, +// "En emision": 0, +// "连载中": 0, +// "Completed": 1, +// "Completo": 1, +// "Completado": 1, +// "Concluído": 1, +// "Concluido": 1, +// "Finalizado": 1, +// "Terminé": 1, +// "Hoàn Thành": 1, +// "مكتملة": 1, +// "مكتمل": 1, +// "已完结": 1, +// "On Hold": 2, +// "Pausado": 2, +// "En espera": 2, +// "Canceled": 3, +// "Cancelado": 3, +// } +// ]; + +// final datas = { +// "url": manga.link, +// "headers": null, +// "sourceId": manga.sourceId +// }; +// final res = await MBridge.http(json.encode(datas), 0); +// if (res.isEmpty) { +// return manga; +// } +// manga.author = +// MBridge.querySelectorAll(res, "div.author-content > a", 0, "", 0, 0, ""); +// manga.description = MBridge.querySelectorAll( +// res, +// "div.description-summary div.summary__content, div.summary_content div.post-content_item > h5 + div, div.summary_content div.manga-excerpt, div.sinopsis div.contenedor, .description-summary > p", +// 0, +// "", +// 0, +// 0, +// ""); +// manga.imageUrl = +// MBridge.querySelectorAll(res, "div.summary_image img", 2, "", 2, 1, ""); +// final mangaId = MBridge.querySelectorAll( +// res, "div[id^=manga-chapters-holder]", 3, "data-id", 0, 1, ""); +// manga.status = MBridge.parseStatus( +// MBridge.querySelectorAll(res, "div.summary-content", 0, "", 0, 2, ""), +// statusList); + +// manga.genre = +// MBridge.querySelectorAll(res, "div.genres-content a", 0, "", 0, 0, "-.") +// .split("-."); + +// final baseUrl = "${manga.baseUrl}/"; +// final headers = { +// "Referer": baseUrl, +// "Content-Type": "application/x-www-form-urlencoded", +// "X-Requested-With": "XMLHttpRequest" +// }; +// final url = +// "${baseUrl}wp-admin/admin-ajax.php?action=manga_get_chapters&manga=$mangaId"; +// final datasP = {"url": url, "headers": headers, "sourceId": manga.sourceId}; + +// String resP = await MBridge.http(json.encode(datasP), 1); +// if (resP == "400") { +// final urlP = "${manga.link}ajax/chapters"; +// final datasP = { +// "url": urlP, +// "headers": headers, +// "sourceId": manga.sourceId +// }; +// resP = await MBridge.http(json.encode(datasP), 1); +// } +// manga.urls = MBridge.xpath(resP, "//li/a/@href", '-.').split("-."); +// List chaptersNames = +// MBridge.xpath(resP, "//li/a/text()", '-.').split("-."); + +// List dateF = +// MBridge.xpath(resP, "//li/span/i/text()", '-.').split("-."); +// if (MBridge.xpath(resP, "//li/a/text()", "").isEmpty) { +// final resWebview = await MBridge.getHtmlViaWebview(manga.link, +// "//*[@id='manga-chapters-holder']/div[2]/div/ul/li/a/@href"); +// manga.urls = MBridge.xpath(resWebview, +// "//*[@id='manga-chapters-holder']/div[2]/div/ul/li/a/@href", '-.') +// .split("-."); +// chaptersNames = MBridge.xpath(resWebview, +// "//*[@id='manga-chapters-holder']/div[2]/div/ul/li/a/text()", '-.') +// .split("-."); +// dateF = MBridge.xpath( +// resWebview, +// "//*[@id='manga-chapters-holder']/div[2]/div/ul/li/span/i/text()", +// '-.') +// .split("-."); +// } + +// manga.names = chaptersNames; +// List chapterDate = []; +// if (dateF.length == chaptersNames.length) { +// manga.chaptersDateUploads = MBridge.listParseDateTime( +// dateF, manga.dateFormat, manga.dateFormatLocale); +// } else if (dateF.length < chaptersNames.length) { +// final length = chaptersNames.length - dateF.length; +// String date = "${DateTime.now().millisecondsSinceEpoch}"; +// for (var i = 0; i < length - 1; i++) { +// date += "--..${DateTime.now().millisecondsSinceEpoch}"; +// } + +// final dateFF = MBridge.listParseDateTime( +// dateF, manga.dateFormat, manga.dateFormatLocale); +// List chapterDate = MBridge.listParse(date.split('--..'), 0); + +// for (var date in dateFF) { +// chapterDate.add(date); +// } +// manga.chaptersDateUploads = chapterDate; +// } +// return manga; +// } + +// getChapterUrl(MangaModel manga) async { +// final datas = { +// "url": manga.link, +// "headers": null, +// "sourceId": manga.sourceId +// }; +// final res = await MBridge.http(json.encode(datas), 0); +// if (res.isEmpty) { +// return []; +// } +// final pagesSelectorRes = MBridge.querySelector( +// res, +// "div.page-break, li.blocks-gallery-item, .reading-content, .text-left img", +// 1, +// ""); +// final imgs = +// MBridge.querySelectorAll(pagesSelectorRes, "img", 2, "", 2, 0, '-.') +// .split('-.'); +// List pageUrls = []; + +// if (imgs.length == 1) { +// final pages = MBridge.querySelector(res, "#single-pager", 2, ""); + +// final pagesNumber = +// MBridge.querySelectorAll(pages, "option", 2, "", 0, 0, '-.') +// .split('-.'); + +// for (var i = 0; i < pagesNumber.length; i++) { +// final val = i + 1; +// if (i.toString().length == 1) { +// pageUrls.add( +// MBridge.querySelectorAll(pagesSelectorRes, "img", 2, "", 2, 0, "") +// .replaceAll("01", '0$val')); +// } else { +// pageUrls.add( +// MBridge.querySelectorAll(pagesSelectorRes, "img", 2, "", 2, 0, "") +// .replaceAll("01", val.toString())); +// } +// } +// } else { +// return imgs; +// } +// return pageUrls; +// } + +// getLatestUpdatesManga(MangaModel manga) async { +// final url = "${manga.baseUrl}/manga/page/${manga.page}/?m_orderby=latest"; +// final datas = {"url": url, "headers": null, "sourceId": manga.sourceId}; +// final res = await MBridge.http(json.encode(datas), 0); +// if (res.isEmpty) { +// return manga; +// } +// manga.urls = MBridge.xpath(res, '//*[@class^="post-title"]/h3/a/@href', '-.') +// .split("-."); +// String images = +// MBridge.xpath(res, '//*[@id^="manga-item"]/a/img/@data-src', '-.'); +// if (images.isEmpty) { +// images = +// MBridge.xpath(res, '//*[@id^="manga-item"]/a/img/@data-lazy-src', '-.'); +// if (images.isEmpty) { +// images = MBridge.xpath(res, '//*[@id^="manga-item"]/a/img/@srcset', '-.'); +// if (images.isEmpty) { +// images = MBridge.xpath(res, '//*[@id^="manga-item"]/a/img/@src', '-.'); +// } +// } +// } +// manga.images = images.split("-."); +// manga.names = +// MBridge.xpath(res, '//*[@id^="manga-item"]/a/@title', '-.').split("-."); +// return manga; +// } + +// searchManga(MangaModel manga) async { +// final urll = "${manga.baseUrl}/?s=${manga.query}&post_type=wp-manga"; +// final datas = {"url": urll, "headers": null, "sourceId": manga.sourceId}; +// final res = await MBridge.http(json.encode(datas), 0); +// if (res.isEmpty) { +// return manga; +// } +// manga.urls = +// MBridge.xpath(res, '//*[@class^="tab-thumb c-image-hover"]/a/@href', '-.') +// .split("-."); +// String images = MBridge.xpath( +// res, '//*[@class^="tab-thumb c-image-hover"]/a/img/@data-src', '-.'); +// if (images.isEmpty) { +// images = MBridge.xpath(res, +// '//*[@class^="tab-thumb c-image-hover"]/a/img/@data-lazy-src', '-.'); +// if (images.isEmpty) { +// images = MBridge.xpath( +// res, '//*[@class^="tab-thumb c-image-hover"]/a/img/@srcset', '-.'); +// if (images.isEmpty) { +// images = MBridge.xpath( +// res, '//*[@class^="tab-thumb c-image-hover"]/a/img/@src', '-.'); +// } +// } +// } +// manga.images = images.split("-."); +// manga.names = MBridge.xpath( +// res, '//*[@class^="tab-thumb c-image-hover"]/a/@title', '-.') +// .split("-."); +// return manga; +// } + +// Map getHeader(String url) { +// final headers = { +// "Referer": "$url/", +// }; +// return headers; +// } diff --git a/multisrc/madara/sources.dart b/multisrc/madara/sources.dart new file mode 100644 index 00000000..65da51f5 --- /dev/null +++ b/multisrc/madara/sources.dart @@ -0,0 +1,637 @@ +import '../../model/source.dart'; + +const madaraVersion = "0.0.1"; +const madaraSourceCodeUrl = + "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/multisrc/madara/madara-v$madaraVersion.dart"; +const defaultDateFormat = "MMMM dd, yyyy"; +const defaultDateFormatLocale = "en_US"; +List get madaraSourcesList => _madaraSourcesList; +List _madaraSourcesList = [ + Source( + name: "FR-Scan", + baseUrl: "https://fr-scan.com", + lang: "fr", + typeSource: "madara", + iconUrl: '', + dateFormat: "MMMM d, yyyy", + dateFormatLocale: "fr", + version: madaraVersion, + sourceCodeUrl: madaraSourceCodeUrl), + Source( + name: "AstralManga", + baseUrl: "https://astral-manga.fr", + lang: "fr", + typeSource: "madara", + iconUrl: '', + dateFormat: "dd/mm/yyyy", + dateFormatLocale: "fr", + version: madaraVersion, + sourceCodeUrl: madaraSourceCodeUrl), + Source( + name: "Akuma no Tenshi", + baseUrl: "https://akumanotenshi.com", + lang: "tr", + typeSource: "madara", + iconUrl: '', + dateFormat: "dd/MM/yyyy", + dateFormatLocale: "pt-BR", + version: madaraVersion, + sourceCodeUrl: madaraSourceCodeUrl), + Source( + name: "Adult Webtoon", + baseUrl: "https://adultwebtoon.com", + lang: "en", + typeSource: "madara", + iconUrl: '', + isNsfw: true, + dateFormat: defaultDateFormat, + dateFormatLocale: defaultDateFormatLocale, + version: madaraVersion, + sourceCodeUrl: madaraSourceCodeUrl), + Source( + name: "ArazNovel", + baseUrl: "https://www.araznovel.com", + lang: "tr", + typeSource: "madara", + iconUrl: '', + dateFormat: "d MMMM yyyy", + dateFormatLocale: "en", + version: madaraVersion, + sourceCodeUrl: madaraSourceCodeUrl), + Source( + name: "BestManga", + baseUrl: "https://bestmanga.club", + lang: "ru", + typeSource: "madara", + iconUrl: '', + dateFormat: "dd.MM.yyyy", + dateFormatLocale: "ru", + version: madaraVersion, + sourceCodeUrl: madaraSourceCodeUrl), + Source( + name: "Chibi Manga", + baseUrl: "https://www.cmreader.info", + lang: "en", + typeSource: "madara", + iconUrl: '', + dateFormat: defaultDateFormat, + dateFormatLocale: defaultDateFormatLocale, + version: madaraVersion, + sourceCodeUrl: madaraSourceCodeUrl), + Source( + name: "CookieToon", + baseUrl: "https://cookietoon.online", + lang: "pt-br", + typeSource: "madara", + iconUrl: '', + dateFormat: "dd/MM/yyyy", + dateFormatLocale: "pt-BR", + version: madaraVersion, + sourceCodeUrl: madaraSourceCodeUrl), + Source( + name: "Drope Scan", + baseUrl: "https://dropescan.com", + lang: "pt-br", + typeSource: "madara", + iconUrl: '', + dateFormat: "dd/MM/yyyy", + dateFormatLocale: "pt-BR", + version: madaraVersion, + sourceCodeUrl: madaraSourceCodeUrl), + Source( + name: "EvaScans", + baseUrl: "https://evascans.com", + lang: "tr", + typeSource: "madara", + iconUrl: '', + dateFormat: "MMM d, yyy", + dateFormatLocale: "tr", + version: madaraVersion, + sourceCodeUrl: madaraSourceCodeUrl), + Source( + name: "Final Scans", + baseUrl: "https://finalscans.com", + lang: "pt-br", + typeSource: "madara", + iconUrl: '', + isNsfw: true, + dateFormat: "MMMM d, yyyy", + dateFormatLocale: "pt-BR", + version: madaraVersion, + sourceCodeUrl: madaraSourceCodeUrl), + Source( + name: "Glory Manga", + baseUrl: "https://glorymanga.com", + lang: "tr", + typeSource: "madara", + iconUrl: '', + dateFormat: "dd/MM/yyy", + dateFormatLocale: "tr", + version: madaraVersion, + sourceCodeUrl: madaraSourceCodeUrl), + Source( + name: "Hentai Manga", + baseUrl: "https://hentaimanga.me", + isNsfw: true, + lang: "en", + typeSource: "madara", + iconUrl: '', + dateFormat: "MMMM d, yyyy", + dateFormatLocale: defaultDateFormatLocale, + version: madaraVersion, + sourceCodeUrl: madaraSourceCodeUrl), + Source( + name: "HentaiWebtoon", + baseUrl: "https://hentaiwebtoon.com", + isNsfw: true, + lang: "en", + typeSource: "madara", + iconUrl: '', + dateFormat: "MMMM d, yyyy", + dateFormatLocale: defaultDateFormatLocale, + version: madaraVersion, + sourceCodeUrl: madaraSourceCodeUrl), + Source( + name: "Ikifeng", + baseUrl: "https://ikifeng.com", + lang: "es", + typeSource: "madara", + iconUrl: '', + isNsfw: true, + dateFormat: "dd/MM/yyyy", + dateFormatLocale: "es", + version: madaraVersion, + sourceCodeUrl: madaraSourceCodeUrl), + Source( + name: "Inmortal Scan", + baseUrl: "https://manga.mundodrama.site", + lang: "es", + typeSource: "madara", + iconUrl: '', + dateFormat: "MMMM d, yyyy", + dateFormatLocale: "es", + version: madaraVersion, + sourceCodeUrl: madaraSourceCodeUrl), + Source( + name: "Its Your Right Manhua", + baseUrl: "https://itsyourightmanhua.com/", + lang: "en", + typeSource: "madara", + iconUrl: '', + dateFormat: "MMMM d, yyyy", + dateFormatLocale: defaultDateFormatLocale, + version: madaraVersion, + sourceCodeUrl: madaraSourceCodeUrl), + Source( + name: "Kami Sama Explorer", + baseUrl: "https://leitor.kamisama.com.br", + lang: "pt-br", + typeSource: "madara", + iconUrl: '', + dateFormat: "dd 'de' MMMM 'de' yyyy", + dateFormatLocale: "pt-BR", + version: madaraVersion, + sourceCodeUrl: madaraSourceCodeUrl), + Source( + name: "KlikManga", + baseUrl: "https://klikmanga.id", + lang: "id", + typeSource: "madara", + iconUrl: '', + dateFormat: defaultDateFormat, + dateFormatLocale: "id", + version: madaraVersion, + sourceCodeUrl: madaraSourceCodeUrl), + Source( + name: "KSGroupScans", + baseUrl: "https://ksgroupscans.com", + lang: "en", + typeSource: "madara", + iconUrl: '', + dateFormat: defaultDateFormat, + dateFormatLocale: defaultDateFormatLocale, + version: madaraVersion, + sourceCodeUrl: madaraSourceCodeUrl), + Source( + name: "LHTranslation", + baseUrl: "https://lhtranslation.net", + lang: "en", + typeSource: "madara", + iconUrl: '', + dateFormat: defaultDateFormat, + dateFormatLocale: defaultDateFormatLocale, + version: madaraVersion, + sourceCodeUrl: madaraSourceCodeUrl), + Source( + name: "Lolicon", + baseUrl: "https://lolicon.mobi", + lang: "en", + isNsfw: true, + typeSource: "madara", + iconUrl: '', + dateFormat: defaultDateFormat, + dateFormatLocale: defaultDateFormatLocale, + version: madaraVersion, + sourceCodeUrl: madaraSourceCodeUrl), + Source( + name: "Lord Manga", + baseUrl: "https://lordmanga.com", + lang: "en", + typeSource: "madara", + iconUrl: '', + dateFormat: "MMMM d, yyyy", + dateFormatLocale: defaultDateFormatLocale, + version: madaraVersion, + sourceCodeUrl: madaraSourceCodeUrl), + Source( + name: "MangaVisa", + baseUrl: "https://mangavisa.com", + lang: "en", + typeSource: "madara", + iconUrl: '', + dateFormat: defaultDateFormat, + dateFormatLocale: defaultDateFormatLocale, + version: madaraVersion, + sourceCodeUrl: madaraSourceCodeUrl), + Source( + name: "MangaClash", + baseUrl: "https://mangaclash.com", + lang: "en", + typeSource: "madara", + iconUrl: '', + dateFormat: "MM/dd/yy", + dateFormatLocale: defaultDateFormatLocale, + version: madaraVersion, + sourceCodeUrl: madaraSourceCodeUrl), + Source( + name: "Manga District", + baseUrl: "https://mangadistrict.com", + lang: "tr", + typeSource: "madara", + iconUrl: '', + isNsfw: true, + dateFormat: "MMMM d, yyyy", + dateFormatLocale: defaultDateFormatLocale, + version: madaraVersion, + sourceCodeUrl: madaraSourceCodeUrl), + Source( + name: "Manga-fast.com", + baseUrl: "https://manga-fast.com", + lang: "en", + typeSource: "madara", + iconUrl: '', + dateFormat: "d MMMM'،' yyyy", + dateFormatLocale: defaultDateFormatLocale, + version: madaraVersion, + sourceCodeUrl: madaraSourceCodeUrl), + Source( + name: "Manga Fenix", + baseUrl: "https://manga-fenix.com", + lang: "es", + typeSource: "madara", + iconUrl: '', + dateFormat: "MMMM d, yyyy", + dateFormatLocale: "es", + version: madaraVersion, + sourceCodeUrl: madaraSourceCodeUrl), + Source( + name: "MangaFreak.online", + baseUrl: "https://mangafreak.online", + lang: "en", + typeSource: "madara", + iconUrl: '', + dateFormat: "d MMMM، yyy", + dateFormatLocale: defaultDateFormatLocale, + version: madaraVersion, + sourceCodeUrl: madaraSourceCodeUrl), + Source( + name: "MangaGreat", + baseUrl: "https://mangagreat.com", + lang: "en", + typeSource: "madara", + iconUrl: '', + dateFormat: defaultDateFormat, + dateFormatLocale: defaultDateFormatLocale, + version: madaraVersion, + sourceCodeUrl: madaraSourceCodeUrl), + Source( + name: "Manga Hentai", + baseUrl: "https://mangahentai.me", + lang: "en", + isNsfw: true, + typeSource: "madara", + iconUrl: '', + dateFormat: defaultDateFormat, + dateFormatLocale: defaultDateFormatLocale, + version: madaraVersion, + sourceCodeUrl: madaraSourceCodeUrl), + Source( + name: "MangaMe", + baseUrl: "https://mangame.org", + lang: "en", + typeSource: "madara", + iconUrl: '', + dateFormat: "dd.MM.yyyy", + dateFormatLocale: defaultDateFormatLocale, + version: madaraVersion, + sourceCodeUrl: madaraSourceCodeUrl), + Source( + name: "Manga One Love", + baseUrl: "https://mangaonelove.site", + lang: "ru", + typeSource: "madara", + iconUrl: '', + isNsfw: true, + dateFormat: "dd.MM.yyyy", + dateFormatLocale: defaultDateFormatLocale, + version: madaraVersion, + sourceCodeUrl: madaraSourceCodeUrl), + Source( + name: "Manga Read", + baseUrl: "https://mangaread.co", + lang: "en", + typeSource: "madara", + iconUrl: '', + dateFormat: "yyyy-MM-dd", + dateFormatLocale: defaultDateFormatLocale, + version: madaraVersion, + sourceCodeUrl: madaraSourceCodeUrl), + Source( + name: "MangaRolls", + baseUrl: "https://mangarolls.com", + lang: "en", + typeSource: "madara", + iconUrl: '', + dateFormat: defaultDateFormat, + dateFormatLocale: defaultDateFormatLocale, + version: madaraVersion, + sourceCodeUrl: madaraSourceCodeUrl), + Source( + name: "Manga Şehri", + baseUrl: "https://mangasehri.com", + lang: "tr", + typeSource: "madara", + iconUrl: '', + dateFormat: "dd/MM/yyy", + dateFormatLocale: "tr", + version: madaraVersion, + sourceCodeUrl: madaraSourceCodeUrl), + Source( + name: "Mangasushi", + baseUrl: "https://mangasushi.org", + lang: "en", + typeSource: "madara", + iconUrl: '', + dateFormat: defaultDateFormat, + dateFormatLocale: defaultDateFormatLocale, + version: madaraVersion, + sourceCodeUrl: madaraSourceCodeUrl), + Source( + name: "Manhwa68", + baseUrl: "https://manhwa68.com", + lang: "en", + isNsfw: true, + typeSource: "madara", + iconUrl: '', + dateFormat: "MMMM d, yyyy", + dateFormatLocale: defaultDateFormatLocale, + version: madaraVersion, + sourceCodeUrl: madaraSourceCodeUrl), + Source( + name: "Manhwua.fans", + baseUrl: "https://manhwua.fans", + lang: "en", + typeSource: "madara", + iconUrl: '', + dateFormat: "yyyy'年'M'月'd", + dateFormatLocale: defaultDateFormatLocale, + version: madaraVersion, + sourceCodeUrl: madaraSourceCodeUrl), + Source( + name: "ManyToon.me", + baseUrl: "https://manytoon.me", + lang: "en", + isNsfw: true, + typeSource: "madara", + iconUrl: '', + dateFormat: "MMMM d, yyyy", + dateFormatLocale: defaultDateFormatLocale, + version: madaraVersion, + sourceCodeUrl: madaraSourceCodeUrl), + Source( + name: "Milftoon", + baseUrl: "https://milftoon.xxx", + lang: "en", + isNsfw: true, + typeSource: "madara", + iconUrl: '', + dateFormat: "d MMMM, yyyy", + dateFormatLocale: defaultDateFormatLocale, + version: madaraVersion, + sourceCodeUrl: madaraSourceCodeUrl), + Source( + name: "MurimScan", + baseUrl: "https://murimscan.run", + lang: "en", + isNsfw: true, + typeSource: "madara", + iconUrl: '', + dateFormat: "MMMM d, yyyy", + dateFormatLocale: defaultDateFormatLocale, + version: madaraVersion, + sourceCodeUrl: madaraSourceCodeUrl), + Source( + name: "Ninja Scan", + baseUrl: "https://ninjascan.xyz", + lang: "pt-br", + typeSource: "madara", + iconUrl: '', + dateFormat: "dd 'de' MMMMM 'de' yyyy", + dateFormatLocale: "pt-BR", + version: madaraVersion, + sourceCodeUrl: madaraSourceCodeUrl), + Source( + name: "NovelCrow", + baseUrl: "https://novelcrow.com", + lang: "en", + typeSource: "madara", + iconUrl: '', + isNsfw: true, + dateFormat: defaultDateFormat, + dateFormatLocale: defaultDateFormatLocale, + version: madaraVersion, + sourceCodeUrl: madaraSourceCodeUrl), + Source( + name: "Pirulito Rosa", + baseUrl: "https://pirulitorosa.site", + lang: "pt-br", + typeSource: "madara", + iconUrl: '', + isNsfw: true, + dateFormat: "dd/MM/yyy", + dateFormatLocale: "pt-BR", + version: madaraVersion, + sourceCodeUrl: madaraSourceCodeUrl), + Source( + name: "RagnarokScan", + baseUrl: "https://ragnarokscan.com", + lang: "es", + typeSource: "madara", + iconUrl: '', + dateFormat: "MMMMM dd, yyyy", + dateFormatLocale: "es", + version: madaraVersion, + sourceCodeUrl: madaraSourceCodeUrl), + Source( + name: "Ragnarok Scanlation", + baseUrl: "https://ragnarokscanlation.com", + lang: "es", + typeSource: "madara", + iconUrl: '', + dateFormat: "MMMM d, yyyy", + dateFormatLocale: "es", + version: madaraVersion, + sourceCodeUrl: madaraSourceCodeUrl), + Source( + name: "Rio2 Manga", + baseUrl: "https://rio2manga.com", + lang: "en", + typeSource: "madara", + iconUrl: '', + dateFormat: defaultDateFormat, + dateFormatLocale: defaultDateFormatLocale, + version: madaraVersion, + sourceCodeUrl: madaraSourceCodeUrl), + Source( + name: "Romantik Manga", + baseUrl: "https://rio2manga.com", + lang: "tr", + typeSource: "madara", + iconUrl: '', + dateFormat: "MMMM d, yyyy", + dateFormatLocale: defaultDateFormatLocale, + version: madaraVersion, + sourceCodeUrl: madaraSourceCodeUrl), + Source( + name: "SamuraiScan", + baseUrl: "https://samuraiscan.com", + lang: "es", + typeSource: "madara", + iconUrl: '', + dateFormat: "MMMM d, yyyy", + dateFormatLocale: "es", + version: madaraVersion, + sourceCodeUrl: madaraSourceCodeUrl), + Source( + name: "Sdl scans", + baseUrl: "https://sdlscans.com", + lang: "es", + typeSource: "madara", + iconUrl: '', + dateFormat: "MMMMM dd, yyyy", + dateFormatLocale: "es", + version: madaraVersion, + sourceCodeUrl: madaraSourceCodeUrl), + Source( + name: "Shayami", + baseUrl: "https://shayami.com", + lang: "es", + typeSource: "madara", + iconUrl: '', + dateFormat: "MMM d, yyy", + dateFormatLocale: "es", + version: madaraVersion, + sourceCodeUrl: madaraSourceCodeUrl), + Source( + name: "Taurus Fansub", + baseUrl: "https://tatakaescan.com", + lang: "es", + typeSource: "madara", + iconUrl: '', + dateFormat: "dd/MM/yyy", + dateFormatLocale: "es", + version: madaraVersion, + sourceCodeUrl: madaraSourceCodeUrl), + Source( + name: "The Sugar", + baseUrl: "https://thesugarscan.com", + lang: "pt-br", + typeSource: "madara", + iconUrl: '', + dateFormat: "dd/MM/yyyy", + dateFormatLocale: "pt-BR", + version: madaraVersion, + sourceCodeUrl: madaraSourceCodeUrl), + Source( + name: "365Manga", + baseUrl: "https://365manga.com", + lang: "en", + typeSource: "madara", + iconUrl: '', + dateFormat: defaultDateFormat, + dateFormatLocale: defaultDateFormatLocale, + version: madaraVersion, + sourceCodeUrl: madaraSourceCodeUrl), + Source( + name: "Tortuga Ceviri", + baseUrl: "https://tortuga-ceviri.com", + lang: "tr", + typeSource: "madara", + iconUrl: '', + dateFormat: "MMMM d, yyyy", + dateFormatLocale: "tr", + version: madaraVersion, + sourceCodeUrl: madaraSourceCodeUrl), + Source( + name: "Tumangaonline.site", + baseUrl: "https://tumangaonline.site", + lang: "es", + isNsfw: true, + typeSource: "madara", + iconUrl: '', + dateFormat: "dd MMMMM, yyyy", + dateFormatLocale: "es", + version: madaraVersion, + sourceCodeUrl: madaraSourceCodeUrl), + Source( + name: "Winter Scan", + baseUrl: "https://winterscan.com", + lang: "pt-br", + typeSource: "madara", + iconUrl: '', + dateFormat: "dd 'de' MMMM 'de' yyyy", + dateFormatLocale: "pt-BR", + version: madaraVersion, + sourceCodeUrl: madaraSourceCodeUrl), + Source( + name: "Yuri Verso", + baseUrl: "https://yuri.live", + lang: "pt-br", + typeSource: "madara", + iconUrl: '', + dateFormat: "dd/MM/yyyy", + dateFormatLocale: "pt-BR", + version: madaraVersion, + sourceCodeUrl: madaraSourceCodeUrl), + Source( + name: "Zero Scan", + baseUrl: "https://zeroscan.com.br", + lang: "pt-br", + isNsfw: true, + typeSource: "madara", + iconUrl: '', + dateFormat: "dd/MM/yyyy", + dateFormatLocale: "pt-BR", + version: madaraVersion, + sourceCodeUrl: madaraSourceCodeUrl), + Source( + name: "مانجا ليك", + baseUrl: "https://mangalek.com", + lang: "ar", + typeSource: "madara", + iconUrl: '', + dateFormat: defaultDateFormat, + dateFormatLocale: "ar", + version: madaraVersion, + sourceCodeUrl: madaraSourceCodeUrl), +]; diff --git a/multisrc/mangareader/mangareader-v0.0.1.dart b/multisrc/mangareader/mangareader-v0.0.1.dart new file mode 100644 index 00000000..3d9b29a2 --- /dev/null +++ b/multisrc/mangareader/mangareader-v0.0.1.dart @@ -0,0 +1,194 @@ +// import 'dart:convert'; +// import 'package:bridge_lib/bridge_lib.dart'; + +// getPopularManga(MangaModel manga) async { +// final url = "${manga.baseUrl}/manga/?page=${manga.page}&order=popular"; +// final data = {"url": url, "headers": null, "sourceId": manga.sourceId}; +// final res = await MBridge.http(json.encode(data), 0); +// if (res.isEmpty) { +// return manga; +// } +// manga.urls = +// MBridge.xpath(res, '//*[ @class="imgu" or @class="bsx"]/a/@href', '._') +// .split('._'); +// manga.names = +// MBridge.xpath(res, '//*[ @class="imgu" or @class="bsx"]/a/@title', '._') +// .split('._'); +// manga.images = MBridge.xpath( +// res, '//*[ @class="imgu" or @class="bsx"]/a/div[1]/img/@src', '._') +// .split('._'); +// return manga; +// } + +// getLatestUpdatesManga(MangaModel manga) async { +// final url = "${manga.baseUrl}/manga/?page=${manga.page}&order=update"; +// final data = {"url": url, "headers": null, "sourceId": manga.sourceId}; +// final res = await MBridge.http(json.encode(data), 0); +// if (res.isEmpty) { +// return manga; +// } +// manga.urls = +// MBridge.xpath(res, '//*[ @class="imgu" or @class="bsx"]/a/@href', '._') +// .split('._'); +// manga.names = +// MBridge.xpath(res, '//*[ @class="imgu" or @class="bsx"]/a/@title', '._') +// .split('._'); +// manga.images = MBridge.xpath( +// res, '//*[ @class="imgu" or @class="bsx"]/a/div[1]/img/@src', '._') +// .split('._'); +// return manga; +// } + +// getMangaDetail(MangaModel manga) async { +// final statusList = [ +// { +// "مستمرة": 0, +// "En curso": 0, +// "Ongoing": 0, +// "On going": 0, +// "Ativo": 0, +// "En Cours": 0, +// "Berjalan": 0, +// "Продолжается": 0, +// "Updating": 0, +// "Lançando": 0, +// "In Arrivo": 0, +// "OnGoing": 0, +// "Đang tiến hành": 0, +// "em lançamento": 0, +// "Онгоінг": 0, +// "Publishing": 0, +// "Curso": 0, +// "En marcha": 0, +// "Publicandose": 0, +// "连载中": 0, +// "Devam Ediyor": 0, +// "Em Andamento": 0, +// "In Corso": 0, +// "Güncel": 0, +// "Emision": 0, +// "En emision": 0, +// "مستمر": 0, +// "Đã hoàn thành": 1, +// "مكتملة": 1, +// "Завершено": 1, +// "Complété": 1, +// "Fini": 1, +// "Terminé": 1, +// "Tamamlandı": 1, +// "Tamat": 1, +// "Completado": 1, +// "Concluído": 1, +// "Finished": 1, +// "Completed": 1, +// "Completo": 1, +// "Concluido": 1, +// "已完结": 1, +// "Finalizado": 1, +// "Completata": 1, +// "One-Shot": 1, +// "Bitti": 1, +// "hiatus": 2, +// } +// ]; + +// final datas = { +// "url": manga.link, +// "headers": null, +// "sourceId": manga.sourceId +// }; +// final res = await MBridge.http(json.encode(datas), 0); +// if (res.isEmpty) { +// return manga; +// } +// manga.author = MBridge.xpath( +// res, +// '//*[@class="imptdt" and contains(text(), "Author") or @class="infotable" and contains(text(), "Author") or @class="infotable" and contains(text(), "Auteur") or @class="infotable" and contains(text(), "Autor")]/text()', +// '') +// .replaceAll("Autor", "") +// .replaceAll("Author", "") +// .replaceAll("Auteur", "") +// .replaceAll("[Add, ]", ""); +// manga.description = MBridge.querySelectorAll( +// res, ".desc, .entry-content[itemprop=description]", 0, "", 0, 0, ""); +// final status = MBridge.xpath( +// res, +// '//*[@class="imptdt" and contains(text(), "Status") or @class="imptdt" and contains(text(), "Estado") or @class="infotable" and contains(text(), "Status") or @class="infotable" and contains(text(), "Statut")]/text()', +// '') +// .replaceAll("Status", "") +// .replaceAll("Estado", "") +// .replaceAll("Statut", ""); +// manga.status = MBridge.parseStatus(status, statusList); + +// manga.genre = MBridge.xpath( +// res, +// '//*[@class="gnr" or @class="mgen" or @class="seriestugenre" ]/a/text()', +// "-.") +// .split("-."); +// manga.urls = MBridge.xpath( +// res, +// '//*[@class="bxcl" or @class="cl" or @class="chbox" or @class="eph-num" or @id="chapterlist"]/div/a[not(@href="#/chapter-{{number}}")]/@href', +// "-.") +// .split("-."); +// manga.names = MBridge.xpath( +// res, +// '//*[@class="bxcl" or @class="cl" or @class="chbox" or @class="eph-num" or @id="chapterlist"]/div/a/span[@class="chapternum" and not(text()="Chapter {{number}}") or @class="lch" and not(text()="Chapter {{number}}")]/text()', +// "-.") +// .split("-."); + +// final chaptersDateUploads = MBridge.xpath( +// res, +// '//*[@class="bxcl" or @class="cl" or @class="chbox" or @class="eph-num" or @id="chapterlist"]/div/a/span[@class="chapterdate" and not(text()="{{date}}")]/text()', +// "-.") +// .split("-."); +// manga.chaptersDateUploads = MBridge.listParseDateTime( +// chaptersDateUploads, manga.dateFormat, manga.dateFormatLocale); +// return manga; +// } + +// searchManga(MangaModel manga) async { +// final url = +// "${manga.baseUrl}/manga/?&title=${manga.query}&page=${manga.page}"; +// final data = {"url": url, "headers": null, "sourceId": manga.sourceId}; +// final res = await MBridge.http(json.encode(data), 0); +// if (res.isEmpty) { +// return manga; +// } +// manga.urls = +// MBridge.xpath(res, '//*[ @class="imgu" or @class="bsx"]/a/@href', '._') +// .split('._'); +// manga.names = +// MBridge.xpath(res, '//*[ @class="imgu" or @class="bsx"]/a/@title', '._') +// .split('._'); +// manga.images = MBridge.xpath( +// res, '//*[ @class="imgu" or @class="bsx"]/a/div[1]/img/@src', '._') +// .split('._'); +// return manga; +// } + +// getChapterUrl(MangaModel manga) async { +// final datas = { +// "url": manga.link, +// "headers": null, +// "sourceId": manga.sourceId +// }; +// final res = await MBridge.http(json.encode(datas), 0); +// if (res.isEmpty) { +// return []; +// } +// List pagesUrl = []; +// final pages = MBridge.xpath(res, '//*[@id="readerarea"]/img/@src', "._._") +// .split("._._"); +// if (pages.length == 1) { +// final images = +// MBridge.regExp(res, "\"images\"\\s*:\\s*(\\[.*?])", "", 1, 1); +// final pages = MBridge.jsonDecodeToList(images); +// for (var page in pages) { +// pagesUrl.add(page); +// } +// } else { +// pagesUrl = pages; +// } + +// return pagesUrl; +// } diff --git a/multisrc/mangareader/sources.dart b/multisrc/mangareader/sources.dart new file mode 100644 index 00000000..24745c22 --- /dev/null +++ b/multisrc/mangareader/sources.dart @@ -0,0 +1,927 @@ +import '../../model/source.dart'; + +const mangareaderVersion = "0.0.1"; +const mangareaderSourceCodeUrl = + "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/multisrc/mangareader/mangareader-v$mangareaderVersion.dart"; +const defaultDateFormat = "MMMM dd, yyyy"; +const defaultDateFormatLocale = "en_US"; +List get mangareaderSourcesList => _mangareaderSourcesList; +List _mangareaderSourcesList = [ + Source( + name: "Asura Scans", + baseUrl: "https://www.asurascans.com", + lang: "en", + iconUrl: '', + dateFormat: "MMM d, yyyy", + dateFormatLocale: "en_US", + version: mangareaderVersion, + sourceCodeUrl: mangareaderSourceCodeUrl), + Source( + name: "Legacy Scans", + baseUrl: "https://legacy-scans.com", + lang: "fr", + iconUrl: '', + dateFormat: defaultDateFormat, + hasCloudflare: true, + dateFormatLocale: "fr", + version: mangareaderVersion, + sourceCodeUrl: mangareaderSourceCodeUrl), + Source( + name: "Komik Lab", + baseUrl: "https://komiklab.com", + lang: "en", + iconUrl: '', + dateFormat: defaultDateFormat, + dateFormatLocale: defaultDateFormatLocale, + version: mangareaderVersion, + sourceCodeUrl: mangareaderSourceCodeUrl), + Source( + name: "Miau Scan", + baseUrl: "https://miauscan.com", + lang: "pt-BR", + iconUrl: '', + dateFormat: defaultDateFormat, + dateFormatLocale: defaultDateFormatLocale, + version: mangareaderVersion, + sourceCodeUrl: mangareaderSourceCodeUrl), + Source( + name: "Animated Glitched Scans", + baseUrl: "https://anigliscans.com", + lang: "en", + iconUrl: '', + dateFormat: defaultDateFormat, + dateFormatLocale: defaultDateFormatLocale, + version: mangareaderVersion, + sourceCodeUrl: mangareaderSourceCodeUrl), + Source( + name: "Arena Scans", + baseUrl: "https://arenascans.net", + lang: "en", + iconUrl: '', + dateFormat: defaultDateFormat, + dateFormatLocale: defaultDateFormatLocale, + version: mangareaderVersion, + sourceCodeUrl: mangareaderSourceCodeUrl), + Source( + name: "Azure Scans", + baseUrl: "https://azuremanga.com", + lang: "en", + iconUrl: '', + dateFormat: defaultDateFormat, + dateFormatLocale: defaultDateFormatLocale, + version: mangareaderVersion, + sourceCodeUrl: mangareaderSourceCodeUrl), + Source( + name: "Banana-Scan", + baseUrl: "https://banana-scan.com", + lang: "fr", + isNsfw: true, + iconUrl: '', + dateFormat: defaultDateFormat, + dateFormatLocale: "fr", + version: mangareaderVersion, + sourceCodeUrl: mangareaderSourceCodeUrl), + Source( + name: "Boosei", + baseUrl: "https://boosei.net", + lang: "id", + iconUrl: '', + hasCloudflare: true, + dateFormat: defaultDateFormat, + dateFormatLocale: "id", + version: mangareaderVersion, + sourceCodeUrl: mangareaderSourceCodeUrl), + Source( + name: "Babel Wuxia", + baseUrl: "https://babelwuxia.com", + lang: "en", + iconUrl: '', + dateFormat: defaultDateFormat, + dateFormatLocale: defaultDateFormatLocale, + version: mangareaderVersion, + sourceCodeUrl: mangareaderSourceCodeUrl), + // Source( + // name: "Cartel de Manhwas", + // baseUrl: "https://carteldemanhwas.com", + // lang: "es", + // iconUrl: '', + // dateFormat: defaultDateFormat, + // dateFormatLocale: defaultDateFormatLocale, + // version: mangareaderVersion, + // sourceCodeUrl: mangareaderSourceCodeUrl), + Source( + name: "Clayrer", + baseUrl: "https://clayrer.net", + lang: "es", + iconUrl: '', + dateFormat: "MMM d, yyyy", + dateFormatLocale: "es", + version: mangareaderVersion, + sourceCodeUrl: mangareaderSourceCodeUrl), + Source( + name: "Constellar Scans", + baseUrl: "https://constellarscans.com", + lang: "en", + isNsfw: true, + iconUrl: '', + dateFormat: defaultDateFormat, + dateFormatLocale: defaultDateFormatLocale, + version: mangareaderVersion, + sourceCodeUrl: mangareaderSourceCodeUrl), + Source( + name: "Cosmic Scans", + baseUrl: "https://cosmicscans.com", + lang: "en", + iconUrl: '', + dateFormat: defaultDateFormat, + dateFormatLocale: defaultDateFormatLocale, + version: mangareaderVersion, + sourceCodeUrl: mangareaderSourceCodeUrl), + Source( + name: "CosmicScans.id", + baseUrl: "https://cosmicscans.id", + lang: "id", + iconUrl: '', + dateFormat: defaultDateFormat, + dateFormatLocale: defaultDateFormatLocale, + version: mangareaderVersion, + sourceCodeUrl: mangareaderSourceCodeUrl), + Source( + name: "Diskus Scan", + baseUrl: "https://diskusscan.com", + lang: "pt-BR", + iconUrl: '', + dateFormat: "MMMMM dd, yyyy", + dateFormatLocale: "pt-BR", + version: mangareaderVersion, + sourceCodeUrl: mangareaderSourceCodeUrl), + Source( + name: "Dojing.net", + baseUrl: "https://dojing.net", + lang: "id", + isNsfw: true, + iconUrl: '', + dateFormat: defaultDateFormat, + dateFormatLocale: defaultDateFormatLocale, + version: mangareaderVersion, + sourceCodeUrl: mangareaderSourceCodeUrl), + Source( + name: "DragonTranslation", + baseUrl: "https://dragontranslation.com", + lang: "es", + isNsfw: true, + iconUrl: '', + dateFormat: defaultDateFormat, + dateFormatLocale: defaultDateFormatLocale, + version: mangareaderVersion, + sourceCodeUrl: mangareaderSourceCodeUrl), + Source( + name: "DuniaKomik.id", + baseUrl: "https://duniakomik.id", + lang: "id", + iconUrl: '', + dateFormat: defaultDateFormat, + dateFormatLocale: "id", + version: mangareaderVersion, + sourceCodeUrl: mangareaderSourceCodeUrl), + Source( + name: "ElarcPage", + baseUrl: "https://elarcpage.com", + lang: "en", + iconUrl: '', + dateFormat: defaultDateFormat, + dateFormatLocale: defaultDateFormatLocale, + version: mangareaderVersion, + sourceCodeUrl: mangareaderSourceCodeUrl), + Source( + name: "Epsilon Scan", + baseUrl: "https://epsilonscan.fr", + lang: "fr", + isNsfw: true, + iconUrl: '', + dateFormat: defaultDateFormat, + dateFormatLocale: "fr", + version: mangareaderVersion, + sourceCodeUrl: mangareaderSourceCodeUrl), + Source( + name: "Franxx Mangás", + baseUrl: "https://franxxmangas.net", + lang: "pt-BR", + isNsfw: true, + iconUrl: '', + dateFormat: "MMMMM dd, yyyy", + dateFormatLocale: "pt-BR", + version: mangareaderVersion, + sourceCodeUrl: mangareaderSourceCodeUrl), + Source( + name: "Gecenin Lordu", + baseUrl: "https://geceninlordu.com", + lang: "tr", + iconUrl: '', + dateFormat: defaultDateFormat, + dateFormatLocale: defaultDateFormatLocale, + version: mangareaderVersion, + sourceCodeUrl: mangareaderSourceCodeUrl), + Source( + name: "GoGoManga", + baseUrl: "https://gogomanga.fun", + lang: "en", + iconUrl: '', + dateFormat: defaultDateFormat, + dateFormatLocale: defaultDateFormatLocale, + version: mangareaderVersion, + sourceCodeUrl: mangareaderSourceCodeUrl), + Source( + name: "Gremory Mangas", + baseUrl: "https://gremorymangas.com", + lang: "es", + iconUrl: '', + dateFormat: defaultDateFormat, + dateFormatLocale: defaultDateFormatLocale, + version: mangareaderVersion, + sourceCodeUrl: mangareaderSourceCodeUrl), + Source( + name: "Hanuman Scan", + baseUrl: "https://hanumanscan.com", + lang: "en", + iconUrl: '', + dateFormat: defaultDateFormat, + dateFormatLocale: defaultDateFormatLocale, + version: mangareaderVersion, + sourceCodeUrl: mangareaderSourceCodeUrl), + Source( + name: "Heroxia", + baseUrl: "https://heroxia.com", + lang: "id", + isNsfw: true, + iconUrl: '', + dateFormat: defaultDateFormat, + dateFormatLocale: defaultDateFormatLocale, + version: mangareaderVersion, + sourceCodeUrl: mangareaderSourceCodeUrl), + Source( + name: "Imagine Scan", + baseUrl: "https://imaginescan.com.br", + lang: "pt-BR", + isNsfw: true, + iconUrl: '', + dateFormat: "MMMMM dd, yyyy", + dateFormatLocale: "pt-BR", + version: mangareaderVersion, + sourceCodeUrl: mangareaderSourceCodeUrl), + Source( + name: "Infernal Void Scans", + baseUrl: "https://void-scans.com", + lang: "en", + iconUrl: '', + dateFormat: defaultDateFormat, + dateFormatLocale: defaultDateFormatLocale, + version: mangareaderVersion, + sourceCodeUrl: mangareaderSourceCodeUrl), + Source( + name: "KataKomik", + baseUrl: "https://katakomik.online", + lang: "id", + iconUrl: '', + dateFormat: defaultDateFormat, + dateFormatLocale: defaultDateFormatLocale, + version: mangareaderVersion, + sourceCodeUrl: mangareaderSourceCodeUrl), + Source( + name: "Komik Seru", + baseUrl: "https://komikseru.me", + lang: "id", + isNsfw: true, + iconUrl: '', + dateFormat: defaultDateFormat, + dateFormatLocale: defaultDateFormatLocale, + version: mangareaderVersion, + sourceCodeUrl: mangareaderSourceCodeUrl), + Source( + name: "Kanzenin", + baseUrl: "https://kanzenin.xyz", + lang: "id", + isNsfw: true, + iconUrl: '', + dateFormat: defaultDateFormat, + dateFormatLocale: defaultDateFormatLocale, + version: mangareaderVersion, + sourceCodeUrl: mangareaderSourceCodeUrl), + Source( + name: "KomikSan", + baseUrl: "https://komiksan.ml", + lang: "id", + iconUrl: '', + dateFormat: defaultDateFormat, + dateFormatLocale: defaultDateFormatLocale, + version: mangareaderVersion, + sourceCodeUrl: mangareaderSourceCodeUrl), + Source( + name: "Kiryuu", + baseUrl: "https://kiryuu.id", + lang: "id", + iconUrl: '', + dateFormat: defaultDateFormat, + dateFormatLocale: "id", + version: mangareaderVersion, + sourceCodeUrl: mangareaderSourceCodeUrl), + Source( + name: "Komik AV", + baseUrl: "https://komikav.com", + lang: "id", + iconUrl: '', + hasCloudflare: true, + dateFormat: defaultDateFormat, + dateFormatLocale: "id", + version: mangareaderVersion, + sourceCodeUrl: mangareaderSourceCodeUrl), + Source( + name: "Komik Station", + baseUrl: "https://komikstation.co", + lang: "id", + iconUrl: '', + dateFormat: defaultDateFormat, + hasCloudflare: true, + dateFormatLocale: defaultDateFormatLocale, + version: mangareaderVersion, + sourceCodeUrl: mangareaderSourceCodeUrl), + Source( + name: "KomikMama", + baseUrl: "https://komikmama.co", + lang: "id", + iconUrl: '', + dateFormat: defaultDateFormat, + dateFormatLocale: "id", + version: mangareaderVersion, + sourceCodeUrl: mangareaderSourceCodeUrl), + Source( + name: "KumaPoi", + baseUrl: "https://kumapoi.club", + lang: "id", + isNsfw: true, + iconUrl: '', + dateFormat: defaultDateFormat, + dateFormatLocale: "id", + hasCloudflare: true, + version: mangareaderVersion, + sourceCodeUrl: mangareaderSourceCodeUrl), + Source( + name: "Komiku.com", + baseUrl: "https://komiku.com", + lang: "id", + iconUrl: '', + dateFormat: defaultDateFormat, + dateFormatLocale: "id", + version: mangareaderVersion, + sourceCodeUrl: mangareaderSourceCodeUrl), + Source( + name: "Kuma Scans (Kuma Translation)", + baseUrl: "https://kumascans.com", + lang: "en", + iconUrl: '', + dateFormat: defaultDateFormat, + dateFormatLocale: defaultDateFormatLocale, + hasCloudflare: true, + version: mangareaderVersion, + sourceCodeUrl: mangareaderSourceCodeUrl), + Source( + name: "Legacy Scans", + baseUrl: "https://legacy-scans.com", + lang: "fr", + iconUrl: '', + dateFormat: defaultDateFormat, + dateFormatLocale: defaultDateFormatLocale, + version: mangareaderVersion, + sourceCodeUrl: mangareaderSourceCodeUrl), + Source( + name: "LianScans", + baseUrl: "https://www.lianscans.my.id", + lang: "id", + isNsfw: true, + iconUrl: '', + dateFormat: defaultDateFormat, + hasCloudflare: true, + dateFormatLocale: defaultDateFormatLocale, + version: mangareaderVersion, + sourceCodeUrl: mangareaderSourceCodeUrl), + Source( + name: "Magus Manga", + baseUrl: "https://magusmanga.com", + lang: "ar", + iconUrl: '', + dateFormat: "MMMMM d, yyyy", + dateFormatLocale: "ar", + version: mangareaderVersion, + sourceCodeUrl: mangareaderSourceCodeUrl), + Source( + name: "Manga Indo.me", + baseUrl: "https://mangaindo.me", + lang: "id", + iconUrl: '', + dateFormat: defaultDateFormat, + dateFormatLocale: defaultDateFormatLocale, + version: mangareaderVersion, + sourceCodeUrl: mangareaderSourceCodeUrl), + Source( + name: "Manga Raw.org", + baseUrl: "https://mangaraw.org", + lang: "ja", + iconUrl: '', + dateFormat: defaultDateFormat, + dateFormatLocale: defaultDateFormatLocale, + version: mangareaderVersion, + sourceCodeUrl: mangareaderSourceCodeUrl), + Source( + name: "Mangacim", + baseUrl: "https://www.mangacim.com", + lang: "tr", + iconUrl: '', + dateFormat: "MMM d, yyy", + dateFormatLocale: "tr", + version: mangareaderVersion, + sourceCodeUrl: mangareaderSourceCodeUrl), + Source( + name: "MangaKita", + baseUrl: "https://mangakita.net", + lang: "id", + iconUrl: '', + dateFormat: defaultDateFormat, + dateFormatLocale: defaultDateFormatLocale, + version: mangareaderVersion, + sourceCodeUrl: mangareaderSourceCodeUrl), + Source( + name: "MangaTale", + baseUrl: "https://mangatale.co", + lang: "id", + iconUrl: '', + dateFormat: defaultDateFormat, + dateFormatLocale: defaultDateFormatLocale, + version: mangareaderVersion, + sourceCodeUrl: mangareaderSourceCodeUrl), + Source( + name: "MangaWT", + baseUrl: "https://mangawt.com", + lang: "tr", + iconUrl: '', + dateFormat: "MMM d, yyyy", + dateFormatLocale: "tr", + version: mangareaderVersion, + sourceCodeUrl: mangareaderSourceCodeUrl), + Source( + name: "Mangayaro", + baseUrl: "https://mangayaro.net", + lang: "id", + iconUrl: '', + dateFormat: defaultDateFormat, + hasCloudflare: true, + dateFormatLocale: defaultDateFormatLocale, + version: mangareaderVersion, + sourceCodeUrl: mangareaderSourceCodeUrl), + Source( + name: "Manhwa Lover", + baseUrl: "https://manhwalover.com", + lang: "en", + isNsfw: true, + iconUrl: '', + dateFormat: defaultDateFormat, + dateFormatLocale: defaultDateFormatLocale, + version: mangareaderVersion, + sourceCodeUrl: mangareaderSourceCodeUrl), + Source( + name: "MangaSwat", + baseUrl: "https://swatop.club/", + lang: "ar", + iconUrl: '', + dateFormat: defaultDateFormat, + dateFormatLocale: defaultDateFormatLocale, + version: mangareaderVersion, + sourceCodeUrl: mangareaderSourceCodeUrl), + Source( + name: "Mangás Chan", + baseUrl: "https://mangaschan.com", + lang: "pt-BR", + iconUrl: '', + dateFormat: defaultDateFormat, + dateFormatLocale: "pt-br", + version: mangareaderVersion, + sourceCodeUrl: mangareaderSourceCodeUrl), + Source( + name: "Manhwa Freak", + baseUrl: "https://manhwafreak.com", + lang: "en", + iconUrl: '', + dateFormat: defaultDateFormat, + dateFormatLocale: defaultDateFormatLocale, + version: mangareaderVersion, + sourceCodeUrl: mangareaderSourceCodeUrl), + Source( + name: "ManhwaLand.mom", + baseUrl: "https://manhwaland.us", + lang: "id", + isNsfw: true, + iconUrl: '', + dateFormat: defaultDateFormat, + hasCloudflare: true, + dateFormatLocale: defaultDateFormatLocale, + version: mangareaderVersion, + sourceCodeUrl: mangareaderSourceCodeUrl), + Source( + name: "Manhwax", + baseUrl: "https://manhwax.com", + lang: "en", + isNsfw: true, + iconUrl: '', + dateFormat: defaultDateFormat, + dateFormatLocale: defaultDateFormatLocale, + version: mangareaderVersion, + sourceCodeUrl: mangareaderSourceCodeUrl), + Source( + name: "Mareceh", + baseUrl: "https://mareceh.com", + lang: "id", + isNsfw: true, + iconUrl: '', + dateFormat: defaultDateFormat, + dateFormatLocale: defaultDateFormatLocale, + version: mangareaderVersion, + sourceCodeUrl: mangareaderSourceCodeUrl), + Source( + name: "MasterKomik", + baseUrl: "https://masterkomik.com", + lang: "id", + iconUrl: '', + dateFormat: defaultDateFormat, + hasCloudflare: true, + dateFormatLocale: "id", + version: mangareaderVersion, + sourceCodeUrl: mangareaderSourceCodeUrl), + Source( + name: "MELOKOMIK", + baseUrl: "https://melokomik.xyz", + lang: "id", + iconUrl: '', + dateFormat: defaultDateFormat, + dateFormatLocale: "id", + version: mangareaderVersion, + sourceCodeUrl: mangareaderSourceCodeUrl), + Source( + name: "Mihentai", + baseUrl: "https://mihentai.com", + lang: "all", + isNsfw: true, + iconUrl: '', + dateFormat: defaultDateFormat, + dateFormatLocale: defaultDateFormatLocale, + version: mangareaderVersion, + sourceCodeUrl: mangareaderSourceCodeUrl), + Source( + name: "Mode Scanlator", + baseUrl: "https://modescanlator.com", + lang: "pt-BR", + iconUrl: '', + dateFormat: "MMMMM dd, yyyy", + dateFormatLocale: "pt-BR", + version: mangareaderVersion, + sourceCodeUrl: mangareaderSourceCodeUrl), + Source( + name: "Mundo Mangá-Kun", + baseUrl: "https://mundomangakun.com.br", + lang: "pt-BR", + isNsfw: true, + iconUrl: '', + dateFormat: "MMMMM dd, yyyy", + dateFormatLocale: "pt-BR", + version: mangareaderVersion, + sourceCodeUrl: mangareaderSourceCodeUrl), + Source( + name: "Nekomik", + baseUrl: "https://nekomik.com", + lang: "id", + iconUrl: '', + dateFormat: defaultDateFormat, + hasCloudflare: true, + dateFormatLocale: defaultDateFormatLocale, + version: mangareaderVersion, + sourceCodeUrl: mangareaderSourceCodeUrl), + Source( + name: "Ngomik", + baseUrl: "https://ngomik.net", + lang: "id", + iconUrl: '', + dateFormat: defaultDateFormat, + dateFormatLocale: defaultDateFormatLocale, + version: mangareaderVersion, + sourceCodeUrl: mangareaderSourceCodeUrl), + Source( + name: "Nocturnal Scans", + baseUrl: "https://nocturnalscans.com", + lang: "en", + iconUrl: '', + dateFormat: defaultDateFormat, + dateFormatLocale: defaultDateFormatLocale, + version: mangareaderVersion, + sourceCodeUrl: mangareaderSourceCodeUrl), + Source( + name: "Origami Orpheans", + baseUrl: "https://origami-orpheans.com.br", + lang: "pt-BR", + iconUrl: '', + dateFormat: "MMMMM dd, yyyy", + dateFormatLocale: "pt-BR", + version: mangareaderVersion, + sourceCodeUrl: mangareaderSourceCodeUrl), + Source( + name: "Ozul Scans", + baseUrl: "https://ozulscans.com", + lang: "ar", + iconUrl: '', + dateFormat: "MMM d, yyy", + dateFormatLocale: "ar", + version: mangareaderVersion, + sourceCodeUrl: mangareaderSourceCodeUrl), + Source( + name: "Patatescans", + baseUrl: "https://patatescans.com", + lang: "fr", + isNsfw: true, + iconUrl: '', + dateFormat: defaultDateFormat, + dateFormatLocale: defaultDateFormatLocale, + version: mangareaderVersion, + sourceCodeUrl: mangareaderSourceCodeUrl), + Source( + name: "Phantom Scans", + baseUrl: "https://phantomscans.com", + lang: "en", + iconUrl: '', + dateFormat: defaultDateFormat, + dateFormatLocale: defaultDateFormatLocale, + version: mangareaderVersion, + sourceCodeUrl: mangareaderSourceCodeUrl), + Source( + name: "PhenixScans", + baseUrl: "https://phenixscans.fr", + lang: "fr", + iconUrl: '', + dateFormat: "MMMM dd, yyyy", + dateFormatLocale: "fr", + version: mangareaderVersion, + sourceCodeUrl: mangareaderSourceCodeUrl), + Source( + name: "Pi Scans", + baseUrl: "https://piscans.in", + lang: "id", + iconUrl: '', + dateFormat: defaultDateFormat, + dateFormatLocale: defaultDateFormatLocale, + version: mangareaderVersion, + sourceCodeUrl: mangareaderSourceCodeUrl), + Source( + name: "PMScans", + baseUrl: "https://rackusreads.com", + lang: "en", + iconUrl: '', + dateFormat: defaultDateFormat, + dateFormatLocale: defaultDateFormatLocale, + version: mangareaderVersion, + sourceCodeUrl: mangareaderSourceCodeUrl), + Source( + name: "Raiki Scan", + baseUrl: "https://raikiscan.com", + lang: "es", + iconUrl: '', + dateFormat: "MMMM dd, yyyy", + dateFormatLocale: defaultDateFormatLocale, + version: mangareaderVersion, + sourceCodeUrl: mangareaderSourceCodeUrl), + Source( + name: "Raven Scans", + baseUrl: "https://ravenscans.com", + lang: "en", + iconUrl: '', + dateFormat: defaultDateFormat, + dateFormatLocale: defaultDateFormatLocale, + version: mangareaderVersion, + sourceCodeUrl: mangareaderSourceCodeUrl), + Source( + name: "Rawkuma", + baseUrl: "https://rawkuma.com/", + lang: "ja", + iconUrl: '', + dateFormat: defaultDateFormat, + hasCloudflare: true, + dateFormatLocale: defaultDateFormatLocale, + version: mangareaderVersion, + sourceCodeUrl: mangareaderSourceCodeUrl), + Source( + name: "Readkomik", + baseUrl: "https://readkomik.com", + lang: "en", + iconUrl: '', + dateFormat: defaultDateFormat, + hasCloudflare: true, + dateFormatLocale: defaultDateFormatLocale, + version: mangareaderVersion, + sourceCodeUrl: mangareaderSourceCodeUrl), + Source( + name: "Ryukonesia", + baseUrl: "https://ryukonesia.net", + lang: "id", + iconUrl: '', + dateFormat: defaultDateFormat, + hasCloudflare: true, + dateFormatLocale: defaultDateFormatLocale, + version: mangareaderVersion, + sourceCodeUrl: mangareaderSourceCodeUrl), + Source( + name: "Sekaikomik", + baseUrl: "https://www.sekaikomik.pro", + lang: "id", + isNsfw: true, + iconUrl: '', + dateFormat: "MMMM dd, yyyy", + dateFormatLocale: "id", + version: mangareaderVersion, + sourceCodeUrl: mangareaderSourceCodeUrl), + Source( + name: "Sekte Doujin", + baseUrl: "https://sektedoujin.lol", + lang: "id", + isNsfw: true, + iconUrl: '', + dateFormat: "MMMM dd, yyyy", + hasCloudflare: true, + dateFormatLocale: "id", + version: mangareaderVersion, + sourceCodeUrl: mangareaderSourceCodeUrl), + Source( + name: "Senpai Ediciones", + baseUrl: "http://senpaiediciones.com", + lang: "es", + iconUrl: '', + dateFormat: defaultDateFormat, + dateFormatLocale: defaultDateFormatLocale, + version: mangareaderVersion, + sourceCodeUrl: mangareaderSourceCodeUrl), + Source( + name: "Shadow Mangas", + baseUrl: "https://shadowmangas.com", + lang: "es", + iconUrl: '', + dateFormat: "MMMM dd, yyyy", + dateFormatLocale: "es", + version: mangareaderVersion, + sourceCodeUrl: mangareaderSourceCodeUrl), + Source( + name: "Shea Manga", + baseUrl: "https://sheakomik.com", + lang: "id", + iconUrl: '', + dateFormat: "MMMM dd, yyyy", + hasCloudflare: true, + dateFormatLocale: "id", + version: mangareaderVersion, + sourceCodeUrl: mangareaderSourceCodeUrl), + Source( + name: "Silence Scan", + baseUrl: "https://silencescan.com.br", + lang: "pt-BR", + isNsfw: true, + iconUrl: '', + dateFormat: "MMMMM dd, yyyy", + dateFormatLocale: "pt-BR", + version: mangareaderVersion, + sourceCodeUrl: mangareaderSourceCodeUrl), + Source( + name: "Snudae Scans", + baseUrl: "https://snudaescans.com", + lang: "en", + isNsfw: true, + iconUrl: '', + dateFormat: defaultDateFormat, + dateFormatLocale: defaultDateFormatLocale, + version: mangareaderVersion, + sourceCodeUrl: mangareaderSourceCodeUrl), + Source( + name: "Summer Fansub", + baseUrl: "https://smmr.in", + lang: "pt-BR", + isNsfw: true, + iconUrl: '', + dateFormat: "MMMMM dd, yyyy", + dateFormatLocale: "pt-BR", + version: mangareaderVersion, + sourceCodeUrl: mangareaderSourceCodeUrl), + Source( + name: "Surya Scans", + baseUrl: "https://suryascans.com", + lang: "en", + iconUrl: '', + dateFormat: defaultDateFormat, + dateFormatLocale: defaultDateFormatLocale, + version: mangareaderVersion, + sourceCodeUrl: mangareaderSourceCodeUrl), + Source( + name: "Sushi-Scan", + baseUrl: "https://sushiscan.net", + lang: "fr", + iconUrl: '', + dateFormat: "MMMM dd, yyyy", + hasCloudflare: true, + dateFormatLocale: "fr", + version: mangareaderVersion, + sourceCodeUrl: mangareaderSourceCodeUrl), + Source( + name: "Tarot Scans", + baseUrl: "https://www.tarotscans.com", + lang: "tr", + iconUrl: '', + dateFormat: "MMMM dd, yyyy", + dateFormatLocale: "tr", + version: mangareaderVersion, + sourceCodeUrl: mangareaderSourceCodeUrl), + Source( + name: "The Apollo Team", + baseUrl: "https://theapollo.team", + lang: "en", + iconUrl: '', + dateFormat: defaultDateFormat, + dateFormatLocale: defaultDateFormatLocale, + version: mangareaderVersion, + sourceCodeUrl: mangareaderSourceCodeUrl), + Source( + name: "Tsundoku Traduções", + baseUrl: "https://tsundoku.com.br", + lang: "pt-BR", + iconUrl: '', + hasCloudflare: true, + dateFormat: "MMMMM dd, yyyy", + dateFormatLocale: "pt-BR", + version: mangareaderVersion, + sourceCodeUrl: mangareaderSourceCodeUrl), + Source( + name: "TukangKomik", + baseUrl: "https://tukangkomik.id", + lang: "id", + iconUrl: '', + dateFormat: "MMM d, yyyy", + dateFormatLocale: "tr", + version: mangareaderVersion, + sourceCodeUrl: mangareaderSourceCodeUrl), + Source( + name: "TurkToon", + baseUrl: "https://turktoon.com", + lang: "tr", + iconUrl: '', + dateFormat: defaultDateFormat, + dateFormatLocale: defaultDateFormatLocale, + version: mangareaderVersion, + sourceCodeUrl: mangareaderSourceCodeUrl), + Source( + name: "Uzay Manga", + baseUrl: "https://uzaymanga.com", + lang: "tr", + iconUrl: '', + dateFormat: "MMM d, yyyy", + dateFormatLocale: "tr", + version: mangareaderVersion, + sourceCodeUrl: mangareaderSourceCodeUrl), + Source( + name: "Walpurgi Scan", + baseUrl: "https://www.walpurgiscan.com", + lang: "it", + iconUrl: '', + dateFormat: "MMM d, yyyy", + dateFormatLocale: "it", + version: mangareaderVersion, + sourceCodeUrl: mangareaderSourceCodeUrl), + Source( + name: "West Manga", + baseUrl: "https://westmanga.info", + lang: "id", + iconUrl: '', + hasCloudflare: true, + dateFormat: defaultDateFormat, + dateFormatLocale: defaultDateFormatLocale, + version: mangareaderVersion, + sourceCodeUrl: mangareaderSourceCodeUrl), + Source( + name: "xCaliBR Scans", + baseUrl: "https://xcalibrscans.com", + lang: "en", + iconUrl: '', + dateFormat: defaultDateFormat, + dateFormatLocale: defaultDateFormatLocale, + version: mangareaderVersion, + sourceCodeUrl: mangareaderSourceCodeUrl), + Source( + name: "สดใสเมะ", + baseUrl: "https://www.xn--l3c0azab5a2gta.com", + lang: "th", + isNsfw: true, + iconUrl: '', + dateFormat: defaultDateFormat, + dateFormatLocale: "th", + version: mangareaderVersion, + sourceCodeUrl: mangareaderSourceCodeUrl), +]; diff --git a/multisrc/mmrcms/mmrcms-v0.0.1.dart b/multisrc/mmrcms/mmrcms-v0.0.1.dart new file mode 100644 index 00000000..99f7d917 --- /dev/null +++ b/multisrc/mmrcms/mmrcms-v0.0.1.dart @@ -0,0 +1,173 @@ +// import 'dart:convert'; +// import 'package:bridge_lib/bridge_lib.dart'; + +// searchManga(MangaModel manga) async { +// final url = "${manga.baseUrl}/search?query=${manga.query}"; +// final data = {"url": url, "headers": null, "sourceId": manga.sourceId}; +// final res = await MBridge.http(json.encode(data), 0); +// if (res.isEmpty) { +// return manga; +// } +// final jsonList = MBridge.jsonPathToList(res, r'$.suggestions[*]'); +// List urls = []; +// List names = []; +// List images = []; +// for (var da in jsonList) { +// final value = MBridge.getMapValue(da, "value", 0); +// final data = MBridge.getMapValue(da, "data", 0); + +// if (manga.source == 'Scan VF') { +// urls.add('${manga.baseUrl}/$data'); +// } else { +// urls.add('${manga.baseUrl}/manga/$data'); +// } +// names.add(value); +// if (manga.source == "Manga-FR") { +// images.add("${manga.baseUrl}/uploads/manga/$data.jpg"); +// } else { +// images +// .add("${manga.baseUrl}/uploads/manga/$data/cover/cover_250x350.jpg"); +// } +// } +// manga.names = names; +// manga.urls = urls; +// manga.images = images; +// return manga; +// } + +// getPopularManga(MangaModel manga) async { +// final url = +// "${manga.baseUrl}/filterList?page=${manga.page}&sortBy=views&asc=false"; +// final data = {"url": url, "headers": null, "sourceId": manga.sourceId}; +// final res = await MBridge.http(json.encode(data), 0); +// if (res.isEmpty) { +// return manga; +// } +// manga.urls = +// MBridge.xpath(res, '//*[ @class="chart-title"]/@href', '._').split('._'); +// manga.names = +// MBridge.xpath(res, '//*[ @class="chart-title"]/text()', '._').split('._'); +// List images = []; +// for (var url in manga.urls) { +// if (manga.source == "Manga-FR") { +// images.add( +// "${manga.baseUrl}/uploads/manga/${MBridge.listParse(MBridge.stringParse(url).split('/'), 2)[0]}.jpg"); +// } else { +// images.add( +// "${manga.baseUrl}/uploads/manga/${MBridge.listParse(MBridge.stringParse(url).split('/'), 2)[0]}/cover/cover_250x350.jpg"); +// } +// } +// manga.images = images; +// return manga; +// } + +// getMangaDetail(MangaModel manga) async { +// final statusList = [ +// { +// "complete": 1, +// "complet": 1, +// "completo": 1, +// "zakończone": 1, +// "concluído": 1, +// "مكتملة": 1, +// "ongoing": 0, +// "en cours": 0, +// "em lançamento": 0, +// "prace w toku": 0, +// "ativo": 0, +// "مستمرة": 0, +// "em andamento": 0 +// } +// ]; + +// final datas = { +// "url": manga.link, +// "headers": null, +// "sourceId": manga.sourceId +// }; +// final res = await MBridge.http(json.encode(datas), 0); +// if (res.isEmpty) { +// return manga; +// } +// manga.author = MBridge.xpath( +// res, +// '//*[@class="dl-horizontal"]/dt[contains(text(), "Auteur(s)") or contains(text(), "Author(s)") or contains(text(), "Autor(es)") or contains(text(), "Yazar(lar) or contains(text(), "Mangaka(lar)")]//following-sibling::dd[1]/text()', +// ''); +// final status = MBridge.xpath( +// res, +// '//*[@class="dl-horizontal"]/dt[contains(text(), "Statut") or contains(text(), "Status") or contains(text(), "Estado") or contains(text(), "Durum")]/following-sibling::dd[1]/text()', +// ''); +// manga.status = MBridge.parseStatus(status, statusList); +// manga.description = MBridge.xpath( +// res, '//*[@class="well" or @class="manga well"]/p/text()', ''); +// manga.genre = MBridge.xpath( +// res, +// '//*[@class="dl-horizontal"]/dt[contains(text(), "Categories") or contains(text(), "Categorias") or contains(text(), "Categorías") or contains(text(), "Catégories") or contains(text(), "Kategoriler" or contains(text(), "Kategorie") or contains(text(), "Kategori") or contains(text(), "Tagi"))]/following-sibling::dd[1]/text()', +// '') +// .split(','); +// manga.names = +// MBridge.xpath(res, '//*[@class="chapter-title-rtl"]/a/text()', "-.") +// .split("-."); +// manga.urls = +// MBridge.xpath(res, '//*[@class="chapter-title-rtl"]/a/@href', "-.") +// .split("-."); +// final date = +// MBridge.xpath(res, '//*[@class="date-chapter-title-rtl"]/text()', "-.") +// .split("-."); +// manga.chaptersDateUploads = +// MBridge.listParseDateTime(date, "d MMM. yyyy", "en_US"); + +// return manga; +// } + +// getLatestUpdatesManga(MangaModel manga) async { +// final url = "${manga.baseUrl}/latest-release?page=${manga.page}"; +// final data = {"url": url, "headers": null, "sourceId": manga.sourceId}; +// final res = await MBridge.http(json.encode(data), 0); +// if (res.isEmpty) { +// return manga; +// } +// manga.urls = MBridge.xpath(res, '//*[@class="manga-item"]/h3/a/@href', '._') +// .split('._'); +// manga.names = MBridge.xpath(res, '//*[@class="manga-item"]/h3/a/text()', '._') +// .split('._'); +// List images = []; +// for (var url in manga.urls) { +// if (manga.source == "Manga-FR") { +// images.add( +// "${manga.baseUrl}/uploads/manga/${MBridge.listParse(MBridge.stringParse(url).split('/'), 2)[0]}.jpg"); +// } else { +// images.add( +// "${manga.baseUrl}/uploads/manga/${MBridge.listParse(MBridge.stringParse(url).split('/'), 2)[0]}/cover/cover_250x350.jpg"); +// } +// } +// manga.images = images; +// return manga; +// } + +// getChapterUrl(MangaModel manga) async { +// final datas = { +// "url": manga.link, +// "headers": null, +// "sourceId": manga.sourceId +// }; +// final res = await MBridge.http(json.encode(datas), 0); +// if (res.isEmpty) { +// return []; +// } +// List pagesUrl = []; +// final pages = MBridge.listParse( +// MBridge.xpath(res, +// '//*[@id="all"]/img[@class="img-responsive"]/@data-src', "._._") +// .split("._._"), +// 0); +// for (var page in pages) { +// if (page.startsWith('//')) { +// pagesUrl.add(page.replaceAll('//', 'https://')); +// } else { +// pagesUrl.add(page); +// } +// } + +// return pagesUrl; +// } diff --git a/multisrc/mmrcms/sources.dart b/multisrc/mmrcms/sources.dart new file mode 100644 index 00000000..6e465282 --- /dev/null +++ b/multisrc/mmrcms/sources.dart @@ -0,0 +1,166 @@ +import '../../model/source.dart'; + +const mmrcmsVersion = "0.0.1"; +const mmrcmsSourceCodeUrl = + "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/multisrc/mmrcms/mmrcms-v$mmrcmsVersion.dart"; +const defaultDateFormat = "d MMM. yyyy"; +const defaultDateFormatLocale = "en_US"; + +List get mmrcmsSourcesList => _mmrcmsSourcesList; +List _mmrcmsSourcesList = [ + Source( + name: "Scan FR", + baseUrl: "https://www.scan-fr.org", + lang: "fr", + typeSource: "mmrcms", + iconUrl: '', + dateFormat: defaultDateFormat, + dateFormatLocale: defaultDateFormatLocale, + version: mmrcmsVersion, + sourceCodeUrl: mmrcmsSourceCodeUrl, + ), + Source( + name: "Scan VF", + baseUrl: "https://www.scan-vf.net", + lang: "fr", + typeSource: "mmrcms", + iconUrl: '', + dateFormat: defaultDateFormat, + dateFormatLocale: defaultDateFormatLocale, + version: mmrcmsVersion, + sourceCodeUrl: mmrcmsSourceCodeUrl, + ), + Source( + name: "Komikid", + baseUrl: "https://www.komikid.com", + lang: "id", + typeSource: "mmrcms", + iconUrl: '', + dateFormat: defaultDateFormat, + dateFormatLocale: defaultDateFormatLocale, + version: mmrcmsVersion, + sourceCodeUrl: mmrcmsSourceCodeUrl, + ), + Source( + name: "MangaID", + baseUrl: "https://mangaid.click", + lang: "id", + typeSource: "mmrcms", + iconUrl: '', + dateFormat: defaultDateFormat, + dateFormatLocale: defaultDateFormatLocale, + version: mmrcmsVersion, + sourceCodeUrl: mmrcmsSourceCodeUrl, + ), + Source( + name: "Jpmangas", + baseUrl: "https://jpmangas.cc", + lang: "fr", + typeSource: "mmrcms", + iconUrl: '', + dateFormat: defaultDateFormat, + dateFormatLocale: defaultDateFormatLocale, + version: mmrcmsVersion, + sourceCodeUrl: mmrcmsSourceCodeUrl, + ), + + Source( + name: "مانجا اون لاين", + baseUrl: "https://onma.top", + lang: "ar", + typeSource: "mmrcms", + iconUrl: '', + dateFormat: defaultDateFormat, + dateFormatLocale: defaultDateFormatLocale, + version: mmrcmsVersion, + sourceCodeUrl: mmrcmsSourceCodeUrl, + ), + Source( + name: "Read Comics Online", + baseUrl: "https://readcomicsonline.ru", + lang: "en", + typeSource: "mmrcms", + iconUrl: '', + dateFormat: defaultDateFormat, + dateFormatLocale: defaultDateFormatLocale, + version: mmrcmsVersion, + sourceCodeUrl: mmrcmsSourceCodeUrl, + ), // + Source( + name: "Zahard", + baseUrl: "https://zahard.xyz", + lang: "en", + typeSource: "mmrcms", + iconUrl: '', + dateFormat: defaultDateFormat, + dateFormatLocale: defaultDateFormatLocale, + version: mmrcmsVersion, + sourceCodeUrl: mmrcmsSourceCodeUrl, + ), + Source( + name: "Mangadoor", + baseUrl: "https://mangadoor.com", + lang: "es", + typeSource: "mmrcms", + iconUrl: '', + dateFormat: defaultDateFormat, + dateFormatLocale: defaultDateFormatLocale, + version: mmrcmsVersion, + sourceCodeUrl: mmrcmsSourceCodeUrl, + ), + Source( + name: "Utsukushii", + baseUrl: "https://manga.utsukushii-bg.com", + lang: "bg", + typeSource: "mmrcms", + iconUrl: '', + dateFormat: defaultDateFormat, + dateFormatLocale: defaultDateFormatLocale, + version: mmrcmsVersion, + sourceCodeUrl: mmrcmsSourceCodeUrl, + ), + Source( + name: "Phoenix-Scans", + baseUrl: "https://phoenix-scans.pl", + lang: "pl", + typeSource: "mmrcms", + iconUrl: '', + dateFormat: defaultDateFormat, + dateFormatLocale: defaultDateFormatLocale, + version: mmrcmsVersion, + sourceCodeUrl: mmrcmsSourceCodeUrl, + ), + Source( + name: "Lelscan-VF", + baseUrl: "https://www.lelscanvf.cc/", + lang: "fr", + typeSource: "mmrcms", + iconUrl: '', + dateFormat: defaultDateFormat, + dateFormatLocale: defaultDateFormatLocale, + version: mmrcmsVersion, + sourceCodeUrl: mmrcmsSourceCodeUrl, + ), + // Source( + // name: "AnimaRegia", + // baseUrl: "https://animaregia.net", + // lang: "pt-BR", + // typeSource: "mmrcms", + // iconUrl: '', + // dateFormat: defaultDateFormat, + // dateFormatLocale: defaultDateFormatLocale, + // version: mmrcmsVersion, + // sourceCodeUrl: mmrcmsSourceCodeUrl, + // ), + Source( + name: "Manga-FR", + baseUrl: "https://manga-fr.me", + lang: "fr", + typeSource: "mmrcms", + iconUrl: '', + dateFormat: defaultDateFormat, + dateFormatLocale: defaultDateFormatLocale, + version: mmrcmsVersion, + sourceCodeUrl: mmrcmsSourceCodeUrl, + ), +]; diff --git a/sources_generator.dart b/sources_generator.dart new file mode 100644 index 00000000..a2cfe6c3 --- /dev/null +++ b/sources_generator.dart @@ -0,0 +1,32 @@ +import 'dart:convert'; +import 'dart:developer'; +import 'dart:io'; + +import 'model/source.dart'; +import 'multisrc/heancms/sources.dart'; +import 'multisrc/madara/sources.dart'; +import 'multisrc/mangareader/sources.dart'; +import 'multisrc/mmrcms/sources.dart'; +import 'src/all/comick/sources.dart'; +import 'src/all/mangadex/sources.dart'; +import 'src/en/mangahere/source.dart'; + +void main() { + List _sourcesList = [ + ...madaraSourcesList, + ...comickSourcesList, + ...mangaDexSourcesList, + ...mangareaderSourcesList, + ...mmrcmsSourcesList, + ...heanCmsSourcesList, + mangahereSource + ]; + final List> jsonList = + _sourcesList.map((source) => source.toJson()).toList(); + final jsonString = jsonEncode(jsonList); + + final file = File('index.json'); + file.writeAsStringSync(jsonString); + + log('JSON file created: ${file.path}'); +} diff --git a/src/all/comick/comick-v0.0.1.dart b/src/all/comick/comick-v0.0.1.dart new file mode 100644 index 00000000..f4fab5b4 --- /dev/null +++ b/src/all/comick/comick-v0.0.1.dart @@ -0,0 +1,138 @@ +// import 'package:bridge_lib/bridge_lib.dart'; +// import 'dart:convert'; + +// getLatestUpdatesManga(MangaModel manga) async { +// final url = +// "${manga.apiUrl}/v1.0/search?sort=uploaded&page=${manga.page}&tachiyomi=true"; +// final data = {"url": url, "headers": getHeader(manga.baseUrl)}; +// final res = await MBridge.http(json.encode(data), 0); +// if (res.isEmpty) { +// return manga; +// } +// manga.names = MBridge.jsonPathToList(res, r'$.title'); +// List ids = MBridge.jsonPathToList(res, r'$.hid'); +// List mangaUrls = []; +// for (var id in ids) { +// mangaUrls.add("/comic/$id/#"); +// } +// manga.urls = mangaUrls; +// manga.images = MBridge.jsonPathToList(res, r'$.cover_url'); +// return manga; +// } + +// getMangaDetail(MangaModel manga) async { +// final statusList = [ +// { +// "1": 0, +// "2": 1, +// "3": 3, +// "4": 2, +// } +// ]; + +// final headers = getHeader(manga.baseUrl); + +// final urll = +// "${manga.apiUrl}${manga.link.replaceAll("#", '')}?tachiyomi=true"; +// final data = {"url": urll, "headers": headers}; +// final res = await MBridge.http(json.encode(data), 0); +// if (res.isEmpty) { +// return manga; +// } +// manga.author = MBridge.jsonPathToString(res, r'$.authors[*].name', ''); +// manga.genre = +// MBridge.jsonPathToString(res, r'$.genres[*].name', "_.").split("_."); +// manga.description = MBridge.jsonPathToString(res, r'$..desc', ''); +// manga.status = MBridge.parseStatus( +// MBridge.jsonPathToString(res, r'$..comic.status', ''), statusList); +// final chapUrlReq = +// "${manga.apiUrl}${manga.link.replaceAll("#", '')}chapters?lang=${manga.lang}&tachiyomi=true&page=1"; +// final dataReq = {"url": chapUrlReq, "headers": headers}; +// final request = await MBridge.http(json.encode(dataReq), 0); +// var total = MBridge.jsonPathToString(request, r'$.total', ''); +// final chapterLimit = MBridge.intParse("$total"); +// final newChapUrlReq = +// "${manga.apiUrl}${manga.link.replaceAll("#", '')}chapters?limit=$chapterLimit&lang=${manga.lang}&tachiyomi=true&page=1"; + +// final newDataReq = {"url": newChapUrlReq, "headers": headers}; +// final newRequest = await MBridge.http(json.encode(newDataReq), 0); + +// manga.urls = MBridge.jsonPathToString(newRequest, r'$.chapters[*].hid', "_.") +// .split("_."); +// final chapDate = +// MBridge.jsonPathToString(newRequest, r'$.chapters[*].created_at', "_.") +// .split("_."); +// manga.chaptersDateUploads = MBridge.listParse( +// MBridge.listParseDateTime(chapDate, "yyyy-MM-dd'T'HH:mm:ss'Z'", "en"), 0); +// manga.chaptersVolumes = +// MBridge.jsonPathToString(newRequest, r'$.chapters[*].vol', "_.") +// .split("_."); +// manga.chaptersScanlators = +// MBridge.jsonPathToString(newRequest, r'$.chapters[*].group_name', "_.") +// .split("_."); +// manga.names = +// MBridge.jsonPathToString(newRequest, r'$.chapters[*].title', "_.") +// .split("_."); +// manga.chaptersChaps = +// MBridge.jsonPathToString(newRequest, r'$.chapters[*].chap', "_.") +// .split("_."); + +// return manga; +// } + +// getPopularManga(MangaModel manga) async { +// final urll = +// "${manga.apiUrl}/v1.0/search?sort=follow&page=${manga.page}&tachiyomi=true"; +// final data = {"url": urll, "headers": getHeader(manga.baseUrl)}; +// final res = await MBridge.http(json.encode(data), 0); +// if (res.isEmpty) { +// return manga; +// } +// manga.names = MBridge.jsonPathToList(res, r'$.title'); +// List ids = MBridge.jsonPathToList(res, r'$.hid'); +// List mangaUrls = []; +// for (var id in ids) { +// mangaUrls.add("/comic/$id/#"); +// } +// manga.urls = mangaUrls; +// manga.images = MBridge.jsonPathToList(res, r'$.cover_url'); +// return manga; +// } + +// searchManga(MangaModel manga) async { +// final urll = "${manga.apiUrl}/v1.0/search?q=${manga.query}&tachiyomi=true"; +// final data = {"url": urll, "headers": getHeader(manga.baseUrl)}; +// final res = await MBridge.http(json.encode(data), 0); +// if (res.isEmpty) { +// return manga; +// } +// manga.names = MBridge.jsonPathToList(res, r'$.title'); +// List ids = MBridge.jsonPathToList(res, r'$.hid'); +// List mangaUrls = []; +// for (var id in ids) { +// mangaUrls.add("/comic/$id/#"); +// } +// manga.urls = mangaUrls; +// manga.images = MBridge.jsonPathToList(res, r'$.cover_url'); +// return manga; +// } + +// getChapterUrl(MangaModel manga) async { +// final url = "${manga.apiUrl}/chapter/${manga.link}?tachiyomi=true"; +// final data = {"url": url, "headers": getHeader(url)}; +// final res = await MBridge.http(json.encode(data), 0); +// if (res.isEmpty) { +// return []; +// } +// return MBridge.jsonPathToString(res, r'$.chapter.images[*].url', '_.') +// .split('_.'); +// } + +// Map getHeader(String url) { +// final headers = { +// "Referer": "$url/", +// 'User-Agent': +// "Tachiyomi Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:110.0) Gecko/20100101 Firefox/110.0" +// }; +// return headers; +// } diff --git a/src/all/comick/sources.dart b/src/all/comick/sources.dart new file mode 100644 index 00000000..6cd17569 --- /dev/null +++ b/src/all/comick/sources.dart @@ -0,0 +1,221 @@ +import '../../../model/source.dart'; + +const comickVersion = "0.0.1"; +const comickSourceCodeUrl = + "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/src/all/comick/comick-v$comickVersion.dart"; + +const defaultDateFormat = "yyyy-MM-dd'T'HH:mm:ss'Z'"; +const defaultDateFormatLocale = "en"; + +const iconUrl = + 'https://comick.app/_next/image?url=%2Fstatic%2Ficons%2Funicorn-64.png&w=144&q=75'; +const apiUrl = 'https://api.comick.fun'; +const baseUrl = 'https://comick.app'; +const isNsfw = true; +List get comickSourcesList => _comickSourcesList; +List _comickSourcesList = [ + Source( + name: 'Comick', + apiUrl: apiUrl, + baseUrl: baseUrl, + lang: 'en', + typeSource: "comick", + iconUrl: iconUrl, + dateFormat: defaultDateFormat, + isNsfw: isNsfw, + dateFormatLocale: defaultDateFormatLocale, + version: comickVersion, + sourceCodeUrl: comickSourceCodeUrl), + Source( + name: 'Comick', + apiUrl: apiUrl, + baseUrl: baseUrl, + lang: 'ar', + typeSource: "comick", + iconUrl: iconUrl, + dateFormat: defaultDateFormat, + isNsfw: isNsfw, + dateFormatLocale: defaultDateFormatLocale, + version: comickVersion, + sourceCodeUrl: comickSourceCodeUrl), + Source( + name: 'Comick', + apiUrl: apiUrl, + baseUrl: baseUrl, + lang: 'pt', + typeSource: "comick", + iconUrl: iconUrl, + dateFormat: defaultDateFormat, + isNsfw: isNsfw, + dateFormatLocale: defaultDateFormatLocale, + version: comickVersion, + sourceCodeUrl: comickSourceCodeUrl), + Source( + name: 'Comick', + apiUrl: apiUrl, + baseUrl: baseUrl, + lang: 'pt-br', + typeSource: "comick", + iconUrl: iconUrl, + dateFormat: defaultDateFormat, + isNsfw: isNsfw, + dateFormatLocale: defaultDateFormatLocale, + version: comickVersion, + sourceCodeUrl: comickSourceCodeUrl), + Source( + name: 'Comick', + apiUrl: apiUrl, + baseUrl: baseUrl, + lang: 'it', + typeSource: "comick", + iconUrl: iconUrl, + dateFormat: defaultDateFormat, + isNsfw: isNsfw, + dateFormatLocale: defaultDateFormatLocale, + version: comickVersion, + sourceCodeUrl: comickSourceCodeUrl), + Source( + name: 'Comick', + apiUrl: apiUrl, + baseUrl: baseUrl, + lang: 'ru', + typeSource: "comick", + iconUrl: iconUrl, + dateFormat: defaultDateFormat, + isNsfw: isNsfw, + dateFormatLocale: defaultDateFormatLocale, + version: comickVersion, + sourceCodeUrl: comickSourceCodeUrl), + Source( + name: 'Comick', + apiUrl: apiUrl, + baseUrl: baseUrl, + lang: 'es', + typeSource: "comick", + iconUrl: iconUrl, + dateFormat: defaultDateFormat, + isNsfw: isNsfw, + dateFormatLocale: defaultDateFormatLocale, + version: comickVersion, + sourceCodeUrl: comickSourceCodeUrl), + Source( + name: 'Comick', + apiUrl: apiUrl, + baseUrl: baseUrl, + lang: 'es-419', + typeSource: "comick", + iconUrl: iconUrl, + dateFormat: defaultDateFormat, + isNsfw: isNsfw, + dateFormatLocale: defaultDateFormatLocale, + version: comickVersion, + sourceCodeUrl: comickSourceCodeUrl), + Source( + name: 'Comick', + apiUrl: apiUrl, + baseUrl: baseUrl, + lang: 'id', + typeSource: "comick", + iconUrl: iconUrl, + dateFormat: defaultDateFormat, + isNsfw: isNsfw, + dateFormatLocale: defaultDateFormatLocale, + version: comickVersion, + sourceCodeUrl: comickSourceCodeUrl), + Source( + name: 'Comick', + apiUrl: apiUrl, + baseUrl: baseUrl, + lang: 'hi', + typeSource: "comick", + iconUrl: iconUrl, + dateFormat: defaultDateFormat, + isNsfw: isNsfw, + dateFormatLocale: defaultDateFormatLocale, + version: comickVersion, + sourceCodeUrl: comickSourceCodeUrl), + Source( + name: 'Comick', + apiUrl: apiUrl, + baseUrl: baseUrl, + lang: 'de', + typeSource: "comick", + iconUrl: iconUrl, + dateFormat: defaultDateFormat, + isNsfw: isNsfw, + dateFormatLocale: defaultDateFormatLocale, + version: comickVersion, + sourceCodeUrl: comickSourceCodeUrl), + Source( + name: 'Comick', + apiUrl: apiUrl, + baseUrl: baseUrl, + lang: 'ja', + typeSource: "comick", + iconUrl: iconUrl, + dateFormat: defaultDateFormat, + isNsfw: isNsfw, + dateFormatLocale: defaultDateFormatLocale, + version: comickVersion, + sourceCodeUrl: comickSourceCodeUrl), + Source( + name: 'Comick', + apiUrl: apiUrl, + baseUrl: baseUrl, + lang: 'tr', + typeSource: "comick", + iconUrl: iconUrl, + dateFormat: defaultDateFormat, + isNsfw: isNsfw, + dateFormatLocale: defaultDateFormatLocale, + version: comickVersion, + sourceCodeUrl: comickSourceCodeUrl), + Source( + name: 'Comick', + apiUrl: apiUrl, + baseUrl: baseUrl, + lang: 'pl', + typeSource: "comick", + iconUrl: iconUrl, + dateFormat: defaultDateFormat, + isNsfw: isNsfw, + dateFormatLocale: defaultDateFormatLocale, + version: comickVersion, + sourceCodeUrl: comickSourceCodeUrl), + Source( + name: 'Comick', + apiUrl: apiUrl, + baseUrl: baseUrl, + lang: 'zh', + typeSource: "comick", + iconUrl: iconUrl, + dateFormat: defaultDateFormat, + isNsfw: isNsfw, + dateFormatLocale: defaultDateFormatLocale, + version: comickVersion, + sourceCodeUrl: comickSourceCodeUrl), + Source( + name: 'Comick', + apiUrl: apiUrl, + baseUrl: baseUrl, + lang: 'zh-hk', + typeSource: "comick", + iconUrl: iconUrl, + dateFormat: defaultDateFormat, + isNsfw: isNsfw, + dateFormatLocale: defaultDateFormatLocale, + version: comickVersion, + sourceCodeUrl: comickSourceCodeUrl), + Source( + name: 'Comick', + apiUrl: apiUrl, + baseUrl: baseUrl, + lang: 'fr', + typeSource: "comick", + iconUrl: iconUrl, + dateFormat: defaultDateFormat, + isNsfw: isNsfw, + dateFormatLocale: defaultDateFormatLocale, + version: comickVersion, + sourceCodeUrl: comickSourceCodeUrl), +]; diff --git a/src/all/mangadex/mangadex-v0.0.1.dart b/src/all/mangadex/mangadex-v0.0.1.dart new file mode 100644 index 00000000..0a5bc22b --- /dev/null +++ b/src/all/mangadex/mangadex-v0.0.1.dart @@ -0,0 +1,385 @@ +// import 'package:bridge_lib/bridge_lib.dart'; +// import 'dart:convert'; + +// String getMDXContentRating() { +// String ctnRating = MBridge.stringParse( +// "&contentRating[]=suggestive&contentRating[]=safe&contentRating[]=erotica&contentRating[]=pornographic"); +// return ctnRating; +// } + +// getPopularManga(MangaModel manga) async { +// int page = (20 * (manga.page - 1)); +// final url = +// "https://api.mangadex.org/manga?limit=20&offset=$page&availableTranslatedLanguage[]=en&includes[]=cover_art${getMDXContentRating()}&order[followedCount]=desc"; +// final datas = {"url": url, "headers": null}; +// final res = await MBridge.http(json.encode(datas), 0); +// if (res.isEmpty) { +// return manga; +// } +// List data = MBridge.listParse( +// MBridge.jsonPathToString(res, r'$.data[*]', '_.').split("_."), 0); +// List urlList = []; +// List titleList = []; +// List imageList = []; +// for (var i = 0; i < data.length; i++) { +// final expressionId = +// MBridge.regExp(r'$.data[a].id', r'\[a\]', "[$i]", 0, 1); +// final id = MBridge.jsonPathToString(res, expressionId, '_.'); +// titleList.add(findTitle(res, i, manga.lang)); +// urlList.add("/manga/$id"); +// imageList.add(getCover(res, i, id)); +// } +// manga.names = titleList; +// manga.urls = urlList; +// manga.images = imageList; +// return manga; +// } + +// MangaModel getChapters( +// MangaModel manga, int length, String paginatedChapterListA) { +// String scanlators = MBridge.stringParse(""); +// String chapNames = MBridge.stringParse(""); +// String chapDate = MBridge.stringParse(""); +// String chapterUrl = MBridge.stringParse(""); +// String paginatedChapterList = MBridge.stringParse(paginatedChapterListA); +// final dataList = MBridge.jsonPathToList(paginatedChapterList, r'$.data[*]'); +// for (var res in dataList) { +// String scan = MBridge.stringParse(""); +// final groups = MBridge.jsonPathToList( +// res, r'$.relationships[?@.id!="00e03853-1b96-4f41-9542-c71b8692033b"]'); +// String chapName = MBridge.stringParse(""); +// for (var element in groups) { +// final data = MBridge.getMapValue(element, "attributes", 1); +// if (data.isEmpty) { +// } else { +// final name = MBridge.getMapValue(data, "name", 0); +// scan += MBridge.stringParse("$name"); +// final username = MBridge.getMapValue(data, "username", 0); +// if (username.isEmpty) { +// } else { +// if (scan.isEmpty) { +// scan += MBridge.stringParse("Uploaded by $username"); +// } +// } +// } +// } +// if (scan.isEmpty) { +// scan = MBridge.stringParse("No Group"); +// } +// final dataRes = MBridge.getMapValue(res, "attributes", 1); +// if (dataRes.isEmpty) { +// } else { +// final data = MBridge.getMapValue(res, "attributes", 1); +// final volume = MBridge.getMapValue(data, "volume", 0); +// if (volume.isEmpty) { +// } else { +// if (volume == "null") { +// } else { +// chapName = MBridge.stringParse("Vol.$volume "); +// } +// } +// final chapter = MBridge.getMapValue(data, "chapter", 0); +// if (chapter.isEmpty) { +// } else { +// if (chapter == "null") { +// } else { +// chapName += MBridge.stringParse("Ch.$chapter "); +// } +// } +// final title = MBridge.getMapValue(data, "title", 0); +// if (title.isEmpty) { +// } else { +// if (title == "null") { +// } else { +// if (chapName.isEmpty) { +// } else { +// chapName += MBridge.stringParse("- "); +// } +// chapName += MBridge.stringParse("$title"); +// } +// } +// if (chapName.isEmpty) { +// chapName += MBridge.stringParse("Oneshot"); +// } +// final date = MBridge.getMapValue(data, "publishAt", 0); +// final id = MBridge.getMapValue(res, "id", 0); +// chapterUrl += "._$id"; +// chapDate += "._._$date"; +// scanlators += "._$scan"; +// chapNames += "._$chapName"; +// } +// } +// manga.chaptersDateUploads = MBridge.listParseDateTime( +// chapDate.split("._._"), "yyyy-MM-dd'T'HH:mm:ss+SSS", "en_US"); + +// manga.urls = chapterUrl.split("._"); +// manga.chaptersScanlators = scanlators.split("._"); +// manga.names = chapNames.split("._"); +// return manga; +// } + +// getMangaDetail(MangaModel manga) async { +// final statusList = [ +// { +// "ongoing": 0, +// "completed": 1, +// "hiatus": 2, +// "cancelled": 3, +// } +// ]; +// final url = +// "https://api.mangadex.org${manga.link}?includes[]=cover_art&includes[]=author&includes[]=artist"; +// final datas = {"url": url, "headers": null}; +// final res = await MBridge.http(json.encode(datas), 0); +// if (res.isEmpty) { +// return manga; +// } + +// manga.author = MBridge.jsonPathToString( +// res, r'$..data.relationships[*].attributes.name', ', '); + +// String expressionDescriptionA = r'$..data.attributes.description.en'; +// String expressionDescription = MBridge.regExp( +// r'$..data.attributes.description[a]', r'\[a\]', ".${manga.lang}", 0, 1); + +// String description = MBridge.jsonPathToString(res, expressionDescription, ''); +// if (description.isEmpty) { +// description = MBridge.jsonPathToString(res, expressionDescriptionA, ''); +// } +// manga.description = description; +// List genres = []; + +// final genre = MBridge.listParse( +// MBridge.jsonPathToString( +// res, r'$..data.attributes.tags[*].attributes.name.en', '.-') +// .split('.-'), +// 0); +// genres = genre; +// String contentRating = +// MBridge.jsonPathToString(res, r'$..data.attributes.contentRating', ''); +// if (contentRating == "safe") { +// } else { +// genres.add(contentRating); +// } +// String publicationDemographic = MBridge.jsonPathToString( +// res, r'$..data.attributes.publicationDemographic', ''); +// if (publicationDemographic == "null") { +// } else { +// genres.add(publicationDemographic); +// } +// manga.genre = genres; +// String statusRes = +// MBridge.jsonPathToString(res, r'$..data.attributes.status', ''); +// manga.status = MBridge.parseStatus(statusRes, statusList); +// final mangaId = MBridge.listParse(manga.link.split('/'), 2)[0]; +// final paginatedChapterList = +// await paginatedChapterListRequest(mangaId, 0, manga.lang); +// final chapterList = +// MBridge.jsonPathToString(paginatedChapterList, r'$.data[*]', '_.') +// .split('_.'); +// int limit = MBridge.intParse( +// MBridge.jsonPathToString(paginatedChapterList, r'$.limit', '')); +// int offset = MBridge.intParse( +// MBridge.jsonPathToString(paginatedChapterList, r'$.offset', '')); +// int total = MBridge.intParse( +// MBridge.jsonPathToString(paginatedChapterList, r'$.total', '')); +// List chapterListA = []; +// List chapNames = []; +// List scanlators = []; +// List chapterUrl = []; +// List chapterDate = []; +// final list = getChapters( +// manga, MBridge.intParse("${chapterList.length}"), paginatedChapterList); +// chapterListA.add(list); +// var hasMoreResults = (limit + offset) < total; +// while (hasMoreResults) { +// offset += limit; +// var newRequest = +// await paginatedChapterListRequest(mangaId, offset, manga.lang); +// int total = +// MBridge.intParse(MBridge.jsonPathToString(newRequest, r'$.total', '')); +// final chapterList = +// MBridge.jsonPathToString(paginatedChapterList, r'$.data[*]', '_.') +// .split('_.'); +// final list = getChapters( +// manga, MBridge.intParse("${chapterList.length}"), newRequest); +// chapterListA.add(list); +// hasMoreResults = (limit + offset) < total; +// } +// for (var element in chapterListA) { +// int index = 0; +// for (var name in element.names) { +// if (name.isEmpty) { +// } else { +// chapNames.add(name); +// chapterUrl.add(element.urls[index]); +// chapterDate.add(element.chaptersDateUploads[index]); +// scanlators.add(element.chaptersScanlators[index]); +// } +// index++; +// } +// } +// manga.urls = chapterUrl; +// manga.chaptersDateUploads = chapterDate; +// manga.chaptersScanlators = scanlators; +// manga.names = chapNames; +// return manga; +// } + +// getLatestUpdatesManga(MangaModel manga) async { +// int page = (20 * (manga.page - 1)); +// final urll = +// "https://api.mangadex.org/chapter?limit=20&offset=$page&translatedLanguage[]=${manga.lang}&includeFutureUpdates=0&order[publishAt]=desc&includeFuturePublishAt=0&includeEmptyPages=0"; +// final datas = {"url": urll, "headers": null}; +// final ress = await MBridge.http(json.encode(datas), 0); +// if (ress.isEmpty) { +// return manga; +// } +// final mangaIds = MBridge.listParse( +// MBridge.jsonPathToString(ress, r'$.data[*].relationships[*].id', '.--') +// .split('.--'), +// 3); +// String mangaa = MBridge.stringParse(""); +// for (var id in mangaIds) { +// mangaa += "&ids[]=$id"; +// } +// final newUrl = +// "https://api.mangadex.org/manga?includes[]=cover_art&limit=${mangaIds.length}${getMDXContentRating()}$mangaa"; +// final datass = {"url": newUrl, "headers": null}; +// final res = await MBridge.http(json.encode(datass), 0); +// List data = MBridge.listParse( +// MBridge.jsonPathToString(res, r'$.data[*]', '_.').split("_."), 0); +// List urlList = []; +// List titleList = []; +// List imageList = []; +// for (var i = 0; i < data.length; i++) { +// final expressionId = +// MBridge.regExp(r'$.data[a].id', r'\[a\]', "[$i]", 0, 1); +// final id = MBridge.jsonPathToString(res, expressionId, '_.'); +// titleList.add(findTitle(res, i, manga.lang)); +// urlList.add("/manga/$id"); +// imageList.add(getCover(res, i, id)); +// } +// manga.names = titleList; +// manga.urls = urlList; +// manga.images = imageList; +// return manga; +// } + +// searchManga(MangaModel manga) async { +// final url = +// "https://api.mangadex.org/manga?includes[]=cover_art&offset=0&limit=20&title=${manga.query}${getMDXContentRating()}&order[followedCount]=desc&availableTranslatedLanguage[]=${manga.lang}"; +// final datas = {"url": url, "headers": null}; +// final res = await MBridge.http(json.encode(datas), 0); +// if (res.isEmpty) { +// return manga; +// } +// List data = MBridge.listParse( +// MBridge.jsonPathToString(res, r'$.data[*]', '_.').split("_."), 0); +// List urlList = []; +// List titleList = []; +// List imageList = []; +// for (var i = 0; i < data.length; i++) { +// final expressionId = +// MBridge.regExp(r'$.data[a].id', r'\[a\]', "[$i]", 0, 1); +// final id = MBridge.jsonPathToString(res, expressionId, '_.'); +// titleList.add(findTitle(res, i, manga.lang)); +// urlList.add("/manga/$id"); +// imageList.add(getCover(res, i, id)); +// } +// manga.names = titleList; +// manga.urls = urlList; +// manga.images = imageList; +// return manga; +// } + +// getChapterUrl(MangaModel manga) async { +// final url = "https://api.mangadex.org/at-home/server/${manga.link}"; +// final data = {"url": url, "headers": null}; +// final res = await MBridge.http(json.encode(data), 0); +// if (res.isEmpty) { +// return []; +// } +// final host = MBridge.jsonPathToString(res, r'$.baseUrl', ''); +// final hash = MBridge.jsonPathToString(res, r'$.chapter.hash', ''); +// List pageSuffix = []; +// List pageUrls = []; +// List chapterDatas = MBridge.listParse( +// MBridge.jsonPathToString(res, r'$.chapter.data[*]', '.--').split('.--'), +// 0); +// for (var d in chapterDatas) { +// pageSuffix.add("/data/$hash/$d"); +// } +// for (var url in pageSuffix) { +// pageUrls.add("$host$url"); +// } + +// return pageUrls; +// } + +// Future paginatedChapterListRequest( +// String mangaId, int offset, String lang) async { +// final url = +// 'https://api.mangadex.org/manga/$mangaId/feed?limit=500&offset=$offset&includes[]=user&includes[]=scanlation_group&order[volume]=desc&order[chapter]=desc&translatedLanguage[]=$lang&includeFuturePublishAt=0&includeEmptyPages=0${getMDXContentRating()}'; +// final datas = {"url": url, "headers": null}; +// return await MBridge.http(json.encode(datas), 0); +// } + +// String findTitle(String dataRes, int mangaIndex, String lang) { +// String expressionAltTitlesA = MBridge.regExp( +// r'$.data[a].attributes.altTitles[b]', r'\[a\]', "[$mangaIndex]", 0, 1); +// String expressionAltTitles = +// MBridge.regExp(expressionAltTitlesA, r'\[b\]', "[*].$lang", 0, 1); + +// String altTitles = +// MBridge.jsonPathToString(dataRes, expressionAltTitles, '_.'); + +// if (altTitles.isEmpty) { +// expressionAltTitles = MBridge.regExp( +// r'$.data[a].attributes.altTitles[?@.en].en', +// r'\[a\]', +// "[$mangaIndex]", +// 0, +// 1); +// altTitles = MBridge.jsonPathToString(dataRes, expressionAltTitles, '_.'); +// } +// List dataAltTitles = MBridge.listParse(altTitles.split('_.'), 0); +// final expressionTitle = MBridge.regExp( +// r'$.data[a].attributes.title.en', r'\[a\]', "[$mangaIndex]", 0, 1); +// final title = MBridge.jsonPathToString(dataRes, expressionTitle, '_.'); +// if (title.isEmpty) { +// return dataAltTitles[0]; +// } else { +// return title; +// } +// } + +// String getCover(String dataRes, int mangaIndex, String mangaId) { +// final expressionRelationAll = MBridge.regExp( +// r'$.data[a].relationships[*]', r'\[a\]', "[$mangaIndex]", 0, 1); +// List relationDatas = MBridge.listParse( +// MBridge.jsonPathToString(dataRes, expressionRelationAll, '_.') +// .split("_."), +// 0); +// String coverFileName = MBridge.stringParse(""); +// for (var j = 0; j < relationDatas.length; j++) { +// final expressionData = MBridge.regExp( +// r'$.data[a].relationships[b]', r'\[a\]', "[$mangaIndex]", 0, 1); +// final expressionRelationType = +// MBridge.regExp(expressionData, r'\[b\]', "[$j].type", 0, 1); +// final relationType = +// MBridge.jsonPathToString(dataRes, expressionRelationType, ''); +// if (relationType == "cover_art") { +// if (coverFileName.isEmpty) { +// final expressionRelationCoverFile = MBridge.regExp( +// expressionData, r'\[b\]', "[$j].attributes.fileName", 0, 1); +// coverFileName = +// MBridge.jsonPathToString(dataRes, expressionRelationCoverFile, ''); + +// coverFileName = +// "https://uploads.mangadex.org/covers/$mangaId/$coverFileName"; +// } +// } +// } +// return coverFileName; +// } diff --git a/src/all/mangadex/sources.dart b/src/all/mangadex/sources.dart new file mode 100644 index 00000000..cc3c3287 --- /dev/null +++ b/src/all/mangadex/sources.dart @@ -0,0 +1,216 @@ +import '../../../model/source.dart'; + +const apiUrl = 'https://api.mangadex.org'; +const baseUrl = 'https://mangadex.org'; +const isNsfw = true; +const mangadexVersion = "0.0.1"; +const mangadexSourceCodeUrl = + "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/src/all/mangadex/mangadex-v$mangadexVersion.dart"; +const iconUrl = ''; +List get mangaDexSourcesList => _mangaDexSourcesList; +List _mangaDexSourcesList = [ + Source( + name: 'MangaDex', + apiUrl: apiUrl, + baseUrl: baseUrl, + lang: 'en', + typeSource: "mangadex", + iconUrl: iconUrl, + dateFormat: "yyyy-MM-dd'T'HH:mm:ss+SSS", + isNsfw: isNsfw, + dateFormatLocale: 'en_Us', + version: mangadexVersion, + sourceCodeUrl: mangadexSourceCodeUrl), + Source( + name: 'MangaDex', + apiUrl: apiUrl, + baseUrl: baseUrl, + lang: 'ar', + typeSource: "mangadex", + iconUrl: iconUrl, + dateFormat: "yyyy-MM-dd'T'HH:mm:ss+SSS", + isNsfw: isNsfw, + dateFormatLocale: 'en_Us', + version: mangadexVersion, + sourceCodeUrl: mangadexSourceCodeUrl), + Source( + name: 'MangaDex', + apiUrl: apiUrl, + baseUrl: baseUrl, + lang: 'pt', + typeSource: "mangadex", + iconUrl: iconUrl, + dateFormat: "yyyy-MM-dd'T'HH:mm:ss+SSS", + isNsfw: isNsfw, + dateFormatLocale: 'en_Us', + version: mangadexVersion, + sourceCodeUrl: mangadexSourceCodeUrl), + Source( + name: 'MangaDex', + apiUrl: apiUrl, + baseUrl: baseUrl, + lang: 'pt-br', + typeSource: "mangadex", + iconUrl: iconUrl, + dateFormat: "yyyy-MM-dd'T'HH:mm:ss+SSS", + isNsfw: isNsfw, + dateFormatLocale: 'en_Us', + version: mangadexVersion, + sourceCodeUrl: mangadexSourceCodeUrl), + Source( + name: 'MangaDex', + apiUrl: apiUrl, + baseUrl: baseUrl, + lang: 'it', + typeSource: "mangadex", + iconUrl: iconUrl, + dateFormat: "yyyy-MM-dd'T'HH:mm:ss+SSS", + isNsfw: isNsfw, + dateFormatLocale: 'en_Us', + version: mangadexVersion, + sourceCodeUrl: mangadexSourceCodeUrl), + Source( + name: 'MangaDex', + apiUrl: apiUrl, + baseUrl: baseUrl, + lang: 'ru', + typeSource: "mangadex", + iconUrl: iconUrl, + dateFormat: "yyyy-MM-dd'T'HH:mm:ss+SSS", + isNsfw: isNsfw, + dateFormatLocale: 'en_Us', + version: mangadexVersion, + sourceCodeUrl: mangadexSourceCodeUrl), + Source( + name: 'MangaDex', + apiUrl: apiUrl, + baseUrl: baseUrl, + lang: 'es', + typeSource: "mangadex", + iconUrl: iconUrl, + dateFormat: "yyyy-MM-dd'T'HH:mm:ss+SSS", + isNsfw: isNsfw, + dateFormatLocale: 'en_Us', + version: mangadexVersion, + sourceCodeUrl: mangadexSourceCodeUrl), + Source( + name: 'MangaDex', + apiUrl: apiUrl, + baseUrl: baseUrl, + lang: 'es-419', + typeSource: "mangadex", + iconUrl: iconUrl, + dateFormat: "yyyy-MM-dd'T'HH:mm:ss+SSS", + isNsfw: isNsfw, + dateFormatLocale: 'en_Us', + version: mangadexVersion, + sourceCodeUrl: mangadexSourceCodeUrl), + Source( + name: 'MangaDex', + apiUrl: apiUrl, + baseUrl: baseUrl, + lang: 'id', + typeSource: "mangadex", + iconUrl: iconUrl, + dateFormat: "yyyy-MM-dd'T'HH:mm:ss+SSS", + isNsfw: isNsfw, + dateFormatLocale: 'en_Us', + version: mangadexVersion, + sourceCodeUrl: mangadexSourceCodeUrl), + Source( + name: 'MangaDex', + apiUrl: apiUrl, + baseUrl: baseUrl, + lang: 'hi', + typeSource: "mangadex", + iconUrl: iconUrl, + dateFormat: "yyyy-MM-dd'T'HH:mm:ss+SSS", + isNsfw: isNsfw, + dateFormatLocale: 'en_Us', + version: mangadexVersion, + sourceCodeUrl: mangadexSourceCodeUrl), + Source( + name: 'MangaDex', + apiUrl: apiUrl, + baseUrl: baseUrl, + lang: 'de', + typeSource: "mangadex", + iconUrl: iconUrl, + dateFormat: "yyyy-MM-dd'T'HH:mm:ss+SSS", + isNsfw: isNsfw, + dateFormatLocale: 'en_Us', + version: mangadexVersion, + sourceCodeUrl: mangadexSourceCodeUrl), + Source( + name: 'MangaDex', + apiUrl: apiUrl, + baseUrl: baseUrl, + lang: 'ja', + typeSource: "mangadex", + iconUrl: iconUrl, + dateFormat: "yyyy-MM-dd'T'HH:mm:ss+SSS", + isNsfw: isNsfw, + dateFormatLocale: 'en_Us', + version: mangadexVersion, + sourceCodeUrl: mangadexSourceCodeUrl), + Source( + name: 'MangaDex', + apiUrl: apiUrl, + baseUrl: baseUrl, + lang: 'tr', + typeSource: "mangadex", + iconUrl: iconUrl, + dateFormat: "yyyy-MM-dd'T'HH:mm:ss+SSS", + isNsfw: isNsfw, + dateFormatLocale: 'en_Us', + version: mangadexVersion, + sourceCodeUrl: mangadexSourceCodeUrl), + Source( + name: 'MangaDex', + apiUrl: apiUrl, + baseUrl: baseUrl, + lang: 'pl', + typeSource: "mangadex", + iconUrl: iconUrl, + dateFormat: "yyyy-MM-dd'T'HH:mm:ss+SSS", + isNsfw: isNsfw, + dateFormatLocale: 'en_Us', + version: mangadexVersion, + sourceCodeUrl: mangadexSourceCodeUrl), + Source( + name: 'MangaDex', + apiUrl: apiUrl, + baseUrl: baseUrl, + lang: 'zh', + typeSource: "mangadex", + iconUrl: iconUrl, + dateFormat: "yyyy-MM-dd'T'HH:mm:ss+SSS", + isNsfw: isNsfw, + dateFormatLocale: 'en_Us', + version: mangadexVersion, + sourceCodeUrl: mangadexSourceCodeUrl), + Source( + name: 'MangaDex', + apiUrl: apiUrl, + baseUrl: baseUrl, + lang: 'zh-hk', + typeSource: "mangadex", + iconUrl: iconUrl, + dateFormat: "yyyy-MM-dd'T'HH:mm:ss+SSS", + isNsfw: isNsfw, + dateFormatLocale: 'en_Us', + version: mangadexVersion, + sourceCodeUrl: mangadexSourceCodeUrl), + Source( + name: 'MangaDex', + apiUrl: apiUrl, + baseUrl: baseUrl, + lang: 'fr', + typeSource: "mangadex", + iconUrl: iconUrl, + dateFormat: "yyyy-MM-dd'T'HH:mm:ss+SSS", + isNsfw: isNsfw, + dateFormatLocale: 'en_Us', + version: mangadexVersion, + sourceCodeUrl: mangadexSourceCodeUrl), +]; diff --git a/src/en/mangahere/mangahere-v0.0.1.dart b/src/en/mangahere/mangahere-v0.0.1.dart new file mode 100644 index 00000000..dcd06d62 --- /dev/null +++ b/src/en/mangahere/mangahere-v0.0.1.dart @@ -0,0 +1,210 @@ +// import 'dart:convert'; +// import 'package:bridge_lib/bridge_lib.dart'; + +// searchManga(MangaModel manga) async { +// final headers = getHeader(manga.baseUrl); +// final url = "${manga.baseUrl}/search?title=${manga.query}&page=${manga.page}"; + +// final data = {"url": url, "headers": headers}; +// final res = await MBridge.http(json.encode(data), 1); +// if (res.isEmpty) { +// return manga; +// } + +// manga.names = MBridge.xpath( +// res, '//*[contains(@class, "manga-list-4-list")]/li/a/@title', '-.') +// .split('-.'); +// manga.images = MBridge.xpath( +// res, +// '//*[contains(@class, "manga-list-4-list")]/li/a/img[@class="manga-list-4-cover"]/@src', +// '-.') +// .split('-.'); +// manga.urls = MBridge.xpath( +// res, '//*[contains(@class, "manga-list-4-list")]/li/a/@href', '-.') +// .split('-.'); +// return manga; +// } + +// getLatestUpdatesManga(MangaModel manga) async { +// final headers = getHeader(manga.baseUrl); +// final url = "${manga.baseUrl}/directory/${manga.page}.htm?latest"; + +// final data = {"url": url, "headers": headers}; +// final res = await MBridge.http(json.encode(data), 1); +// if (res.isEmpty) { +// return manga; +// } + +// manga.names = MBridge.xpath( +// res, '//*[ contains(@class, "manga-list-1-list")]/li/a/@title', '-.') +// .split('-.'); +// manga.images = MBridge.xpath( +// res, +// '//*[ contains(@class, "manga-list-1-list")]/li/a/img[@class="manga-list-1-cover"]/@src', +// '-.') +// .split('-.'); +// manga.urls = MBridge.xpath( +// res, '//*[ contains(@class, "manga-list-1-list")]/li/a/@href', '-.') +// .split('-.'); +// return manga; +// } + +// getMangaDetail(MangaModel manga) async { +// final statusList = [ +// { +// "Ongoing": 0, +// "Completed": 1, +// } +// ]; +// final headers = getHeader(manga.baseUrl); +// final url = "${manga.baseUrl}/${manga.link}"; +// final data = {"url": url, "headers": headers}; +// final res = await MBridge.http(json.encode(data), 0); +// if (res.isEmpty) { +// return manga; +// } +// manga.author = +// MBridge.xpath(res, '//*[@class="detail-info-right-say"]/a/text()', ''); +// manga.description = +// MBridge.xpath(res, '//*[@class="fullcontent"]/text()', ''); +// final status = MBridge.xpath( +// res, '//*[@class="detail-info-right-title-tip"]/text()', ''); +// manga.status = MBridge.parseStatus(status, statusList); +// manga.genre = MBridge.xpath( +// res, '//*[@class="detail-info-right-tag-list"]/a/text()', '._') +// .split("._"); +// manga.urls = +// MBridge.xpath(res, '//*[@class="detail-main-list"]/li/a/@href', '._') +// .split("._"); +// manga.names = MBridge.xpath( +// res, +// '//*[@class="detail-main-list"]/li/a/div/p[@class="title3"]/text()', +// '._') +// .split("._"); +// final chapterDates = MBridge.xpath( +// res, +// '//*[@class="detail-main-list"]/li/a/div/p[@class="title2"]/text()', +// '._') +// .split("._"); + +// manga.chaptersDateUploads = MBridge.listParse( +// MBridge.listParseDateTime( +// chapterDates, manga.dateFormat, manga.dateFormatLocale), +// 0); +// return manga; +// } + +// getPopularManga(MangaModel manga) async { +// final headers = getHeader(manga.baseUrl); +// final url = "${manga.baseUrl}/directory/${manga.page}.htm"; + +// final data = {"url": url, "headers": headers}; +// final res = await MBridge.http(json.encode(data), 1); +// if (res.isEmpty) { +// return manga; +// } + +// manga.names = MBridge.xpath( +// res, '//*[ contains(@class, "manga-list-1-list")]/li/a/@title', '-.') +// .split('-.'); +// manga.images = MBridge.xpath( +// res, +// '//*[ contains(@class, "manga-list-1-list")]/li/a/img[@class="manga-list-1-cover"]/@src', +// '-.') +// .split('-.'); +// manga.urls = MBridge.xpath( +// res, '//*[ contains(@class, "manga-list-1-list")]/li/a/@href', '-.') +// .split('-.'); +// return manga; +// } + +// getChapterUrl(MangaModel manga) async { +// final headers = getHeader(manga.baseUrl); +// final url = "${manga.baseUrl}${manga.link}"; +// final data = {"url": url, "headers": headers}; +// final res = await MBridge.http(json.encode(data), 0); +// if (res.isEmpty) { +// return []; +// } +// final pages = MBridge.xpath(res, "//body/div/div/span/a/text()", "._"); +// List pageUrls = []; +// if (pages.isEmpty) { +// final script = MBridge.xpath(res, +// "//script[contains(text(),'function(p,a,c,k,e,d)')]/text()", "") +// .replaceAll("eval", ""); +// String deobfuscatedScript = MBridge.evalJs(script); +// int a = deobfuscatedScript.indexOf("newImgs=['") + 10; +// int b = deobfuscatedScript.indexOf("'];"); +// List urls = +// MBridge.listParse(deobfuscatedScript.substring(a, b).split("','"), 0); +// for (var url in urls) { +// pageUrls.add("https:$url"); +// } +// } else { +// final pagesNumberList = MBridge.listParse(pages.split("._"), 0); +// //manga.status objext is used to parse pagesNumber value to int +// manga.status = +// MBridge.intParse(pagesNumberList[pagesNumberList.length - 2]); +// int secretKeyScriptLocation = res.indexOf("eval(function(p,a,c,k,e,d)"); +// int secretKeyScriptEndLocation = +// res.indexOf("", secretKeyScriptLocation); +// String secretKeyScript = res +// .substring(secretKeyScriptLocation, secretKeyScriptEndLocation) +// .replaceAll("eval", ""); +// String secretKeyDeobfuscatedScript = MBridge.evalJs(secretKeyScript); +// int secretKeyStartLoc = secretKeyDeobfuscatedScript.indexOf("'"); +// int secretKeyEndLoc = secretKeyDeobfuscatedScript.indexOf(";"); + +// String secretKey = secretKeyDeobfuscatedScript.substring( +// secretKeyStartLoc, secretKeyEndLoc); +// int chapterIdStartLoc = res.indexOf("chapterid"); +// String chapterId = res.substring( +// chapterIdStartLoc + 11, res.indexOf(";", chapterIdStartLoc)); +// String pageBase = url.substring(0, url.lastIndexOf("/")); +// for (int i = 1; i <= manga.status; i++) { +// String pageLink = +// "$pageBase/chapterfun.ashx?cid=$chapterId&page=$i&key=$secretKey"; +// String responseText = MBridge.stringParse(""); +// for (int tr = 1; tr <= 3; tr++) { +// if (responseText.isEmpty) { +// final headers = { +// "Referer": url, +// "Accept": "*/*", +// "Accept-Language": "en-US,en;q=0.9", +// "Connection": "keep-alive", +// "Host": "www.mangahere.cc", +// "X-Requested-With": "XMLHttpRequest" +// }; +// final data = {"url": pageLink, "headers": headers}; +// final response = await MBridge.http(json.encode(data), 0); +// responseText = MBridge.stringParse(response); + +// if (responseText.isEmpty) { +// secretKey = ""; +// } +// } +// } +// String deobfuscatedScript = +// MBridge.evalJs(responseText.replaceAll("eval", "")); + +// int baseLinkStartPos = deobfuscatedScript.indexOf("pix=") + 5; +// int baseLinkEndPos = +// deobfuscatedScript.indexOf(";", baseLinkStartPos) - 1; +// String baseLink = +// deobfuscatedScript.substring(baseLinkStartPos, baseLinkEndPos); + +// int imageLinkStartPos = deobfuscatedScript.indexOf("pvalue=") + 9; +// int imageLinkEndPos = deobfuscatedScript.indexOf("\"", imageLinkStartPos); +// String imageLink = +// deobfuscatedScript.substring(imageLinkStartPos, imageLinkEndPos); +// pageUrls.add("https:$baseLink$imageLink"); +// } +// } + +// return pageUrls; +// } + +// Map getHeader(String url) { +// final headers = {'Referer': '$url/', "Cookie": "isAdult=1"}; +// return headers; +// } diff --git a/src/en/mangahere/source.dart b/src/en/mangahere/source.dart new file mode 100644 index 00000000..a9cceeed --- /dev/null +++ b/src/en/mangahere/source.dart @@ -0,0 +1,17 @@ +import '../../../model/source.dart'; + +Source get mangahereSource => _mangahereSource; +const mangahereVersion = "0.0.1"; +const mangahereSourceCodeUrl = + "https://raw.githubusercontent.com/kodjodevf/External-source-test/main/src/en/mangahere/mangahere-v$mangahereVersion.dart"; +Source _mangahereSource = Source( + name: "MangaHere", + baseUrl: "http://www.mangahere.cc", + lang: "en", + typeSource: "single", + iconUrl: '', + sourceCodeUrl: mangahereSourceCodeUrl, + version: mangahereVersion, + dateFormat: "MMM dd,yyyy", + dateFormatLocale: "en", +);