From d9a66b76514739420e6ee3a913be9b80cc9396af Mon Sep 17 00:00:00 2001 From: Schnitzel5 Date: Mon, 25 Nov 2024 22:51:11 +0100 Subject: [PATCH 01/19] add novel support --- .../src/frenchanime/frenchanime.dart | 2 +- .../datalifeengine/src/wiflix/wiflix.dart | 2 +- .../dopeflix/src/dopebox/dopebox.dart | 2 +- .../multisrc/dopeflix/src/sflix/sflix.dart | 2 +- .../zorotheme/src/hianime/hianime.dart | 2 +- .../multisrc/zorotheme/src/kaido/kaido.dart | 2 +- .../src/all/animeworldindia/sources.dart | 2 +- dart/anime/src/all/nyaa/source.dart | 2 +- dart/anime/src/ar/okanime/source.dart | 2 +- dart/anime/src/de/animetoast/source.dart | 2 +- dart/anime/src/en/animepahe/source.dart | 2 +- dart/anime/src/en/dramacool/source.dart | 2 +- dart/anime/src/en/gogoanime/source.dart | 2 +- dart/anime/src/en/kisskh/source.dart | 2 +- dart/anime/src/en/nineanimetv/source.dart | 2 +- dart/anime/src/en/uhdmovies/source.dart | 2 +- dart/anime/src/fr/animesama/source.dart | 2 +- dart/anime/src/fr/animesultra/source.dart | 2 +- dart/anime/src/fr/franime/source.dart | 2 +- dart/anime/src/fr/otakufr/source.dart | 2 +- dart/anime/src/hi/yomovies/source.dart | 2 +- dart/anime/src/id/nimegami/source.dart | 2 +- dart/anime/src/id/oploverz/source.dart | 2 +- dart/anime/src/id/otakudesu/source.dart | 2 +- dart/anime/src/it/animesaturn/source.dart | 2 +- dart/anime/src/pt/animesvision/source.dart | 2 +- dart/anime/src/sq/filma24/source.dart | 2 +- dart/anime/src/tr/diziwatch/source.dart | 2 +- dart/manga/multisrc/madara/sources.dart | 1 + dart/manga/multisrc/mangabox/sources.dart | 1 + dart/manga/multisrc/mangareader/sources.dart | 1 + dart/manga/multisrc/mmrcms/sources.dart | 1 + dart/manga/multisrc/nepnep/sources.dart | 1 + dart/manga/src/all/comick/sources.dart | 1 + dart/manga/src/all/mangadex/sources.dart | 1 + dart/manga/src/en/mangahere/source.dart | 1 + dart/novel/novel_source_list.dart | 4 ++++ dart/novel/src/en/icon.png | Bin 0 -> 17418 bytes dart/novel/src/en/novelupdates.dart | 0 dart/novel/src/en/source.dart | 19 +++++++++++++++ javascript/anime/src/de/aniworld.js | 2 +- javascript/anime/src/en/allanime.js | 2 +- javascript/anime/src/es/animeflv.js | 2 +- javascript/anime/src/zh/360zy.js | 2 +- javascript/anime/src/zh/ffzy.js | 2 +- javascript/anime/src/zh/huaweiba.js | 2 +- javascript/anime/src/zh/jisuzy.js | 2 +- javascript/anime/src/zh/mikan.js | 2 +- javascript/anime/src/zh/tiankongzy.js | 2 +- javascript/anime/src/zh/yhdm.js | 2 +- javascript/manga/src/zh/77mh.js | 2 +- javascript/manga/src/zh/copymanga.js | 2 +- javascript/manga/src/zh/dmzj.js | 2 +- javascript/manga/src/zh/manhuadb.js | 2 +- javascript/manga/src/zh/manhuagui.js | 2 +- model/source.dart | 14 +++++++---- source_generator.dart | 22 +++++++++++++++--- 57 files changed, 103 insertions(+), 50 deletions(-) create mode 100644 dart/novel/novel_source_list.dart create mode 100644 dart/novel/src/en/icon.png create mode 100644 dart/novel/src/en/novelupdates.dart create mode 100644 dart/novel/src/en/source.dart diff --git a/dart/anime/multisrc/datalifeengine/src/frenchanime/frenchanime.dart b/dart/anime/multisrc/datalifeengine/src/frenchanime/frenchanime.dart index f28491dc..719dcece 100644 --- a/dart/anime/multisrc/datalifeengine/src/frenchanime/frenchanime.dart +++ b/dart/anime/multisrc/datalifeengine/src/frenchanime/frenchanime.dart @@ -7,7 +7,7 @@ Source _frenchanimeSource = Source( baseUrl: "https://french-anime.com", lang: "fr", typeSource: "datalifeengine", - isManga: false, + itemType: ItemType.anime, iconUrl: "https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/$branchName/dart/anime/multisrc/datalifeengine/src/frenchanime/icon.png", ); diff --git a/dart/anime/multisrc/datalifeengine/src/wiflix/wiflix.dart b/dart/anime/multisrc/datalifeengine/src/wiflix/wiflix.dart index 3e98c937..083a1aa9 100644 --- a/dart/anime/multisrc/datalifeengine/src/wiflix/wiflix.dart +++ b/dart/anime/multisrc/datalifeengine/src/wiflix/wiflix.dart @@ -7,7 +7,7 @@ Source _wiflixSource = Source( baseUrl: "https://wiflix.bot", lang: "fr", typeSource: "datalifeengine", - isManga: false, + itemType: ItemType.anime, iconUrl: "https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/$branchName/dart/anime/multisrc/datalifeengine/src/wiflix/icon.png", ); diff --git a/dart/anime/multisrc/dopeflix/src/dopebox/dopebox.dart b/dart/anime/multisrc/dopeflix/src/dopebox/dopebox.dart index 2029e53f..ef8a39c7 100644 --- a/dart/anime/multisrc/dopeflix/src/dopebox/dopebox.dart +++ b/dart/anime/multisrc/dopeflix/src/dopebox/dopebox.dart @@ -7,7 +7,7 @@ Source _dopeboxSource = Source( baseUrl: "https://dopebox.to", lang: "en", typeSource: "dopeflix", - isManga: false, + itemType: ItemType.anime, iconUrl: "https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/$branchName/dart/anime/multisrc/dopeflix/src/dopebox/icon.png", ); diff --git a/dart/anime/multisrc/dopeflix/src/sflix/sflix.dart b/dart/anime/multisrc/dopeflix/src/sflix/sflix.dart index 89d420a4..c19dbd1e 100644 --- a/dart/anime/multisrc/dopeflix/src/sflix/sflix.dart +++ b/dart/anime/multisrc/dopeflix/src/sflix/sflix.dart @@ -7,7 +7,7 @@ Source _sflixSource = Source( baseUrl: "https://sflix.to", lang: "en", typeSource: "dopeflix", - isManga: false, + itemType: ItemType.anime, iconUrl: "https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/$branchName/dart/anime/multisrc/dopeflix/src/sflix/icon.png", ); diff --git a/dart/anime/multisrc/zorotheme/src/hianime/hianime.dart b/dart/anime/multisrc/zorotheme/src/hianime/hianime.dart index 86b54428..27bc3449 100644 --- a/dart/anime/multisrc/zorotheme/src/hianime/hianime.dart +++ b/dart/anime/multisrc/zorotheme/src/hianime/hianime.dart @@ -6,7 +6,7 @@ Source _aniwatchSource = Source( id: 814067600, name: "HiAnime", baseUrl: "https://hianime.to", - isManga: false, + itemType: ItemType.anime, lang: "en", typeSource: "zorotheme", iconUrl: diff --git a/dart/anime/multisrc/zorotheme/src/kaido/kaido.dart b/dart/anime/multisrc/zorotheme/src/kaido/kaido.dart index 7270c8cb..59929d21 100644 --- a/dart/anime/multisrc/zorotheme/src/kaido/kaido.dart +++ b/dart/anime/multisrc/zorotheme/src/kaido/kaido.dart @@ -6,7 +6,7 @@ Source _kaidoSource = Source( name: "Kaido.to", baseUrl: "https://kaido.to", lang: "en", - isManga: false, + itemType: ItemType.anime, typeSource: "zorotheme", iconUrl: "https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/$branchName/dart/anime/multisrc/zorotheme/src/kaido/icon.png", diff --git a/dart/anime/src/all/animeworldindia/sources.dart b/dart/anime/src/all/animeworldindia/sources.dart index 52db9e30..7d5e80e8 100644 --- a/dart/anime/src/all/animeworldindia/sources.dart +++ b/dart/anime/src/all/animeworldindia/sources.dart @@ -28,6 +28,6 @@ List _animeworldindiaSourcesList = _languages typeSource: "multiple", iconUrl: _iconUrl, version: _animeworldindiaVersion, - isManga: false, + itemType: ItemType.anime, sourceCodeUrl: _animeworldindiaSourceCodeUrl)) .toList(); diff --git a/dart/anime/src/all/nyaa/source.dart b/dart/anime/src/all/nyaa/source.dart index ea04acd6..358cda2c 100644 --- a/dart/anime/src/all/nyaa/source.dart +++ b/dart/anime/src/all/nyaa/source.dart @@ -15,5 +15,5 @@ Source _nyaaSource = Source( typeSource: "torrent", iconUrl: _iconUrl, version: _nyaaVersion, - isManga: false, + itemType: ItemType.anime, sourceCodeUrl: _nyaaSourceCodeUrl); diff --git a/dart/anime/src/ar/okanime/source.dart b/dart/anime/src/ar/okanime/source.dart index 64ab435d..ac354883 100644 --- a/dart/anime/src/ar/okanime/source.dart +++ b/dart/anime/src/ar/okanime/source.dart @@ -13,4 +13,4 @@ Source _okanimeSource = Source( "https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/$branchName/dart/anime/src/ar/okanime/icon.png", sourceCodeUrl: _okanimeSourceCodeUrl, version: _okanimeVersion, - isManga: false); + itemType: ItemType.anime); diff --git a/dart/anime/src/de/animetoast/source.dart b/dart/anime/src/de/animetoast/source.dart index f3b6e160..e472a65c 100644 --- a/dart/anime/src/de/animetoast/source.dart +++ b/dart/anime/src/de/animetoast/source.dart @@ -13,4 +13,4 @@ Source _animetoast = Source( "https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/$branchName/dart/anime/src/de/animetoast/icon.png", sourceCodeUrl: _animetoastCodeUrl, version: _animetoastVersion, - isManga: false); + itemType: ItemType.anime); diff --git a/dart/anime/src/en/animepahe/source.dart b/dart/anime/src/en/animepahe/source.dart index 9a52802d..0bf8602a 100644 --- a/dart/anime/src/en/animepahe/source.dart +++ b/dart/anime/src/en/animepahe/source.dart @@ -13,4 +13,4 @@ Source _animepaheSource = Source( "https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/$branchName/dart/anime/src/en/animepahe/icon.png", sourceCodeUrl: _animepaheSourceCodeUrl, version: _animepaheVersion, - isManga: false); + itemType: ItemType.anime); diff --git a/dart/anime/src/en/dramacool/source.dart b/dart/anime/src/en/dramacool/source.dart index f70146c6..7c0cb4cd 100644 --- a/dart/anime/src/en/dramacool/source.dart +++ b/dart/anime/src/en/dramacool/source.dart @@ -13,4 +13,4 @@ Source _dramacoolSource = Source( "https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/$branchName/dart/anime/src/en/dramacool/icon.png", sourceCodeUrl: _dramacoolSourceCodeUrl, version: _dramacoolVersion, - isManga: false); + itemType: ItemType.anime); diff --git a/dart/anime/src/en/gogoanime/source.dart b/dart/anime/src/en/gogoanime/source.dart index 0529962b..90640b1f 100644 --- a/dart/anime/src/en/gogoanime/source.dart +++ b/dart/anime/src/en/gogoanime/source.dart @@ -13,4 +13,4 @@ Source _gogoanimeSource = Source( "https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/$branchName/dart/anime/src/en/gogoanime/icon.png", sourceCodeUrl: _gogoanimeSourceCodeUrl, version: _gogoanimeVersion, - isManga: false); + itemType: ItemType.anime); diff --git a/dart/anime/src/en/kisskh/source.dart b/dart/anime/src/en/kisskh/source.dart index 26cc5a10..c4405238 100644 --- a/dart/anime/src/en/kisskh/source.dart +++ b/dart/anime/src/en/kisskh/source.dart @@ -13,4 +13,4 @@ Source _kisskhSource = Source( "https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/$branchName/dart/anime/src/en/kisskh/icon.png", sourceCodeUrl: _kisskhSourceCodeUrl, version: _kisskhVersion, - isManga: false); + itemType: ItemType.anime); diff --git a/dart/anime/src/en/nineanimetv/source.dart b/dart/anime/src/en/nineanimetv/source.dart index d568ea93..c57ada38 100644 --- a/dart/anime/src/en/nineanimetv/source.dart +++ b/dart/anime/src/en/nineanimetv/source.dart @@ -13,4 +13,4 @@ Source _nineanimetv = Source( "https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/$branchName/dart/anime/src/en/nineanimetv/icon.png", sourceCodeUrl: _nineanimetvCodeUrl, version: _nineanimetvVersion, - isManga: false); + itemType: ItemType.anime); diff --git a/dart/anime/src/en/uhdmovies/source.dart b/dart/anime/src/en/uhdmovies/source.dart index 8cb2eb8f..00014bc9 100644 --- a/dart/anime/src/en/uhdmovies/source.dart +++ b/dart/anime/src/en/uhdmovies/source.dart @@ -13,4 +13,4 @@ Source _uhdmoviesSource = Source( "https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/$branchName/dart/anime/src/en/uhdmovies/icon.png", sourceCodeUrl: _uhdmoviesSourceCodeUrl, version: _uhdmoviesVersion, - isManga: false); + itemType: ItemType.anime); diff --git a/dart/anime/src/fr/animesama/source.dart b/dart/anime/src/fr/animesama/source.dart index 18baefe3..bc99cc92 100644 --- a/dart/anime/src/fr/animesama/source.dart +++ b/dart/anime/src/fr/animesama/source.dart @@ -13,4 +13,4 @@ Source _animesama = Source( "https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/$branchName/dart/anime/src/fr/animesama/icon.png", sourceCodeUrl: animesamaCodeUrl, version: animesamaVersion, - isManga: false); + itemType: ItemType.anime); diff --git a/dart/anime/src/fr/animesultra/source.dart b/dart/anime/src/fr/animesultra/source.dart index 2fbc1c92..cfb16690 100644 --- a/dart/anime/src/fr/animesultra/source.dart +++ b/dart/anime/src/fr/animesultra/source.dart @@ -13,5 +13,5 @@ Source _animesultraSource = Source( "https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/$branchName/dart/anime/src/fr/animesultra/icon.png", sourceCodeUrl: _animesultraSourceCodeUrl, version: _animesultraVersion, - isManga: false, + itemType: ItemType.anime, isFullData: false); diff --git a/dart/anime/src/fr/franime/source.dart b/dart/anime/src/fr/franime/source.dart index c91f0113..22b5a5b8 100644 --- a/dart/anime/src/fr/franime/source.dart +++ b/dart/anime/src/fr/franime/source.dart @@ -14,5 +14,5 @@ Source _franimeSource = Source( "https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/$branchName/dart/anime/src/fr/franime/icon.png", sourceCodeUrl: _franimeSourceCodeUrl, version: _franimeVersion, - isManga: false, + itemType: ItemType.anime, isFullData: true); diff --git a/dart/anime/src/fr/otakufr/source.dart b/dart/anime/src/fr/otakufr/source.dart index ee005123..14d7208a 100644 --- a/dart/anime/src/fr/otakufr/source.dart +++ b/dart/anime/src/fr/otakufr/source.dart @@ -13,5 +13,5 @@ Source _otakufr = Source( "https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/$branchName/dart/anime/src/fr/otakufr/icon.png", sourceCodeUrl: otakufrCodeUrl, version: otakufrVersion, - isManga: false, + itemType: ItemType.anime, isFullData: false); diff --git a/dart/anime/src/hi/yomovies/source.dart b/dart/anime/src/hi/yomovies/source.dart index a6df350c..39d2e5d1 100644 --- a/dart/anime/src/hi/yomovies/source.dart +++ b/dart/anime/src/hi/yomovies/source.dart @@ -13,4 +13,4 @@ Source _yomoviesSource = Source( "https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/$branchName/dart/anime/src/hi/yomovies/icon.png", sourceCodeUrl: _yomoviesSourceCodeUrl, version: _yomoviesVersion, - isManga: false); + itemType: ItemType.anime); diff --git a/dart/anime/src/id/nimegami/source.dart b/dart/anime/src/id/nimegami/source.dart index 1468aca8..1c009109 100644 --- a/dart/anime/src/id/nimegami/source.dart +++ b/dart/anime/src/id/nimegami/source.dart @@ -13,4 +13,4 @@ Source _nimegami = Source( "https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/$branchName/dart/anime/src/id/nimegami/icon.png", sourceCodeUrl: _nimegamiCodeUrl, version: _nimegamiVersion, - isManga: false); + itemType: ItemType.anime); diff --git a/dart/anime/src/id/oploverz/source.dart b/dart/anime/src/id/oploverz/source.dart index 4083f29f..d1ec05ba 100644 --- a/dart/anime/src/id/oploverz/source.dart +++ b/dart/anime/src/id/oploverz/source.dart @@ -13,4 +13,4 @@ Source _oploverz = Source( "https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/$branchName/dart/anime/src/id/oploverz/icon.png", sourceCodeUrl: _oploverzCodeUrl, version: _oploverzVersion, - isManga: false); + itemType: ItemType.anime); diff --git a/dart/anime/src/id/otakudesu/source.dart b/dart/anime/src/id/otakudesu/source.dart index 288b4050..f91ae909 100644 --- a/dart/anime/src/id/otakudesu/source.dart +++ b/dart/anime/src/id/otakudesu/source.dart @@ -13,4 +13,4 @@ Source _otakudesu = Source( "https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/$branchName/dart/anime/src/id/otakudesu/icon.png", sourceCodeUrl: _otakudesuCodeUrl, version: _otakudesuVersion, - isManga: false); + itemType: ItemType.anime); diff --git a/dart/anime/src/it/animesaturn/source.dart b/dart/anime/src/it/animesaturn/source.dart index 8148ab4c..a436568f 100644 --- a/dart/anime/src/it/animesaturn/source.dart +++ b/dart/anime/src/it/animesaturn/source.dart @@ -13,4 +13,4 @@ Source _animesaturn = Source( "https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/$branchName/dart/anime/src/it/animesaturn/icon.png", sourceCodeUrl: _animesaturnCodeUrl, version: _animesaturnVersion, - isManga: false); + itemType: ItemType.anime); diff --git a/dart/anime/src/pt/animesvision/source.dart b/dart/anime/src/pt/animesvision/source.dart index e2aa1711..183c192e 100644 --- a/dart/anime/src/pt/animesvision/source.dart +++ b/dart/anime/src/pt/animesvision/source.dart @@ -13,4 +13,4 @@ Source _animesvision = Source( "https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/$branchName/dart/anime/src/pt/animesvision/icon.png", sourceCodeUrl: _animesvisionCodeUrl, version: _animesvisionVersion, - isManga: false); + itemType: ItemType.anime); diff --git a/dart/anime/src/sq/filma24/source.dart b/dart/anime/src/sq/filma24/source.dart index d26ea58c..2b085406 100644 --- a/dart/anime/src/sq/filma24/source.dart +++ b/dart/anime/src/sq/filma24/source.dart @@ -13,4 +13,4 @@ Source _filma24 = Source( "https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/$branchName/dart/anime/src/sq/filma24/icon.png", sourceCodeUrl: _filma24CodeUrl, version: _filma24Version, - isManga: false); + itemType: ItemType.anime); diff --git a/dart/anime/src/tr/diziwatch/source.dart b/dart/anime/src/tr/diziwatch/source.dart index fdef5bc5..d13cc343 100644 --- a/dart/anime/src/tr/diziwatch/source.dart +++ b/dart/anime/src/tr/diziwatch/source.dart @@ -13,4 +13,4 @@ Source _diziwatchSource = Source( "https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/$branchName/dart/anime/src/tr/diziwatch/icon.png", sourceCodeUrl: _diziwatchSourceCodeUrl, version: _diziwatchVersion, - isManga: false); + itemType: ItemType.anime); diff --git a/dart/manga/multisrc/madara/sources.dart b/dart/manga/multisrc/madara/sources.dart index d31f89e5..01043613 100644 --- a/dart/manga/multisrc/madara/sources.dart +++ b/dart/manga/multisrc/madara/sources.dart @@ -571,6 +571,7 @@ List _madaraSourcesList = [ webtoonhattiSource, ] .map((e) => e + ..itemType = ItemType.manga ..sourceCodeUrl = madaraSourceCodeUrl ..version = madaraVersion) .toList(); diff --git a/dart/manga/multisrc/mangabox/sources.dart b/dart/manga/multisrc/mangabox/sources.dart index 9d6ebeb2..8ba94a88 100644 --- a/dart/manga/multisrc/mangabox/sources.dart +++ b/dart/manga/multisrc/mangabox/sources.dart @@ -20,6 +20,7 @@ List _mangaboxSourcesList = [ manganatoSource ] .map((e) => e + ..itemType = ItemType.manga ..sourceCodeUrl = mangaboxSourceCodeUrl ..version = mangaboxVersion) .toList(); diff --git a/dart/manga/multisrc/mangareader/sources.dart b/dart/manga/multisrc/mangareader/sources.dart index 368596ab..1f6ce4dc 100644 --- a/dart/manga/multisrc/mangareader/sources.dart +++ b/dart/manga/multisrc/mangareader/sources.dart @@ -292,6 +292,7 @@ List _mangareaderSourcesList = [ zenithscansSource ] .map((e) => e + ..itemType = ItemType.manga ..sourceCodeUrl = mangareaderSourceCodeUrl ..version = mangareaderVersion) .toList(); diff --git a/dart/manga/multisrc/mmrcms/sources.dart b/dart/manga/multisrc/mmrcms/sources.dart index 57164115..cbcc621d 100644 --- a/dart/manga/multisrc/mmrcms/sources.dart +++ b/dart/manga/multisrc/mmrcms/sources.dart @@ -32,6 +32,7 @@ List _mmrcmsSourcesList = [ mangafrSource, ] .map((e) => e + ..itemType = ItemType.manga ..sourceCodeUrl = mmrcmsSourceCodeUrl ..version = mmrcmsVersion) .toList(); diff --git a/dart/manga/multisrc/nepnep/sources.dart b/dart/manga/multisrc/nepnep/sources.dart index e191c8e0..f71f1929 100644 --- a/dart/manga/multisrc/nepnep/sources.dart +++ b/dart/manga/multisrc/nepnep/sources.dart @@ -15,6 +15,7 @@ List _nepnepSourcesList = [ mangalifeSource, ] .map((e) => e + ..itemType = ItemType.manga ..sourceCodeUrl = nepnepSourceCodeUrl ..version = nepnepVersion) .toList(); diff --git a/dart/manga/src/all/comick/sources.dart b/dart/manga/src/all/comick/sources.dart index 1fe49c0a..dbfb1b61 100644 --- a/dart/manga/src/all/comick/sources.dart +++ b/dart/manga/src/all/comick/sources.dart @@ -67,5 +67,6 @@ List _comickSourcesList = _languages isNsfw: _isNsfw, dateFormatLocale: "en", version: _comickVersion, + itemType: ItemType.manga, sourceCodeUrl: _comickSourceCodeUrl)) .toList(); diff --git a/dart/manga/src/all/mangadex/sources.dart b/dart/manga/src/all/mangadex/sources.dart index e5f023c4..1f8d9aef 100644 --- a/dart/manga/src/all/mangadex/sources.dart +++ b/dart/manga/src/all/mangadex/sources.dart @@ -70,5 +70,6 @@ List _mangaDexSourcesList = _languages isNsfw: _isNsfw, dateFormatLocale: 'en_Us', version: _mangadexVersion, + itemType: ItemType.manga, sourceCodeUrl: _mangadexSourceCodeUrl)) .toList(); diff --git a/dart/manga/src/en/mangahere/source.dart b/dart/manga/src/en/mangahere/source.dart index 095f6fe0..789e1d84 100644 --- a/dart/manga/src/en/mangahere/source.dart +++ b/dart/manga/src/en/mangahere/source.dart @@ -12,6 +12,7 @@ Source _mangahereSource = Source( iconUrl: "https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/$branchName/dart/manga/src/en/mangahere/icon.png", sourceCodeUrl: _mangahereSourceCodeUrl, + itemType: ItemType.manga, version: _mangahereVersion, dateFormat: "MMM dd,yyyy", dateFormatLocale: "en", diff --git a/dart/novel/novel_source_list.dart b/dart/novel/novel_source_list.dart new file mode 100644 index 00000000..51a1594a --- /dev/null +++ b/dart/novel/novel_source_list.dart @@ -0,0 +1,4 @@ +import '../../model/source.dart'; + +List dartNovelSourceList = [ +]; diff --git a/dart/novel/src/en/icon.png b/dart/novel/src/en/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..544fef066fef894fe949acc8d5f38290d0daa6fd GIT binary patch literal 17418 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
  • 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 literal 0 HcmV?d00001 diff --git a/dart/novel/src/en/novelupdates.dart b/dart/novel/src/en/novelupdates.dart new file mode 100644 index 00000000..e69de29b diff --git a/dart/novel/src/en/source.dart b/dart/novel/src/en/source.dart new file mode 100644 index 00000000..475354c3 --- /dev/null +++ b/dart/novel/src/en/source.dart @@ -0,0 +1,19 @@ +import '../../../../model/source.dart'; + +Source get novelUpdatesSource => _novelUpdatesSource; +const _novelUpdatesVersion = "0.0.1"; +const _novelUpdatesSourceCodeUrl = + "https://raw.githubusercontent.com/Schnitzel5/mangayomi-extensions/$branchName/dart/novel/src/en/novelupdates.dart"; +Source _novelUpdatesSource = Source( + name: "NovelUpdates", + baseUrl: "https://www.novelupdates.com", + lang: "en", + typeSource: "single", + iconUrl: + "https://raw.githubusercontent.com/Schnitzel5/mangayomi-extensions/$branchName/dart/manga/src/en/icon.png", + sourceCodeUrl: _novelUpdatesSourceCodeUrl, + itemType: ItemType.novel, + version: _novelUpdatesVersion, + dateFormat: "MMM dd,yyyy", + dateFormatLocale: "en", +); diff --git a/javascript/anime/src/de/aniworld.js b/javascript/anime/src/de/aniworld.js index 110e2f69..67c68e21 100644 --- a/javascript/anime/src/de/aniworld.js +++ b/javascript/anime/src/de/aniworld.js @@ -5,7 +5,7 @@ const mangayomiSources = [{ "apiUrl": "", "iconUrl": "https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/javascript/icon/de.aniworld.png", "typeSource": "single", - "isManga": false, + "itemType": "anime", "isNsfw": false, "version": "0.0.15", "dateFormat": "", diff --git a/javascript/anime/src/en/allanime.js b/javascript/anime/src/en/allanime.js index 44114676..6815242b 100644 --- a/javascript/anime/src/en/allanime.js +++ b/javascript/anime/src/en/allanime.js @@ -5,7 +5,7 @@ const mangayomiSources = [{ "apiUrl": "https://api.allanime.day/api", "iconUrl": "https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/javascript/icon/en.allanime.png", "typeSource": "single", - "isManga": false, + "itemType": "anime", "isNsfw": false, "version": "0.0.25", "dateFormat": "", diff --git a/javascript/anime/src/es/animeflv.js b/javascript/anime/src/es/animeflv.js index 06ace0bd..cd59da2f 100644 --- a/javascript/anime/src/es/animeflv.js +++ b/javascript/anime/src/es/animeflv.js @@ -5,7 +5,7 @@ const mangayomiSources = [{ "apiUrl": "", "iconUrl": "https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/javascript/icon/es.animeflv.png", "typeSource": "single", - "isManga": false, + "itemType": "anime", "isNsfw": false, "version": "0.0.1", "dateFormat": "", diff --git a/javascript/anime/src/zh/360zy.js b/javascript/anime/src/zh/360zy.js index c0a59e36..0ecceaeb 100644 --- a/javascript/anime/src/zh/360zy.js +++ b/javascript/anime/src/zh/360zy.js @@ -5,7 +5,7 @@ const mangayomiSources = [{ "apiUrl": "", "iconUrl": "https://360zy.com/favicon.ico", "typeSource": "single", - "isManga": false, + "itemType": "anime", "isNsfw": false, "version": "0.0.1", "dateFormat": "", diff --git a/javascript/anime/src/zh/ffzy.js b/javascript/anime/src/zh/ffzy.js index f9dd2184..65ab73d1 100644 --- a/javascript/anime/src/zh/ffzy.js +++ b/javascript/anime/src/zh/ffzy.js @@ -5,7 +5,7 @@ const mangayomiSources = [{ "apiUrl": "", "iconUrl": "http://ffzy.tv/template/default/img/favicon.png", "typeSource": "single", - "isManga": false, + "itemType": "anime", "isNsfw": false, "version": "0.0.1", "dateFormat": "", diff --git a/javascript/anime/src/zh/huaweiba.js b/javascript/anime/src/zh/huaweiba.js index 200de6f7..56ea0744 100644 --- a/javascript/anime/src/zh/huaweiba.js +++ b/javascript/anime/src/zh/huaweiba.js @@ -5,7 +5,7 @@ const mangayomiSources = [{ "apiUrl": "", "iconUrl": "https://huaweiba.live/template/ziyuan/images/logo2.png", "typeSource": "single", - "isManga": false, + "itemType": "anime", "isNsfw": false, "version": "0.0.1", "dateFormat": "", diff --git a/javascript/anime/src/zh/jisuzy.js b/javascript/anime/src/zh/jisuzy.js index 7600ceb4..e3ce912b 100644 --- a/javascript/anime/src/zh/jisuzy.js +++ b/javascript/anime/src/zh/jisuzy.js @@ -5,7 +5,7 @@ const mangayomiSources = [{ "apiUrl": "", "iconUrl": "https://www.jisuzy.com/template/default/images/site_logo.png", "typeSource": "single", - "isManga": false, + "itemType": "anime", "isNsfw": false, "version": "0.0.1", "dateFormat": "", diff --git a/javascript/anime/src/zh/mikan.js b/javascript/anime/src/zh/mikan.js index abbd893a..fc5d122e 100644 --- a/javascript/anime/src/zh/mikan.js +++ b/javascript/anime/src/zh/mikan.js @@ -5,7 +5,7 @@ const mangayomiSources = [{ "apiUrl": "", "iconUrl": "https://mikanime.tv/images/mikan-pic.png", "typeSource": "torrent", - "isManga": false, + "itemType": "anime", "isNsfw": false, "version": "0.0.15", "dateFormat": "", diff --git a/javascript/anime/src/zh/tiankongzy.js b/javascript/anime/src/zh/tiankongzy.js index e9d21096..eb23c9a4 100644 --- a/javascript/anime/src/zh/tiankongzy.js +++ b/javascript/anime/src/zh/tiankongzy.js @@ -5,7 +5,7 @@ const mangayomiSources = [{ "apiUrl": "", "iconUrl": "https://api.tiankongapi.com/template/v10012/images/logo.jpg", "typeSource": "single", - "isManga": false, + "itemType": "anime", "isNsfw": false, "version": "0.0.1", "dateFormat": "", diff --git a/javascript/anime/src/zh/yhdm.js b/javascript/anime/src/zh/yhdm.js index a6bf7f82..d8c615db 100644 --- a/javascript/anime/src/zh/yhdm.js +++ b/javascript/anime/src/zh/yhdm.js @@ -5,7 +5,7 @@ const mangayomiSources = [{ "apiUrl": "", "iconUrl": "http://www.iyinghua.io/js/20180601/favicon.ico", "typeSource": "single", - "isManga": false, + "itemType": "anime", "isNsfw": false, "version": "0.0.15", "dateFormat": "", diff --git a/javascript/manga/src/zh/77mh.js b/javascript/manga/src/zh/77mh.js index 78417889..6f6fbda4 100644 --- a/javascript/manga/src/zh/77mh.js +++ b/javascript/manga/src/zh/77mh.js @@ -5,7 +5,7 @@ const mangayomiSources = [{ "apiUrl": "", "iconUrl": "https://www.77mh.nl/favicon.ico", "typeSource": "single", - "isManga": true, + "itemType": "manga", "isNsfw": false, "version": "0.0.25", "apiUrl": "", diff --git a/javascript/manga/src/zh/copymanga.js b/javascript/manga/src/zh/copymanga.js index 9278cad6..aa11dd73 100644 --- a/javascript/manga/src/zh/copymanga.js +++ b/javascript/manga/src/zh/copymanga.js @@ -5,7 +5,7 @@ const mangayomiSources = [{ "apiUrl": "https://api.mangacopy.com", "iconUrl": "https://hi77-overseas.mangafuna.xyz/static/free.ico", "typeSource": "single", - "isManga": true, + "itemType": "manga", "isNsfw": false, "version": "0.0.2", "dateFormat": "", diff --git a/javascript/manga/src/zh/dmzj.js b/javascript/manga/src/zh/dmzj.js index 9c490fd4..064c7934 100644 --- a/javascript/manga/src/zh/dmzj.js +++ b/javascript/manga/src/zh/dmzj.js @@ -5,7 +5,7 @@ const mangayomiSources = [{ "apiUrl": "", "iconUrl": "https://www.dmzj.com/_nuxt/logo_dmzj.1c94014a.png", "typeSource": "single", - "isManga": true, + "itemType": "manga", "isNsfw": false, "version": "0.0.25", "dateFormat": "", diff --git a/javascript/manga/src/zh/manhuadb.js b/javascript/manga/src/zh/manhuadb.js index bc270e02..ad52caf7 100644 --- a/javascript/manga/src/zh/manhuadb.js +++ b/javascript/manga/src/zh/manhuadb.js @@ -5,7 +5,7 @@ const mangayomiSources = [{ "apiUrl": "", "iconUrl": "https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/javascript/icon/zh.manhuadb.png", "typeSource": "single", - "isManga": true, + "itemType": "manga", "isNsfw": false, "version": "0.0.25", "dateFormat": "", diff --git a/javascript/manga/src/zh/manhuagui.js b/javascript/manga/src/zh/manhuagui.js index 6dd7c95c..44bb2e73 100644 --- a/javascript/manga/src/zh/manhuagui.js +++ b/javascript/manga/src/zh/manhuagui.js @@ -5,7 +5,7 @@ const mangayomiSources = [{ "apiUrl": "", "iconUrl": "https://www.manhuagui.com/favicon.ico", "typeSource": "single", - "isManga": true, + "itemType": "manga", "isNsfw": false, "version": "0.0.25", "dateFormat": "", diff --git a/model/source.dart b/model/source.dart index f32f5305..84d3a218 100644 --- a/model/source.dart +++ b/model/source.dart @@ -25,7 +25,7 @@ class Source { String? version; - bool? isManga; + ItemType? itemType; bool? isFullData; @@ -49,7 +49,7 @@ class Source { this.sourceCodeUrl = "", this.apiUrl = "", this.version = "", - this.isManga = true, + this.itemType = ItemType.manga, this.isFullData = false, this.appMinVerReq = "0.2.0", this.additionalParams = "", @@ -68,7 +68,7 @@ class Source { : 'mangayomi-js-"${json['lang'] ?? ""}"."${json['name'] ?? ""}"') .hashCode; isFullData = json['isFullData'] ?? false; - isManga = json['isManga'] ?? false; + itemType = json['itemType'] ?? ItemType.manga; isNsfw = json['isNsfw'] ?? false; lang = json['lang'] ?? ""; name = json['name'] ?? ""; @@ -94,7 +94,7 @@ class Source { "sourceCodeUrl": sourceCodeUrl, "apiUrl": apiUrl, "version": version, - "isManga": isManga, + "itemType": itemType, "isFullData": isFullData, "appMinVerReq": appMinVerReq, "additionalParams": additionalParams, @@ -104,3 +104,9 @@ class Source { } const branchName = "main"; + +enum ItemType { + manga, + anime, + novel +} \ No newline at end of file diff --git a/source_generator.dart b/source_generator.dart index f2272441..1ee65660 100644 --- a/source_generator.dart +++ b/source_generator.dart @@ -3,12 +3,14 @@ import 'dart:developer'; import 'dart:io'; import 'dart/anime/anime_source_list.dart'; import 'dart/manga/manga_source_list.dart'; +import 'dart/novel/novel_source_list.dart'; import 'model/source.dart'; void main() { final jsSources = _searchJsSources(Directory("javascript")); - genManga(jsSources.where((element) => element.isManga!).toList()); - genAnime(jsSources.where((element) => !element.isManga!).toList()); + genManga(jsSources.where((element) => element.itemType == "manga").toList()); + genAnime(jsSources.where((element) => element.itemType == "anime").toList()); + genNovel(jsSources.where((element) => element.itemType == "novel").toList()); } void genManga(List jsMangasourceList) { @@ -39,6 +41,20 @@ void genAnime(List jsAnimesourceList) { log('JSON file created: ${file.path}'); } +void genNovel(List jsNovelSourceList) { + List novelSources = []; + novelSources.addAll(dartNovelSourceList); + novelSources.addAll(jsNovelSourceList); + final List> jsonList = + novelSources.map((source) => source.toJson()).toList(); + final jsonString = jsonEncode(jsonList); + + final file = File('novel_index.json'); + file.writeAsStringSync(jsonString); + + log('JSON file created: ${file.path}'); +} + List _searchJsSources(Directory dir) { List sourceList = []; List entities = dir.listSync(); @@ -60,7 +76,7 @@ List _searchJsSources(Directory dir) { ..sourceCodeLanguage = 1 ..appMinVerReq = defaultSource.appMinVerReq ..sourceCodeUrl = - "https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/$branchName/javascript/${e["pkgPath"] ?? e["pkgName"]}") + "https://raw.githubusercontent.com/Schnitzel5/mangayomi-extensions/$branchName/javascript/${e["pkgPath"] ?? e["pkgName"]}") .toList()); } } From 981833cac8ef6537fb722857421970f29426cdb8 Mon Sep 17 00:00:00 2001 From: Schnitzel5 Date: Mon, 25 Nov 2024 22:55:23 +0100 Subject: [PATCH 02/19] add novel support --- dart/anime/anime_source_list.dart | 6 +- .../es/animeonlineninja/animeonlineninja.dart | 309 ++++ dart/anime/src/es/animeonlineninja/icon.png | Bin 0 -> 4044 bytes .../anime/src/es/animeonlineninja/source.dart | 16 + dart/anime/src/fr/anizone/anizone.dart | 490 ++++++ dart/anime/src/fr/anizone/icon.png | Bin 0 -> 26313 bytes dart/anime/src/fr/anizone/source.dart | 16 + dart/anime/src/it/animesaturn/source.dart | 4 +- dart/manga/multisrc/mangareader/sources.dart | 3 - .../src/asurascans/asurascans.dart | 14 - dart/manga/src/all/mangadex/mangadex.dart | 7 +- dart/manga/src/all/mangadex/sources.dart | 2 +- index.json | 2 +- javascript/anime/src/all/netflixmirror.js | 202 +++ javascript/anime/src/de/aniworld.js | 254 +-- javascript/anime/src/de/serienstream.js | 273 ++++ javascript/anime/src/en/allanime.js | 16 +- javascript/anime/src/es/animefenix.js | 1128 +++++++++++++ javascript/anime/src/es/jkanime.js | 1398 +++++++++++++++++ javascript/anime/src/es/tioanime.js | 717 +++++++++ javascript/anime/src/zh/wogg.js | 218 +++ javascript/anime/src/zh/yydsys.js | 211 +++ javascript/icon/all.netflixmirror.png | Bin 0 -> 13305 bytes .../icon/en.asurascans.png | Bin javascript/manga/src/all/mangafire.js | 526 +++++++ javascript/manga/src/en/asurascans.js | 149 ++ model/source.dart | 7 +- source_generator.dart | 32 +- 28 files changed, 5836 insertions(+), 164 deletions(-) create mode 100644 dart/anime/src/es/animeonlineninja/animeonlineninja.dart create mode 100644 dart/anime/src/es/animeonlineninja/icon.png create mode 100644 dart/anime/src/es/animeonlineninja/source.dart create mode 100644 dart/anime/src/fr/anizone/anizone.dart create mode 100644 dart/anime/src/fr/anizone/icon.png create mode 100644 dart/anime/src/fr/anizone/source.dart delete mode 100644 dart/manga/multisrc/mangareader/src/asurascans/asurascans.dart create mode 100644 javascript/anime/src/all/netflixmirror.js create mode 100644 javascript/anime/src/de/serienstream.js create mode 100644 javascript/anime/src/es/animefenix.js create mode 100644 javascript/anime/src/es/jkanime.js create mode 100644 javascript/anime/src/es/tioanime.js create mode 100644 javascript/anime/src/zh/wogg.js create mode 100644 javascript/anime/src/zh/yydsys.js create mode 100644 javascript/icon/all.netflixmirror.png rename dart/manga/multisrc/mangareader/src/asurascans/icon.png => javascript/icon/en.asurascans.png (100%) create mode 100644 javascript/manga/src/all/mangafire.js create mode 100644 javascript/manga/src/en/asurascans.js diff --git a/dart/anime/anime_source_list.dart b/dart/anime/anime_source_list.dart index e582dc61..588bf52d 100644 --- a/dart/anime/anime_source_list.dart +++ b/dart/anime/anime_source_list.dart @@ -10,7 +10,9 @@ import 'src/en/animepahe/source.dart'; import 'src/en/dramacool/source.dart'; import 'src/en/gogoanime/source.dart'; import 'src/en/nineanimetv/source.dart'; +import 'src/es/animeonlineninja/source.dart'; import 'src/fr/animesama/source.dart'; +import 'src/fr/anizone/source.dart'; import 'src/hi/yomovies/source.dart'; import 'src/en/kisskh/source.dart'; import 'src/en/uhdmovies/source.dart'; @@ -50,5 +52,7 @@ List dartAnimesourceList = [ animepaheSource, animetoast, animesvision, - diziwatchSource + diziwatchSource, + aniZoneSource, + animeonlineninjaSource ]; diff --git a/dart/anime/src/es/animeonlineninja/animeonlineninja.dart b/dart/anime/src/es/animeonlineninja/animeonlineninja.dart new file mode 100644 index 00000000..24f8f713 --- /dev/null +++ b/dart/anime/src/es/animeonlineninja/animeonlineninja.dart @@ -0,0 +1,309 @@ +import 'package:mangayomi/bridge_lib.dart'; +import 'dart:convert'; + +class AnimeOnlineNinja extends MProvider { + AnimeOnlineNinja({required this.source}); + + MSource source; + + final Client client = Client(source); + + @override + bool get supportsLatest => false; + + @override + Future getPopular(int page) async { + final res = + (await client.get(Uri.parse("${source.baseUrl}/tendencias"))).body; + return parseAnimeList(res); + } + + @override + Future search(String query, int page, FilterList filterList) async { + String pageStr = page == 1 ? "" : "page/$page/"; + final res = (await client.get(Uri.parse( + "${source.baseUrl}/$pageStr?s=${query.replaceAll(" ", "+")}"))) + .body; + return parseAnimeList(res, + selector: "div.result-item div.image a", + hasNextPage: parseHtml(res) + .selectFirst( + "div.pagination > *:last-child:not(span):not(.current)") + ?.text != + null); + } + + @override + Future getDetail(String url) async { + final res = (await client.get(Uri.parse("${source.baseUrl}$url"))).body; + MManga anime = MManga(); + final document = parseHtml(res); + anime.description = document.selectFirst("div#info").text; + anime.genre = document + .selectFirst("div.sheader") + .select("div.data > div.sgeneros > a") + .map((e) => e.text) + .toList(); + + List? episodesList = []; + final seasonElements = document.select("div#seasons > div"); + if (seasonElements.isEmpty) { + MChapter episode = MChapter(); + episode.name = "Película"; + episode.url = getUrlWithoutDomain(url); + episodesList.add(episode); + } else { + for (var seasonElement in seasonElements) { + final seasonName = seasonElement.selectFirst("span.se-t").text; + for (var epElement in seasonElement.select("ul.episodios > li")) { + final href = epElement.selectFirst("a[href]"); + final epNum = epElement.selectFirst('div.numerando')?.text ?? "0 - 0"; + MChapter episode = MChapter(); + episode.name = + "Season $seasonName x ${substringAfter(epNum, '- ')} ${href.text}"; + episode.url = getUrlWithoutDomain(href!.getHref); + episodesList.add(episode); + } + } + } + + anime.chapters = episodesList.reversed.toList(); + return anime; + } + + @override + Future> getVideoList(String url) async { + final res = (await client.get(Uri.parse("${source.baseUrl}$url"))).body; + final document = parseHtml(res); + final players = document.select("ul#playeroptionsul li"); + List videos = []; + for (var player in players) { + final name = player.selectFirst("span.title").text; + final type = player.attr("data-type"); + final id = player.attr("data-post"); + final num = player.attr("data-nume"); + final resUrl = (await client.get(Uri.parse( + "${source.baseUrl}/wp-json/dooplayer/v1/post/$id?type=$type&source=$num"))) + .body; + final url = + substringBefore(substringAfter(resUrl, "\"embed_url\":\""), "\",") + .replaceAll("\\", ""); + videos.addAll(await extractVideos(url, name)); + } + return sortVideos(videos, source.id); + } + + Future> extractVideos(String url, String lang) async { + List videos = []; + List a = []; + if (url.contains("saidochesto.top") || lang == "MULTISERVER") { + return await extractFromMulti(url); + } else if (["filemoon", "moon", "filemooon"].any((a) => url.contains(a))) { + a = await filemoonExtractor(url, "$lang Filemoon - ", ""); + } else if (["https://dood", "https://ds2play", "https://d0"] + .any((a) => url.contains(a))) { + a = await doodExtractor(url, "$lang DoodStream"); + } else if (["streamtape", "stp", "stape"].any((a) => url.contains(a))) { + a = await streamTapeExtractor(url, "$lang StreamTape"); + } else if (url.contains("uqload")) { + a = await uqloadExtractor(url, lang); + } else if (url.contains("wolfstream")) { + final resUrl = (await client.get(Uri.parse(url))).body; + final jsData = + parseHtml(resUrl).selectFirst("script:contains(sources)").text; + final videoUrl = + substringBefore(substringAfter(jsData, "{file:\""), "\""); + + MVideo video = MVideo(); + video + ..url = videoUrl + ..originalUrl = videoUrl + ..quality = "$lang WolfStream"; + + a = [video]; + } else if (["wishembed", "streamwish", "strwish", "wish"] + .any((a) => url.contains(a))) { + a = await streamWishExtractor(url, "$lang StreamWish"); + } else if (url.contains("mp4upload")) { + a = await mp4UploadExtractor(url, null, "$lang", ""); + } else if (["vidhide", "filelions.top", "vid."] + .any((a) => url.contains(a))) { + a = await streamHideExtractor(url, lang); + } + videos.addAll(a); + + return videos; + } + + Future> streamHideExtractor(String url, String prefix) async { + final res = (await client.get(Uri.parse(url))).body; + final masterUrl = substringBefore( + substringAfter( + substringAfter( + substringAfter(unpackJs(res), "sources:"), "file:\""), + "src:\""), + '"'); + final masterPlaylistRes = (await client.get(Uri.parse(masterUrl))).body; + List videos = []; + for (var it in substringAfter(masterPlaylistRes, "#EXT-X-STREAM-INF:") + .split("#EXT-X-STREAM-INF:")) { + final quality = + "${substringBefore(substringBefore(substringAfter(substringAfter(it, "RESOLUTION="), "x"), ","), "\n")}p"; + + String videoUrl = substringBefore(substringAfter(it, "\n"), "\n"); + + if (!videoUrl.startsWith("http")) { + videoUrl = + "${masterUrl.split("/").sublist(0, masterUrl.split("/").length - 1).join("/")}/$videoUrl"; + } + + MVideo video = MVideo(); + video + ..url = videoUrl + ..originalUrl = videoUrl + ..quality = "$prefix StreamHideVid - $quality"; + videos.add(video); + } + return videos; + } + + Future> uqloadExtractor(String url, String lang) async { + final res = (await client.get(Uri.parse(url))).body; + final js = xpath(res, '//script[contains(text(), "sources:")]/text()'); + if (js.isEmpty) { + return []; + } + + final videoUrl = + substringBefore(substringAfter(js.first, "sources: [\""), '"'); + MVideo video = MVideo(); + video + ..url = videoUrl + ..originalUrl = videoUrl + ..quality = "$lang Uqload" + ..headers = {"Referer": "${Uri.parse(url).origin}/"}; + return [video]; + } + + Future> extractFromMulti(String url) async { + final res = (await client.get(Uri.parse(url))).body; + final document = parseHtml(res); + + final prefLang = getPreferenceValue(source.id, "preferred_lang"); + String langSelector = ""; + if (prefLang.isEmpty) { + langSelector = "div"; + } else { + langSelector = "div.OD_$prefLang"; + } + List videos = []; + for (var element in document.select("div.ODDIV $langSelector > li")) { + final hosterUrl = + substringBefore(substringAfter(element.attr("onclick"), "('"), "')"); + String lang = ""; + if (langSelector == "div") { + lang = substringBefore( + substringAfter(element.parent?.attr("class"), "OD_", ""), " "); + } else { + lang = prefLang; + } + videos.addAll(await extractVideos(hosterUrl, lang)); + } + + return videos; + } + + MPages parseAnimeList(String res, + {String selector = "article.w_item_a > a", bool hasNextPage = false}) { + final elements = parseHtml(res).select(selector); + List animeList = []; + for (var element in elements) { + final url = getUrlWithoutDomain(element.getHref); + if (!url.startsWith("/episodio/")) { + MManga anime = MManga(); + final img = element.selectFirst("img"); + anime.name = img.attr("alt"); + anime.imageUrl = img?.attr("data-src") ?? + img?.attr("data-lazy-src") ?? + img?.attr("srcset") ?? + img?.getSrc; + anime.link = url; + animeList.add(anime); + } + } + return MPages(animeList, hasNextPage); + } + + @override + List getSourcePreferences() { + return [ + ListPreference( + key: "preferred_lang", + title: "Preferred language", + summary: "", + valueIndex: 0, + entries: ["SUB", "All", "ES", "LAT"], + entryValues: ["SUB", "", "ES", "LAT"]), + ListPreference( + key: "preferred_server1", + title: "Preferred server", + summary: "", + valueIndex: 0, + entries: [ + "Filemoon", + "DoodStream", + "StreamTape", + "Uqload", + "WolfStream", + "saidochesto.top", + "VidHide", + "StreamWish", + "Mp4Upload" + ], + entryValues: [ + "Filemoon", + "DoodStream", + "StreamTape", + "Uqload", + "WolfStream", + "saidochesto.top", + "VidHide", + "StreamWish", + "Mp4Upload" + ]), + ]; + } + + List sortVideos(List videos, int sourceId) { + String prefLang = getPreferenceValue(source.id, "preferred_lang"); + String server = getPreferenceValue(sourceId, "preferred_server1"); + videos.sort((MVideo a, MVideo b) { + int qualityMatchA = 0; + + if (a.quality.toLowerCase().contains(prefLang.toLowerCase()) && + a.quality.toLowerCase().contains(server.toLowerCase())) { + qualityMatchA = 1; + } + int qualityMatchB = 0; + if (b.quality.toLowerCase().contains(prefLang.toLowerCase()) && + b.quality.toLowerCase().contains(server.toLowerCase())) { + qualityMatchB = 1; + } + if (qualityMatchA != qualityMatchB) { + return qualityMatchB - qualityMatchA; + } + + final regex = RegExp(r'(\d+)p'); + final matchA = regex.firstMatch(a.quality); + final matchB = regex.firstMatch(b.quality); + final int qualityNumA = int.tryParse(matchA?.group(1) ?? '0') ?? 0; + final int qualityNumB = int.tryParse(matchB?.group(1) ?? '0') ?? 0; + return qualityNumB - qualityNumA; + }); + return videos; + } +} + +AnimeOnlineNinja main(MSource source) { + return AnimeOnlineNinja(source: source); +} diff --git a/dart/anime/src/es/animeonlineninja/icon.png b/dart/anime/src/es/animeonlineninja/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..ab51a326a1bd40b66bd48161ccc3531db2c7f3da GIT binary patch literal 4044 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 _animeonlineninjaSource; +const _animeonlineninjaVersion = "0.0.2"; +const _animeonlineninjaSourceCodeUrl = + "https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/$branchName/dart/anime/src/es/animeonlineninja/animeonlineninja.dart"; +Source _animeonlineninjaSource = Source( + name: "AnimeOnline.Ninja", + baseUrl: "https://ww3.animeonline.ninja", + lang: "es", + typeSource: "single", + iconUrl: + "https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/$branchName/dart/anime/src/es/animeonlineninja/icon.png", + sourceCodeUrl: _animeonlineninjaSourceCodeUrl, + version: _animeonlineninjaVersion, + isManga: false); diff --git a/dart/anime/src/fr/anizone/anizone.dart b/dart/anime/src/fr/anizone/anizone.dart new file mode 100644 index 00000000..561c7328 --- /dev/null +++ b/dart/anime/src/fr/anizone/anizone.dart @@ -0,0 +1,490 @@ +import 'package:mangayomi/bridge_lib.dart'; +import 'dart:convert'; + +class AniZone extends MProvider { + AniZone({required this.source}); + + final MSource source; + final Client client = Client(source); + + // Constants for the xpath + static const String urlXpath = + '//*[contains(@class,"flw-item item-qtip")]/div[@class="film-poster"]/a/@href'; + static const String nameXpath = + '//*[contains(@class,"flw-item item-qtip")]/div[@class="film-detail"]/h3/text()'; + static const String imageXpath = + '//*[contains(@class,"flw-item item-qtip")]/div[@class="film-poster"]/img/@data-src'; + + // Methods for fetching the manga list (popular, latest & search) + Future _getMangaList(String url) async { + final doc = (await client.get(Uri.parse(url))).body; + List animeList = []; + + final urls = xpath(doc, urlXpath); + final names = xpath(doc, nameXpath); + final images = xpath(doc, imageXpath); + + if (urls.isEmpty || names.isEmpty || images.isEmpty) { + return MPages([], false); + } + + for (var i = 0; i < names.length; i++) { + MManga anime = MManga(); + anime.name = names[i]; + anime.imageUrl = images[i]; + anime.link = urls[i]; + animeList.add(anime); + } + + return MPages(animeList, urls.isNotEmpty); + } + + @override + Future getPopular(int page) async { + return _getMangaList("${source.baseUrl}/most-popular/?page=$page"); + } + + @override + Future getLatestUpdates(int page) async { + return _getMangaList("${source.baseUrl}/recently-added/?page=$page"); + } + + @override + Future search(String query, int page, FilterList filterList) async { + String baseUrl = "${source.baseUrl}/filter?keyword=$query"; + + Map> filterMap = { + "type": [], + "status": [], + "season": [], + "lang": [], + "genre": [] + }; + + // Regroupement des filtres avec une logique générique + final filterHandlers = { + "TypeFilter": "type", + "LanguageFilter": "lang", + "SaisonFilter": "season", + "StatusFilter": "status", + "GenreFilter": "genre" + }; + + for (var filter in filterList.filters) { + if (filterHandlers.containsKey(filter.type)) { + var key = filterHandlers[filter.type]!; + for (var stateItem in filter.state as List) { + if (stateItem.state == true) { + filterMap[key]?.add(stateItem.value as String); + } + } + } + } + + //add filters to the url dynamically + for (var entry in filterMap.entries) { + List values = entry.value; + if (values.isNotEmpty) { + baseUrl += '&${entry.key}=${values.join("%2C")}'; + } + } + + return _getMangaList("$baseUrl&page=$page"); + } + + Future getDetail(String url) async { + MManga anime = MManga(); + try { + final doc = (await client.get(Uri.parse(url))).body; + final description = xpath(doc, '//p[contains(@class,"short")]/text()'); + anime.description = description.isNotEmpty ? description.first : ""; + + final statusList = xpath(doc, + '//div[contains(@class,"col2")]//div[contains(@class,"item")]//div[contains(@class,"item-content")]/text()'); + if (statusList.isNotEmpty) { + if (statusList[0] == "Terminer") { + anime.status = MStatus.completed; + } else if (statusList[0] == "En cours") { + anime.status = MStatus.ongoing; + } else { + anime.status = MStatus.unknown; + } + } else { + anime.status = MStatus.unknown; + } + + anime.genre = xpath(doc, + '//div[contains(@class,"item")]//div[contains(@class,"item-content")]//a[contains(@href,"genre")]/text()'); + + final regex = RegExp(r'(\d+)$'); + final match = regex.firstMatch(url); + + if (match == null) { + throw Exception('Numéro de l\'épisode non trouvé dans l\'URL.'); + } + + final res = (await client.get(Uri.parse( + "${source.baseUrl}/ajax/episode/list/${match.group(1)}"))) + .body; + + List episodesList = []; + + final episodeElements = + parseHtml(json.decode(res)["html"]).select(".ep-item"); + + // Associer chaque titre à son URL et récupérer les vidéos + for (var element in episodeElements) { + MChapter episode = MChapter(); + episode.name = element.attr("title"); + + String id = substringAfterLast(element.attr("href"), "="); + episode.url = "${source.baseUrl}/ajax/episode/servers?episodeId=$id"; + episodesList.add(episode); + } + + anime.chapters = episodesList.reversed.toList(); + + return anime; + } catch (e) { + throw Exception('Erreur lors de la récupération des détails: $e'); + } + } + + @override + Future> getVideoList(String url) async { + final videoRes = (await client + .get(Uri.parse(url), headers: {"Referer": "${source.baseUrl}/"})) + .body; + + final lang = xpath(videoRes.replaceAll(r'\', ''), + '//div[contains(@class,"item server-item")]/@data-type'); + final links = xpath(videoRes.replaceAll(r'\', ''), + '//div[contains(@class,"item server-item")]/@data-id'); + final playersNames = xpath(videoRes.replaceAll(r'\', ''), + '//div[contains(@class,"item server-item")]/text()'); + List> players = []; + for (int j = 0; j < links.length; j++) { + // schema of players https://v1.animesz.xyz/ajax/episode/servers?episodeId=(id_episode) + // schema or url https://v1.animesz.xyz/ajax/episode/sources?id=(player_id)&epid=(id_episode) + if (playersNames.isNotEmpty && playersNames[j] == "sibnet") { + final playerUrl = + "https://video.sibnet.ru/shell.php?videoid=${links[j]}"; + players.add({"lang": lang[j], "player": playerUrl}); + } else if (playersNames.isNotEmpty && playersNames[j] == "sendvid") { + final playerUrl = "https://sendvid.com/embed/${links[j]}"; + players.add({"lang": lang[j], "player": playerUrl}); + } else if (playersNames.isNotEmpty && playersNames[j] == "VidCDN") { + final playerUrl = + "https://r.vidcdn.xyz/v1/api/get_sources/${links[j].replaceFirst(RegExp(r'vidcdn$'), '')}"; + players.add({"lang": lang[j], "player": playerUrl}); + } else if (playersNames.isNotEmpty && playersNames[j] == "Voe") { + final playerUrl = "https://voe.sx/e/${links[j]}"; + players.add({"lang": lang[j], "player": playerUrl}); + } else if (playersNames.isNotEmpty && playersNames[j] == "Fmoon") { + final playerUrl = + "https://filemoon.sx/e/${links[j]}&data-realid=${links[j]}&epid=${substringAfter(url, "episodeId=")}"; + players.add({"lang": lang[j], "player": playerUrl}); + } + } + + List videos = []; + for (var player in players) { + String lang = (player["lang"] as String).toUpperCase(); + String playerUrl = player["player"]; + List a = []; + if (playerUrl.contains("sendvid")) { + a = await sendVidExtractorr(playerUrl, "$lang "); + } else if (playerUrl.contains("sibnet.ru")) { + a = await sibnetExtractor(playerUrl, lang); + } else if (playerUrl.contains("voe.sx")) { + a = await voeExtractor(playerUrl, "$lang "); + } else if (playerUrl.contains("vidcdn")) { + a = await vidcdnExtractor(playerUrl, lang); + } else if (playerUrl.contains("filemoon")) { + a = await filemoonExtractor(playerUrl, "$lang Filemoon - ", ""); + } else if (playerUrl.contains("vidhide")) { + a = await streamHideExtractor(playerUrl, lang); + } + videos.addAll(a); + } + + return sortVideos(videos, source.id); + } + + Future> streamHideExtractor(String url, String prefix) async { + final res = (await client.get(Uri.parse(url))).body; + final masterUrl = substringBefore( + substringAfter( + substringAfter( + substringAfter(unpackJs(res), "sources:"), "file:\""), + "src:\""), + '"'); + final masterPlaylistRes = (await client.get(Uri.parse(masterUrl))).body; + List videos = []; + for (var it in substringAfter(masterPlaylistRes, "#EXT-X-STREAM-INF:") + .split("#EXT-X-STREAM-INF:")) { + final quality = + "${substringBefore(substringBefore(substringAfter(substringAfter(it, "RESOLUTION="), "x"), ","), "\n")}p"; + + String videoUrl = substringBefore(substringAfter(it, "\n"), "\n"); + + if (!videoUrl.startsWith("http")) { + videoUrl = + "${masterUrl.split("/").sublist(0, masterUrl.split("/").length - 1).join("/")}/$videoUrl"; + } + + MVideo video = MVideo(); + video + ..url = videoUrl + ..originalUrl = videoUrl + ..quality = "$prefix StreamHideVid - $quality"; + videos.add(video); + } + return videos; + } + + @override + List getFilterList() { + return [ + GroupFilter("TypeFilter", "Type", [ + CheckBoxFilter("Film", "1"), + CheckBoxFilter("Anime", "2"), + CheckBoxFilter("OVA", "3"), + CheckBoxFilter("ONA", "4"), + CheckBoxFilter("Special", "5"), + CheckBoxFilter("Music", "6"), + ]), + GroupFilter("LanguageFilter", "Langue", [ + CheckBoxFilter("VF", "3"), + CheckBoxFilter("VOSTFR", "4"), + CheckBoxFilter("Multicc", "2"), + CheckBoxFilter("EN", "1"), + ]), + GroupFilter("SaisonFilter", "Saison", [ + CheckBoxFilter("Printemps", "1"), + CheckBoxFilter("Été", "2"), + CheckBoxFilter("Automne", "3"), + CheckBoxFilter("Hiver", "4"), + ]), + GroupFilter("StatusFilter", "Statut", [ + CheckBoxFilter("Terminés", "1"), + CheckBoxFilter("En cours", "2"), + CheckBoxFilter("Pas encore diffusés", "3"), + ]), + GroupFilter("GenreFilter", "Genre", [ + CheckBoxFilter("Action", "1"), + CheckBoxFilter("Aventure", "2"), + CheckBoxFilter("Voitures", "3"), + CheckBoxFilter("Comédie", "4"), + CheckBoxFilter("Démence", "5"), + CheckBoxFilter("Démons", "6"), + CheckBoxFilter("Drame", "8"), + CheckBoxFilter("Ecchi", "9"), + CheckBoxFilter("Fantastique", "10"), + CheckBoxFilter("Jeu", "11"), + CheckBoxFilter("Harem", "35"), + CheckBoxFilter("Historique", "13"), + CheckBoxFilter("Horreur", "14"), + CheckBoxFilter("Isekai", "44"), + CheckBoxFilter("Josei", "43"), + CheckBoxFilter("Enfants", "25"), + CheckBoxFilter("Magie", "16"), + CheckBoxFilter("Arts martiaux", "17"), + CheckBoxFilter("Mecha", "18"), + CheckBoxFilter("Militaire", "38"), + CheckBoxFilter("Musique", "19"), + CheckBoxFilter("Mystère", "7"), + CheckBoxFilter("Parodie", "20"), + CheckBoxFilter("Police", "39"), + CheckBoxFilter("Psychologique", "40"), + CheckBoxFilter("Romance", "22"), + CheckBoxFilter("Samouraï", "21"), + CheckBoxFilter("École", "23"), + CheckBoxFilter("Science-Fiction", "24"), + CheckBoxFilter("Seinen", "42"), + CheckBoxFilter("Shoujo Ai", "26"), + CheckBoxFilter("Shoujo", "25"), + CheckBoxFilter("Shounen Ai", "28"), + CheckBoxFilter("Tranche de vie", "36"), + CheckBoxFilter("Shounen", "27"), + CheckBoxFilter("Espace", "29"), + CheckBoxFilter("Sports", "30"), + CheckBoxFilter("Super Pouvoir", "31"), + CheckBoxFilter("Surnaturel", "37"), + CheckBoxFilter("Vampire", "32"), + CheckBoxFilter("Yaoi", "33"), + CheckBoxFilter("Yuri", "34"), + ]) + ]; + } + + @override + List getSourcePreferences() { + return [ + ListPreference( + key: "preferred_quality", + title: "Qualité préférée", + summary: "", + valueIndex: 0, + entries: ["1080p", "720p", "480p", "360p"], + entryValues: ["1080", "720", "480", "360"]), + ListPreference( + key: "voices_preference", + title: "Préférence des voix", + summary: "", + valueIndex: 0, + entries: ["Préférer VOSTFR", "Préférer VF"], + entryValues: ["vostfr", "vf"]), + ]; + } + + List sortVideos(List videos, int sourceId) { + String quality = getPreferenceValue(sourceId, "preferred_quality"); + String voice = getPreferenceValue(sourceId, "voices_preference"); + + videos.sort((MVideo a, MVideo b) { + int qualityMatchA = 0; + if (a.quality.contains(quality) && + a.quality.toLowerCase().contains(voice)) { + qualityMatchA = 1; + } + int qualityMatchB = 0; + if (b.quality.contains(quality) && + b.quality.toLowerCase().contains(voice)) { + qualityMatchB = 1; + } + if (qualityMatchA != qualityMatchB) { + return qualityMatchB - qualityMatchA; + } + + final regex = RegExp(r'(\d+)p'); + final matchA = regex.firstMatch(a.quality); + final matchB = regex.firstMatch(b.quality); + final int qualityNumA = int.tryParse(matchA?.group(1) ?? '0') ?? 0; + final int qualityNumB = int.tryParse(matchB?.group(1) ?? '0') ?? 0; + return qualityNumB - qualityNumA; + }); + return videos; + } + + Future> sendVidExtractorr(String url, String prefix) async { + final res = (await client.get(Uri.parse(url))).body; + final document = parseHtml(res); + final masterUrl = document.selectFirst("source#video_source")?.attr("src"); + print(masterUrl); + if (masterUrl == null) return []; + final masterHeaders = { + "Accept": "*/*", + "Host": Uri.parse(masterUrl).host, + "Origin": "https://${Uri.parse(url).host}", + "Referer": "https://${Uri.parse(url).host}/", + }; + List videos = []; + if (masterUrl.contains(".m3u8")) { + final masterPlaylistRes = (await client.get(Uri.parse(masterUrl))).body; + + for (var it in substringAfter(masterPlaylistRes, "#EXT-X-STREAM-INF:") + .split("#EXT-X-STREAM-INF:")) { + final quality = + "${substringBefore(substringBefore(substringAfter(substringAfter(it, "RESOLUTION="), "x"), ","), "\n")}p"; + + String videoUrl = substringBefore(substringAfter(it, "\n"), "\n"); + + if (!videoUrl.startsWith("http")) { + videoUrl = + "${masterUrl.split("/").sublist(0, masterUrl.split("/").length - 1).join("/")}/$videoUrl"; + } + final videoHeaders = { + "Accept": "*/*", + "Host": Uri.parse(videoUrl).host, + "Origin": "https://${Uri.parse(url).host}", + "Referer": "https://${Uri.parse(url).host}/", + }; + var video = MVideo(); + video + ..url = videoUrl + ..originalUrl = videoUrl + ..quality = prefix + "Sendvid:$quality" + ..headers = videoHeaders; + videos.add(video); + } + } else { + var video = MVideo(); + video + ..url = masterUrl + ..originalUrl = masterUrl + ..quality = prefix + "Sendvid:default" + ..headers = masterHeaders; + videos.add(video); + } + + return videos; + } + + Future> vidcdnExtractor(String url, String prefix) async { + final res = await client.get(Uri.parse(url)); + if (res.statusCode != 200) { + print("Erreur lors de la récupération de la page : ${res.statusCode}"); + return []; + } + final jsonResponse = jsonDecode(res.body); + + String masterUrl = jsonResponse['sources'][0]['file'] ?? ''; + final quality = jsonResponse['quality'] ?? ''; + + List videos = []; + + final masterPlaylistRes = await client.get(Uri.parse(masterUrl)); + if (masterPlaylistRes.statusCode != 200) { + print( + "Error lors de la récupération de la playlist M3U8 : ${masterPlaylistRes.statusCode}"); + return []; + } + + final masterPlaylistBody = masterPlaylistRes.body; + + final playlistLines = masterPlaylistBody.split("\n"); + + for (int i = 0; i < playlistLines.length; i++) { + final line = playlistLines[i]; + if (line.startsWith("#EXT-X-STREAM-INF")) { + final resolutionLine = line.split("RESOLUTION=").last; + final resolution = resolutionLine.split(",").first; + final width = int.parse(resolution.split("x").first); + final height = int.parse(resolution.split("x").last); + + String videoQuality; + if (height >= 1080) { + videoQuality = "1080p"; + } else if (height >= 720) { + videoQuality = "720p"; + } else if (height >= 480) { + videoQuality = "480p"; + } else if (height >= 360) { + videoQuality = "360p"; + } else { + videoQuality = "${height}p"; + } + + String videoUrl = playlistLines[i + 1].trim(); + + if (!videoUrl.startsWith("http")) { + videoUrl = + "${masterUrl.substring(0, masterUrl.lastIndexOf('/'))}/$videoUrl"; + } + + var video = MVideo(); + video + ..url = masterUrl + ..originalUrl = masterUrl + ..quality = "$prefix VidCDN:$videoQuality"; + videos.add(video); + } + } + return videos; + } +} + +AniZone main(MSource source) { + return AniZone(source: source); +} diff --git a/dart/anime/src/fr/anizone/icon.png b/dart/anime/src/fr/anizone/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..32debc92558373dd9fbcca5cd9fdddbf7e413c9a GIT binary patch literal 26313 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 _aniZoneSource; +const _aniZoneVersion = "0.0.2"; +const _aniZoneSourceCodeUrl = + "https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/$branchName/dart/anime/src/fr/anizone/anizone.dart"; +Source _aniZoneSource = Source( + name: "AniZone", + baseUrl: "https://v1.animesz.xyz", + lang: "fr", + typeSource: "single", + iconUrl: + "https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/$branchName/dart/anime/src/fr/anizone/icon.png", + sourceCodeUrl: _aniZoneSourceCodeUrl, + version: _aniZoneVersion, + isManga: false); diff --git a/dart/anime/src/it/animesaturn/source.dart b/dart/anime/src/it/animesaturn/source.dart index a436568f..442e746c 100644 --- a/dart/anime/src/it/animesaturn/source.dart +++ b/dart/anime/src/it/animesaturn/source.dart @@ -1,12 +1,12 @@ import '../../../../../model/source.dart'; Source get animesaturn => _animesaturn; -const _animesaturnVersion = "0.0.35"; +const _animesaturnVersion = "0.0.4"; const _animesaturnCodeUrl = "https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/$branchName/dart/anime/src/it/animesaturn/animesaturn.dart"; Source _animesaturn = Source( name: "AnimeSaturn", - baseUrl: "https://www.animesaturn.tv", + baseUrl: "https://www.animesaturn.cx", lang: "it", typeSource: "single", iconUrl: diff --git a/dart/manga/multisrc/mangareader/sources.dart b/dart/manga/multisrc/mangareader/sources.dart index 1f6ce4dc..f8f0863c 100644 --- a/dart/manga/multisrc/mangareader/sources.dart +++ b/dart/manga/multisrc/mangareader/sources.dart @@ -1,7 +1,6 @@ import '../../../../model/source.dart'; import 'src/beastscans/beastscans.dart'; import 'src/lelmanga/lelmanga.dart'; -import 'src/asurascans/asurascans.dart'; import 'src/komiklab/komiklab.dart'; import 'src/azurescans/azurescans.dart'; import 'src/cosmicscans/cosmicscans.dart'; @@ -104,8 +103,6 @@ List _mangareaderSourcesList = [ beastscansSource, //Lelmanga (FR) lelmangaSource, -//Asura Scans (EN) - asurascansSource, //KomikLab Scans (EN) komiklabSource, //Azure Scans (EN) diff --git a/dart/manga/multisrc/mangareader/src/asurascans/asurascans.dart b/dart/manga/multisrc/mangareader/src/asurascans/asurascans.dart deleted file mode 100644 index 4660c9ff..00000000 --- a/dart/manga/multisrc/mangareader/src/asurascans/asurascans.dart +++ /dev/null @@ -1,14 +0,0 @@ -import '../../../../../../model/source.dart'; - -Source get asurascansSource => _asurascansSource; - -Source _asurascansSource = Source( - name: "Asura Scans", - baseUrl: "https://asuratoon.com/", - lang: "en", - typeSource: "mangareader", - iconUrl: - "https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/$branchName/dart/manga/multisrc/mangareader/src/asurascans/icon.png", - dateFormat: "MMM d, yyyy", - dateFormatLocale: "en_us", -); diff --git a/dart/manga/src/all/mangadex/mangadex.dart b/dart/manga/src/all/mangadex/mangadex.dart index 227fff90..7ba8814f 100644 --- a/dart/manga/src/all/mangadex/mangadex.dart +++ b/dart/manga/src/all/mangadex/mangadex.dart @@ -159,6 +159,11 @@ class MangaDex extends MProvider { headers: headers)) .body; MManga manga = MManga(); + final coverUrl = jsonPathToString( + res, r'$..data.relationships[*].attributes.fileName', ''); + if (coverUrl != null) { + manga.imageUrl = "https://uploads.mangadex.org/covers/${url.replaceAll("/manga/", "")}/${coverUrl}"; + } manga.author = jsonPathToString( res, r'$..data.relationships[*].attributes.name', ', '); @@ -382,8 +387,6 @@ class MangaDex extends MProvider { GroupFilter("ContentRatingList", "Content rating", [ CheckBoxFilter("Safe", "contentRating[]=safe", state: true), CheckBoxFilter("Suggestive", "contentRating[]=suggestive", state: true), - CheckBoxFilter("Erotica", "contentRating[]=erotica"), - CheckBoxFilter("Pornographic", "contentRating[]=pornographic"), ]), GroupFilter("DemographicList", "Publication demographic", [ CheckBoxFilter("None", "publicationDemographic[]=none"), diff --git a/dart/manga/src/all/mangadex/sources.dart b/dart/manga/src/all/mangadex/sources.dart index 1f8d9aef..ff1def04 100644 --- a/dart/manga/src/all/mangadex/sources.dart +++ b/dart/manga/src/all/mangadex/sources.dart @@ -3,7 +3,7 @@ import '../../../../../model/source.dart'; const _apiUrl = 'https://api.mangadex.org'; const _baseUrl = 'https://mangadex.org'; const _isNsfw = true; -const _mangadexVersion = "0.0.9"; +const _mangadexVersion = "0.1.1"; const _mangadexSourceCodeUrl = "https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/$branchName/dart/manga/src/all/mangadex/mangadex.dart"; String _iconUrl = diff --git a/index.json b/index.json index 4c55764b..123ff5a7 100644 --- a/index.json +++ b/index.json @@ -1 +1 @@ -[{"name":"1st Kiss-Manga (unoriginal)","id":638504049,"baseUrl":"https://1stkiss-manga.com","lang":"en","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/firstkissdashmanga/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"en_us","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"AQUA Scans","id":1022584413,"baseUrl":"https://aquascans.com","lang":"en","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/manhwaworld/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"en_us","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Akuma no Tenshi","id":556872410,"baseUrl":"https://akumanotenshi.com","lang":"pt-BR","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/akumanotenshi/icon.png","dateFormat":"dd/MM/yyyy","dateFormatLocale":"pt-br","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Anikiga","id":554316969,"baseUrl":"https://anikiga.com","lang":"tr","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/anikiga/icon.png","dateFormat":"d MMMMM yyyy","dateFormatLocale":"tr","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"ArazNovel","id":966932111,"baseUrl":"https://www.araznovel.com","lang":"tr","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/araznovel/icon.png","dateFormat":"d MMMM yyyy","dateFormatLocale":"en","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Arthur Scan","id":678948853,"baseUrl":"https://arthurscan.xyz","lang":"pt-BR","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/arthurscan/icon.png","dateFormat":"MMMMM dd, yyyy","dateFormatLocale":"pt-br","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"AstralManga","id":1028022993,"baseUrl":"https://astral-manga.fr","lang":"fr","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/astralmanga/icon.png","dateFormat":"dd/mm/yyyy","dateFormatLocale":"fr","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Asura Scans.us (unoriginal)","id":586702086,"baseUrl":"https://asurascans.us","lang":"en","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/asurascansus/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"en_us","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"BarManga","id":627965453,"baseUrl":"https://barmanga.com","lang":"es","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/barmanga/icon.png","dateFormat":"MM/dd/yyyy","dateFormatLocale":"es","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"BestManga","id":926276360,"baseUrl":"https://bestmanga.club","lang":"ru","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/bestmanga/icon.png","dateFormat":"dd.MM.yyyy","dateFormatLocale":"ru","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Chibi Manga","id":105430403,"baseUrl":"https://www.cmreader.info","lang":"en","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/chibimanga/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"en_us","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Clover Manga","id":811523862,"baseUrl":"https://clover-manga.com","lang":"tr","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/clovermanga/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"tr","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Coco Rip","id":316931886,"baseUrl":"https://cocorip.net","lang":"es","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/cocorip/icon.png","dateFormat":"dd/MM/yyyy","dateFormatLocale":"es","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Coffee Manga","id":212388160,"baseUrl":"https://coffeemanga.io","lang":"en","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/coffeemanga/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"en_us","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Doodmanga","id":796439892,"baseUrl":"https://www.doodmanga.com","lang":"th","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/doodmanga/icon.png","dateFormat":"dd MMMMM yyyy","dateFormatLocale":"th","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Elite Manga","id":667501516,"baseUrl":"https://www.elitemanga.org","lang":"en","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/elitemanga/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"en_us","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Emperor Scan","id":21325920,"baseUrl":"https://emperorscan.com","lang":"es","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/emperorscan/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"es","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"EvaScans","id":439004766,"baseUrl":"https://evascans.com","lang":"tr","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/evascans/icon.png","dateFormat":"MMM d, yyy","dateFormatLocale":"tr","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"FR-Scan","id":669019889,"baseUrl":"https://fr-scan.com","lang":"fr","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/frscan/icon.png","dateFormat":"MMMM d, yyyy","dateFormatLocale":"fr","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"FactManga","id":956621361,"baseUrl":"https://factmanga.com","lang":"en","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/factmanga/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"en_us","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"FreeMangaTop","id":679915593,"baseUrl":"https://freemangatop.com","lang":"en","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/freemangatop/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"en_us","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Glory Manga","id":284318957,"baseUrl":"https://glorymanga.com","lang":"tr","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/glorymanga/icon.png","dateFormat":"dd/MM/yyy","dateFormatLocale":"tr","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Harimanga","id":178905360,"baseUrl":"https://harimanga.com","lang":"en","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/harimanga/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"en_us","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Immortal Updates","id":227459275,"baseUrl":"https://immortalupdates.com","lang":"en","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/immortalupdates/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"en_us","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Império Scans","id":721205416,"baseUrl":"https://imperioscans.com.br","lang":"pt-BR","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/imperioscans/icon.png","dateFormat":"dd/MM/yyyy","dateFormatLocale":"pt-br","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Inmortal Scan","id":809387434,"baseUrl":"https://manga.mundodrama.site","lang":"es","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/inmortalscan/icon.png","dateFormat":"MMMM d, yyyy","dateFormatLocale":"es","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"IsekaiScanManga (unoriginal)","id":775728183,"baseUrl":"https://isekaiscanmanga.com","lang":"en","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/isekaiscanmanga/icon.png","dateFormat":"dd MMM، yyyy","dateFormatLocale":"en_us","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Jimanga","id":773169340,"baseUrl":"https://jimanga.com","lang":"en","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/jimanga/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"en_us","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"KSGroupScans","id":374902680,"baseUrl":"https://ksgroupscans.com","lang":"en","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/ksgroupscans/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"en_us","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Kakusei Project","id":872023105,"baseUrl":"https://kakuseiproject.com.br","lang":"pt-BR","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/kakuseiproject/icon.png","dateFormat":"MMMMM dd, yyyy","dateFormatLocale":"pt-br","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Kami Sama Explorer","id":797019242,"baseUrl":"https://leitor.kamisama.com.br","lang":"pt-br","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/kamisamaexplorer/icon.png","dateFormat":"dd 'de' MMMM 'de' yyyy","dateFormatLocale":"pt-br","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Komik Chan","id":852383302,"baseUrl":"https://komikchan.com","lang":"en","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/komikchan/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"en_us","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"LHTranslation","id":21247797,"baseUrl":"https://lhtranslation.net","lang":"en","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/lhtranslation/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"en_us","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Lady Estelar Scan","id":987669145,"baseUrl":"https://ladyestelarscan.com.br","lang":"pt-BR","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/ladyestelarscan/icon.png","dateFormat":"dd/MM/yyyy","dateFormatLocale":"pt-br","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Leviatan Scans","id":280413449,"baseUrl":"https://lscomic.com","lang":"en","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/leviatanscans/icon.png","dateFormat":"MMM dd, yyyy","dateFormatLocale":"en_us","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Luffy Manga","id":797524700,"baseUrl":"https://luffymanga.com","lang":"en","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/luffymanga/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"en_us","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Maid Scan","id":931615028,"baseUrl":"https://maidscan.com.br","lang":"pt-BR","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/maidscan/icon.png","dateFormat":"dd 'de' MMMMM 'de' yyyy","dateFormatLocale":"pt-br","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Manga Diyari","id":531861751,"baseUrl":"https://manga-diyari.com","lang":"tr","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/mangadiyari/icon.png","dateFormat":"MMM dd, yyyy","dateFormatLocale":"tr","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Manga Fenix","id":533195191,"baseUrl":"https://manhua-fenix.com","lang":"es","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/mangafenix/icon.png","dateFormat":"dd MMMM, yyyy","dateFormatLocale":"es","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Manga Galaxy","id":935714707,"baseUrl":"https://mangagalaxy.me","lang":"en","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/mangagalaxy/icon.png","dateFormat":"MM/dd/yyyy","dateFormatLocale":"en_us","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Manga Read","id":256879643,"baseUrl":"https://mangaread.co","lang":"en","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/mangaread/icon.png","dateFormat":"yyyy-MM-dd","dateFormatLocale":"en_us","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Manga Tx.gg (unoriginal)","id":457634416,"baseUrl":"https://mangatx.gg","lang":"en","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/mangatxgg/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"en_us","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Manga Weebs","id":499853860,"baseUrl":"https://mangaweebs.in","lang":"en","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/mangaweebs/icon.png","dateFormat":"dd MMMM HH:mm","dateFormatLocale":"en_us","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Manga Şehri","id":865354788,"baseUrl":"https://mangasehri.com","lang":"tr","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/mangasehri/icon.png","dateFormat":"dd/MM/yyy","dateFormatLocale":"tr","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Manga-TX","id":382229208,"baseUrl":"https://manga-tx.com","lang":"en","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/mangatxunoriginal/icon.png","dateFormat":"MMM d, yyyy","dateFormatLocale":"en_us","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"MangaClash","id":1022665553,"baseUrl":"https://mangaclash.com","lang":"en","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/mangaclash/icon.png","dateFormat":"MM/dd/yy","dateFormatLocale":"en_us","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"MangaFreak.online","id":223793266,"baseUrl":"https://mangafreak.online","lang":"en","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/mangafreakonline/icon.png","dateFormat":"d MMMM، yyy","dateFormatLocale":"en_us","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"MangaGreat","id":1054806605,"baseUrl":"https://mangagreat.com","lang":"en","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/mangagreat/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"en_us","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"MangaKomi","id":396237578,"baseUrl":"https://mangakomi.io","lang":"en","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/mangakomi/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"en_us","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"MangaRead.org","id":120353492,"baseUrl":"https://www.mangaread.org","lang":"en","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/mangareadorg/icon.png","dateFormat":"dd.MM.yyy","dateFormatLocale":"en_us","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"MangaRolls","id":720109919,"baseUrl":"https://mangarolls.com","lang":"en","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/mangarolls/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"en_us","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"MangaTyrant","id":32333683,"baseUrl":"https://mangatyrant.com","lang":"en","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/mangatyrant/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"en_us","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"MangaUS","id":503871898,"baseUrl":"https://mangaus.xyz","lang":"en","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/mangaus/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"en_us","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Mangasushi","id":224429716,"baseUrl":"https://mangasushi.org","lang":"en","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/mangasushi/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"en_us","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Mangá Nanquim","id":92850584,"baseUrl":"https://mangananquim.com","lang":"pt-BR","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/mangananquim/icon.png","dateFormat":"dd 'de' MMMMM 'de' yyyy","dateFormatLocale":"pt-br","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Manhua ES","id":722532191,"baseUrl":"https://manhuaaz.com","lang":"en","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/manhuaes/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"en_us","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"ManhuaUS","id":802461663,"baseUrl":"https://manhuaus.com","lang":"en","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/manhuaus/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"en_us","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"ManhuaZone","id":751568949,"baseUrl":"https://manhuazone.org","lang":"en","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/manhuazone/icon.png","dateFormat":"MMM d, yyyy","dateFormatLocale":"en_us","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"ManhwaClan","id":668862828,"baseUrl":"https://manhwaclan.com","lang":"en","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/manhwaclan/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"en_us","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Manhwafull","id":316078751,"baseUrl":"https://manhwafull.com","lang":"en","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/manhwafull/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"en_us","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Mantraz Scan","id":919786495,"baseUrl":"https://mantrazscan.com","lang":"es","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/mantrazscan/icon.png","dateFormat":"dd/MM/yyyy","dateFormatLocale":"es","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Momo no Hana Scan","id":800496106,"baseUrl":"https://momonohanascan.com","lang":"pt-BR","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/momonohanascan/icon.png","dateFormat":"dd/MM/yyyy","dateFormatLocale":"pt-br","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"MonarcaManga","id":677489943,"baseUrl":"https://monarcamanga.com","lang":"es","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/monarcamanga/icon.png","dateFormat":"MMM d, yyy","dateFormatLocale":"es","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Moon Witch In Love","id":1023454168,"baseUrl":"https://moonwitchinlovescan.com","lang":"pt-BR","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/moonwitchinlove/icon.png","dateFormat":"dd 'de' MMMMM 'de' yyyy","dateFormatLocale":"pt-br","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"NekoPost.co (unoriginal)","id":68388394,"baseUrl":"https://www.nekopost.co","lang":"th","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/nekopostco/icon.png","dateFormat":"d MMMM yyyy","dateFormatLocale":"th","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Niji Translations","id":1040686830,"baseUrl":"https://niji-translations.com","lang":"ar","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/nijitranslations/icon.png","dateFormat":"","dateFormatLocale":"","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Pantheon Scan","id":722864118,"baseUrl":"https://pantheon-scan.com","lang":"fr","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/pantheonscan/icon.png","dateFormat":"d MMMM yyyy","dateFormatLocale":"fr","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Pojok Manga","id":620356987,"baseUrl":"https://pojokmanga.net","lang":"id","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/pojokmanga/icon.png","dateFormat":"MMM dd, yyyy","dateFormatLocale":"en_us","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Projeto Scanlator","id":1059909508,"baseUrl":"https://projetoscanlator.com","lang":"pt-BR","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/projetoscanlator/icon.png","dateFormat":"dd/MM/yyyy","dateFormatLocale":"pt-br","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"ROG Mangás","id":876053235,"baseUrl":"https://rogmangas.com","lang":"pt-BR","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/mangasoverall/icon.png","dateFormat":"dd/MM/yyyy","dateFormatLocale":"pt-br","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Ragnarok Scanlation","id":1045851788,"baseUrl":"https://ragnarokscanlation.com","lang":"es","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/ragnarokscanlation/icon.png","dateFormat":"MMMM d, yyyy","dateFormatLocale":"es","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Rainbow Fairy Scan","id":342232477,"baseUrl":"https://rainbowfairyscan.com","lang":"pt-BR","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/rainbowfairyscan/icon.png","dateFormat":"dd/MM/yyyy","dateFormatLocale":"pt-br","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Random Scan","id":608218815,"baseUrl":"https://randomscanlators.net","lang":"pt-BR","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/randomscan/icon.png","dateFormat":"MMMMM dd, yyyy","dateFormatLocale":"pt-br","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"ReaderGen","id":630253320,"baseUrl":"https://fr.readergen.fr","lang":"fr","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/readergen/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"en_us","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"RichtoScan","id":688713066,"baseUrl":"https://richtoscan.com","lang":"es","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/richtoscan/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"es","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Rightdark Scan","id":1015914849,"baseUrl":"https://rightdark-scan.com","lang":"es","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/rightdarkscan/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"es","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Rio2 Manga","id":110090511,"baseUrl":"https://rio2manga.com","lang":"en","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/rio2manga/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"en_us","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Romantik Manga","id":944131896,"baseUrl":"https://romantikmanga.com","lang":"tr","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/romantikmanga/icon.png","dateFormat":"MMM d, yyy","dateFormatLocale":"tr","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"S2Manga","id":763495726,"baseUrl":"https://www.s2manga.com","lang":"en","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/s2manga/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"en_us","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"SamuraiScan","id":76766511,"baseUrl":"https://samuraiscan.com","lang":"es","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/samuraiscan/icon.png","dateFormat":"MMMM d, yyyy","dateFormatLocale":"es","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"ScamberTraslator","id":774205343,"baseUrl":"https://scambertraslator.com","lang":"es","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/scambertraslator/icon.png","dateFormat":"dd/MM/yyyy","dateFormatLocale":"es","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Scantrad-VF","id":400350749,"baseUrl":"https://scantrad-vf.co","lang":"fr","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/scantradvf/icon.png","dateFormat":"d MMMM yyyy","dateFormatLocale":"fr","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Shadowtrad","id":171182128,"baseUrl":"https://shadowtrad.net","lang":"fr","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/shadowtrad/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"fr","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Shiba Manga","id":368209304,"baseUrl":"https://shibamanga.com","lang":"en","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/shibamanga/icon.png","dateFormat":"MM/dd/yyyy","dateFormatLocale":"en_us","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Sinensis Scan","id":874513309,"baseUrl":"https://sinensisscan.net","lang":"pt-BR","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/sinensis/icon.png","dateFormat":"dd/MM/yyyy","dateFormatLocale":"pt-br","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Sweet Time Scan","id":773665225,"baseUrl":"https://sweetscan.net","lang":"pt-BR","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/sweettimescan/icon.png","dateFormat":"MMMMM dd, yyyy","dateFormatLocale":"pt-br","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Tatakae Scan","id":296744306,"baseUrl":"https://tatakaescan.com","lang":"pt-BR","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/tatakaescan/icon.png","dateFormat":"dd 'de' MMMMM 'de' yyyy","dateFormatLocale":"pt-br","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Taurus Fansub","id":1036726988,"baseUrl":"https://taurusfansub.com","lang":"es","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/taurusfansub/icon.png","dateFormat":"dd/MM/yyy","dateFormatLocale":"es","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"The Beginning After The End","id":337822334,"baseUrl":"https://www.thebeginningaftertheend.fr","lang":"fr","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/thebeginningaftertheend/icon.png","dateFormat":"MMMMM dd, yyyy","dateFormatLocale":"fr","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Tortuga Ceviri","id":294602572,"baseUrl":"https://tortuga-ceviri.com","lang":"tr","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/tortugaceviri/icon.png","dateFormat":"MMMM d, yyyy","dateFormatLocale":"tr","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Wicked Witch Scan","id":679298799,"baseUrl":"https://wickedwitchscan.com","lang":"pt-BR","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/wickedwitchscan/icon.png","dateFormat":"MMMMM dd, yyyy","dateFormatLocale":"pt-br","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Winter Scan","id":455337571,"baseUrl":"https://winterscan.com","lang":"pt-BR","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/winterscan/icon.png","dateFormat":"dd 'de' MMMM 'de' yyyy","dateFormatLocale":"pt-br","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Wonderland Scan","id":867820989,"baseUrl":"https://wonderlandscan.com","lang":"pt-BR","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/wonderlandscan/icon.png","dateFormat":"dd/MM/yyyy","dateFormatLocale":"pt-br","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Yuri Verso","id":756257030,"baseUrl":"https://yuri.live","lang":"pt-br","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/yuriverso/icon.png","dateFormat":"dd/MM/yyyy","dateFormatLocale":"pt-br","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"فالكون مانجا","id":390316279,"baseUrl":"https://falconmanga.com","lang":"ar","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/falconmanga/icon.png","dateFormat":"","dateFormatLocale":"","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"مانجا العاشق","id":913767194,"baseUrl":"https://3asq.org","lang":"ar","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/manga3asq/icon.png","dateFormat":"","dateFormatLocale":"","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Grabber Zone","id":88668089,"baseUrl":"https://grabber.zone","lang":"all","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/bbranchNamee/dart/manga/multisrc/madara/src/grabberzone/icon.png","dateFormat":"dd.MM.yyyy","dateFormatLocale":"en","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Gatemanga","id":228457517,"baseUrl":"https://gatemanga.com","lang":"ar","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/bbranchNamee/dart/manga/multisrc/madara/src/gatemanga/icon.png","dateFormat":"d MMMM، yyyy","dateFormatLocale":"ar","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"GMANGA (unoriginal)","id":534385671,"baseUrl":"https://gmanga.site","lang":"ar","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/bbranchNamee/dart/manga/multisrc/madara/src/gmangasite/icon.png","dateFormat":"MMMM dd، yyyy","dateFormatLocale":"ar","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"مانجا لينك","id":933815485,"baseUrl":"https://manga-link.com","lang":"ar","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/bbranchNamee/dart/manga/multisrc/madara/src/mangalink/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"ar","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"MangaLionz","id":718647301,"baseUrl":"https://manga-lionz.com","lang":"ar","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/bbranchNamee/dart/manga/multisrc/madara/src/mangalionz/icon.png","dateFormat":"MMMM d, yyyy","dateFormatLocale":"ar","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Manga Rose","id":492075908,"baseUrl":"https://mangarose.net","lang":"ar","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/bbranchNamee/dart/manga/multisrc/madara/src/mangarose/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"ar","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"MangaSpark","id":498074514,"baseUrl":"https://manga-spark.net","lang":"ar","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/bbranchNamee/dart/manga/multisrc/madara/src/mangaspark/icon.png","dateFormat":"d MMMM، yyyy","dateFormatLocale":"ar","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Manga Starz","id":424368932,"baseUrl":"https://manga-starz.com","lang":"ar","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/bbranchNamee/dart/manga/multisrc/madara/src/mangastarz/icon.png","dateFormat":"d MMMM، yyyy","dateFormatLocale":"ar","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Manga Time","id":929842820,"baseUrl":"https://mangatime.us","lang":"ar","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/bbranchNamee/dart/manga/multisrc/madara/src/mangatime/icon.png","dateFormat":"dd MMMM، yyyy","dateFormatLocale":"ar","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Olaoe","id":765729692,"baseUrl":"https://olaoe.cyou","lang":"ar","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/bbranchNamee/dart/manga/multisrc/madara/src/olaoe/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"ar","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Rocks Manga","id":694856524,"baseUrl":"https://rocks-manga.com","lang":"ar","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/bbranchNamee/dart/manga/multisrc/madara/src/rocksmanga/icon.png","dateFormat":"MMMM d, yyyy","dateFormatLocale":"ar","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"DragonTea","id":351087179,"baseUrl":"https://dragontea.ink","lang":"en","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/bbranchNamee/dart/manga/multisrc/madara/src/dragontea/icon.png","dateFormat":"MM/dd/yyyy","dateFormatLocale":"en_us","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Global Bloging","id":466045336,"baseUrl":"https://globalbloging.com","lang":"en","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/bbranchNamee/dart/manga/multisrc/madara/src/globalbloging/icon.png","dateFormat":"dd MMMM yyyy","dateFormatLocale":"en_us","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Manga347","id":32568759,"baseUrl":"https://manga347.com","lang":"en","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/bbranchNamee/dart/manga/multisrc/madara/src/manga347/icon.png","dateFormat":"d MMM, yyyy","dateFormatLocale":"en_us","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"MangaEffect","id":426231795,"baseUrl":"https://mangaeffect.com","lang":"en","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/bbranchNamee/dart/manga/multisrc/madara/src/mangaeffect/icon.png","dateFormat":"dd.MM.yyyy","dateFormatLocale":"en_us","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Manga-fast.com","id":304908872,"baseUrl":"https://manga-fast.com","lang":"en","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/bbranchNamee/dart/manga/multisrc/madara/src/mangafastcom/icon.png","dateFormat":"d MMMM'،' yyyy","dateFormatLocale":"en_us","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Manga Leveling","id":922449127,"baseUrl":"https://mangaleveling.com","lang":"en","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/bbranchNamee/dart/manga/multisrc/madara/src/mangaleveling/icon.png","dateFormat":"MM/dd/yyyy","dateFormatLocale":"en_us","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"NeatManga","id":481438951,"baseUrl":"https://neatmanga.com","lang":"en","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/bbranchNamee/dart/manga/multisrc/madara/src/neatmanga/icon.png","dateFormat":"dd MMM yyyy","dateFormatLocale":"en_us","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"NvManga","id":714716947,"baseUrl":"https://nvmanga.com","lang":"en","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/bbranchNamee/dart/manga/multisrc/madara/src/nvmanga/icon.png","dateFormat":"dd/MM/yyyy","dateFormatLocale":"en","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"PMScans","id":724822356,"baseUrl":"https://rackusreads.com","lang":"en","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/bbranchNamee/dart/manga/multisrc/madara/src/pmscans/icon.png","dateFormat":"dd/MM/yyyy","dateFormatLocale":"en","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"ReadManhua","id":406424746,"baseUrl":"https://readmanhua.net","lang":"en","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/bbranchNamee/dart/manga/multisrc/madara/src/readmanhua/icon.png","dateFormat":"dd MMM yyyy","dateFormatLocale":"en_us","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"StoneScape","id":611266903,"baseUrl":"https://stonescape.xyz","lang":"en","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/bbranchNamee/dart/manga/multisrc/madara/src/stonescape/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"en","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"TappyToon.Net","id":903184103,"baseUrl":"https://tappytoon.net","lang":"en","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/bbranchNamee/dart/manga/multisrc/madara/src/tappytoonnet/icon.png","dateFormat":"MMMM d, yyyy","dateFormatLocale":"en_us","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Zinmanga.net","id":656879510,"baseUrl":"https://zinmanga.net","lang":"en","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/bbranchNamee/dart/manga/multisrc/madara/src/zinmanganet/icon.png","dateFormat":"MM/dd/yyyy","dateFormatLocale":"en","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"BokugenTranslation","id":406916759,"baseUrl":"https://bokugents.com","lang":"es","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/bbranchNamee/dart/manga/multisrc/madara/src/bokugentranslation/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"es","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"DapRob","id":711981672,"baseUrl":"https://daprob.com","lang":"es","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/bbranchNamee/dart/manga/multisrc/madara/src/daprob/icon.png","dateFormat":"dd/MM/yyy","dateFormatLocale":"en","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"DeManhuas","id":563568870,"baseUrl":"https://demanhuas.com","lang":"es","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/bbranchNamee/dart/manga/multisrc/madara/src/demanhuas/icon.png","dateFormat":"MMMM d, yyyy","dateFormatLocale":"es","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"HerenScan","id":249889937,"baseUrl":"https://herenscan.com","lang":"es","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/bbranchNamee/dart/manga/multisrc/madara/src/herenscan/icon.png","dateFormat":"d 'de' MMM 'de' yyy","dateFormatLocale":"es","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"HouseMangas","id":767167238,"baseUrl":"https://housemangas.com","lang":"es","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/bbranchNamee/dart/manga/multisrc/madara/src/housemangas/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"es","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"InfraFandub","id":1007047649,"baseUrl":"https://infrafandub.com","lang":"es","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/bbranchNamee/dart/manga/multisrc/madara/src/infrafandub/icon.png","dateFormat":"dd/MM/yyyy","dateFormatLocale":"es","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Inmoral No Fansub","id":36533629,"baseUrl":"https://inmoralnofansub.xyz","lang":"es","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/bbranchNamee/dart/manga/multisrc/madara/src/inmoralnofansub/icon.png","dateFormat":"dd/MM/yyyy","dateFormatLocale":"es","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"JeazScans","id":340396217,"baseUrl":"https://jeazscansv2.com","lang":"es","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/bbranchNamee/dart/manga/multisrc/madara/src/jeazscans/icon.png","dateFormat":"d MMMM, yyyy","dateFormatLocale":"es","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Jobsibe","id":132907111,"baseUrl":"https://jobsibe.com","lang":"es","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/bbranchNamee/dart/manga/multisrc/madara/src/jobsibe/icon.png","dateFormat":"MMMM d, yyyy","dateFormatLocale":"es","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"LegnMangas","id":805195882,"baseUrl":"https://legnmangas.com","lang":"es","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/bbranchNamee/dart/manga/multisrc/madara/src/legendsnofansub/icon.png","dateFormat":"dd/MM/yyyy","dateFormatLocale":"es","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Manga Crab","id":830048268,"baseUrl":"https://visorcrab.com","lang":"es","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/bbranchNamee/dart/manga/multisrc/madara/src/mangacrab/icon.png","dateFormat":"dd/MM/yyyy","dateFormatLocale":"es","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Manga Fenix","id":533195191,"baseUrl":"https://manhua-fenix.com","lang":"es","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/mangafenix/icon.png","dateFormat":"dd MMMM, yyyy","dateFormatLocale":"es","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Mangas No Sekai","id":192331842,"baseUrl":"https://mangasnosekai.com","lang":"es","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/bbranchNamee/dart/manga/multisrc/madara/src/mangasnosekai/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"es","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Manhua Online","id":1013501577,"baseUrl":"https://blog.manhuaonline.org","lang":"es","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/bbranchNamee/dart/manga/multisrc/madara/src/manhuaonline/icon.png","dateFormat":"dd 'de' MMMM 'de' yyyy","dateFormatLocale":"es","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"MHScans","id":309079366,"baseUrl":"https://lectormh.com","lang":"es","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/bbranchNamee/dart/manga/multisrc/madara/src/mhscans/icon.png","dateFormat":"dd 'de' MMMM 'de' yyyy","dateFormatLocale":"es","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"MonarcaManga","id":677489943,"baseUrl":"https://monarcamanga.com","lang":"es","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/monarcamanga/icon.png","dateFormat":"MMM d, yyy","dateFormatLocale":"es","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Noblesse Translations","id":303973222,"baseUrl":"https://www.noblessev1.com","lang":"es","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/bbranchNamee/dart/manga/multisrc/madara/src/noblessetranslations/icon.png","dateFormat":"MMMM d, yyyy","dateFormatLocale":"es","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Prince Ediciones","id":23658821,"baseUrl":"https://princediciones.com","lang":"es","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/bbranchNamee/dart/manga/multisrc/madara/src/princediciones/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"es","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"SapphireScan","id":878724478,"baseUrl":"https://sapphirescan.com","lang":"es","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/bbranchNamee/dart/manga/multisrc/madara/src/sapphirescan/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"es","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Tres Daos Scan","id":278790017,"baseUrl":"https://tresdaos.com","lang":"es","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/bbranchNamee/dart/manga/multisrc/madara/src/tresdaosscan/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"es","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Unitoon","id":661103813,"baseUrl":"https://lectorunitoon.com","lang":"es","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/bbranchNamee/dart/manga/multisrc/madara/src/unitoon/icon.png","dateFormat":"dd/MM/yyyy","dateFormatLocale":"es","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Manga-Scantrad","id":686398626,"baseUrl":"https://manga-scantrad.io","lang":"fr","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/bbranchNamee/dart/manga/multisrc/madara/src/mangascantrad/icon.png","dateFormat":"d MMM yyyy","dateFormatLocale":"fr","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Mangas-Origines.fr","id":27886548,"baseUrl":"https://mangas-origines.fr","lang":"fr","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/bbranchNamee/dart/manga/multisrc/madara/src/mangasoriginesfr/icon.png","dateFormat":"dd/mm/yyyy","dateFormatLocale":"fr","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Raijin Scans","id":320342235,"baseUrl":"https://raijinscans.com","lang":"fr","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/bbranchNamee/dart/manga/multisrc/madara/src/raijinscans/icon.png","dateFormat":"dd/MM/yyyy","dateFormatLocale":"fr","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Reaper Scans","id":393303796,"baseUrl":"https://reaperscans.com","lang":"en","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/bbranchNamee/dart/manga/multisrc/madara/src/reaperscans/icon.png","dateFormat":"dd/MM/yyyy","dateFormatLocale":"en_us","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Soft Epsilon Scan","id":59479664,"baseUrl":"https://soft.epsilonscan.fr","lang":"fr","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/bbranchNamee/dart/manga/multisrc/madara/src/softepsilonscan/icon.png","dateFormat":"dd/MM/yy","dateFormatLocale":"fr","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Hwago","id":742688581,"baseUrl":"https://hwago.org","lang":"id","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/bbranchNamee/dart/manga/multisrc/madara/src/hwago/icon.png","dateFormat":"d MMMM yyyy","dateFormatLocale":"en","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"KlikManga","id":325512770,"baseUrl":"https://klikmanga.id","lang":"id","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/bbranchNamee/dart/manga/multisrc/madara/src/klikmanga/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"id","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Komikuzan","id":654623055,"baseUrl":"https://komikuzan.com","lang":"id","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/bbranchNamee/dart/manga/multisrc/madara/src/komikuzan/icon.png","dateFormat":"MMMM d, yyyy","dateFormatLocale":"id","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"MG Komik","id":336171225,"baseUrl":"https://mgkomik.id","lang":"id","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/bbranchNamee/dart/manga/multisrc/madara/src/mgkomik/icon.png","dateFormat":"dd MMM yy","dateFormatLocale":"en_us","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Siimanga","id":33515095,"baseUrl":"https://siimanga.cyou","lang":"id","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/bbranchNamee/dart/manga/multisrc/madara/src/siimanga/icon.png","dateFormat":"d MMMM","dateFormatLocale":"en","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Yubikiri","id":451585835,"baseUrl":"https://yubikiri.my.id","lang":"id","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/bbranchNamee/dart/manga/multisrc/madara/src/yubikiri/icon.png","dateFormat":"d MMMM","dateFormatLocale":"en","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"MangaHoNa","id":1046386661,"baseUrl":"https://mangahona.pl","lang":"pl","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/bbranchNamee/dart/manga/multisrc/madara/src/mangahona/icon.png","dateFormat":"yyyy-MM-dd","dateFormatLocale":"en","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Alone Scanlator","id":646262881,"baseUrl":"https://alonescanlator.com.br","lang":"pt-br","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/bbranchNamee/dart/manga/multisrc/madara/src/alonescanlator/icon.png","dateFormat":"dd/MM/yyyy","dateFormatLocale":"pt-br","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Boruto Explorer","id":824559648,"baseUrl":"https://leitor.borutoexplorer.com.br","lang":"pt-br","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/bbranchNamee/dart/manga/multisrc/madara/src/borutoexplorer/icon.png","dateFormat":"dd 'de' MMMMM 'de' yyyy","dateFormatLocale":"pt-br","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Crystal Comics","id":345759902,"baseUrl":"https://crystalcomics.com","lang":"pt-br","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/bbranchNamee/dart/manga/multisrc/madara/src/crystalcomics/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"pt-br","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Fay Scans","id":591914093,"baseUrl":"https://fayscans.net","lang":"pt-br","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/bbranchNamee/dart/manga/multisrc/madara/src/fayscans/icon.png","dateFormat":"dd/MM/yyyy","dateFormatLocale":"pt-br","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Galinha Samurai Scan","id":204589683,"baseUrl":"https://galinhasamurai.com","lang":"pt-br","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/bbranchNamee/dart/manga/multisrc/madara/src/galinhasamuraiscan/icon.png","dateFormat":"dd/MM/yyyy","dateFormatLocale":"pt-br","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Hikari Ga Nai","id":346017333,"baseUrl":"https://hikariganai.xyz","lang":"pt-br","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/bbranchNamee/dart/manga/multisrc/madara/src/hikariganai/icon.png","dateFormat":"d 'de' MMMM 'de' yyyy","dateFormatLocale":"pt-br","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Sagrado Império da Britannia","id":825744254,"baseUrl":"https://imperiodabritannia.com","lang":"pt-br","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/bbranchNamee/dart/manga/multisrc/madara/src/imperiodabritannia/icon.png","dateFormat":"dd 'de' MMMMM 'de' yyyy","dateFormatLocale":"pt-br","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Império Scans","id":721205416,"baseUrl":"https://imperioscans.com.br","lang":"pt-BR","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/imperioscans/icon.png","dateFormat":"dd/MM/yyyy","dateFormatLocale":"pt-br","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Leitor de Mangá","id":1053799132,"baseUrl":"https://leitordemanga.com","lang":"pt-br","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/bbranchNamee/dart/manga/multisrc/madara/src/leitordemanga/icon.png","dateFormat":"dd/MM/yyyy","dateFormatLocale":"pt-br","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"L Scans","id":1044801707,"baseUrl":"https://lscans.com","lang":"pt-br","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/bbranchNamee/dart/manga/multisrc/madara/src/lscans/icon.png","dateFormat":"dd/MM/yyyy","dateFormatLocale":"en","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Lunar Scan","id":912854479,"baseUrl":"https://lunarscan.com.br","lang":"pt-br","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/bbranchNamee/dart/manga/multisrc/madara/src/lunarscan/icon.png","dateFormat":"MMMMM dd, yyyy","dateFormatLocale":"pt-br","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"MiniTwo Scan","id":601012644,"baseUrl":"https://minitwoscan.com","lang":"pt-br","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/bbranchNamee/dart/manga/multisrc/madara/src/minitwoscan/icon.png","dateFormat":"dd/MM/yyyy","dateFormatLocale":"pt-br","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Nexo Scans","id":290544955,"baseUrl":"https://nexoscans.net","lang":"pt-br","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/bbranchNamee/dart/manga/multisrc/madara/src/nexoscans/icon.png","dateFormat":"dd/MM/yyyy","dateFormatLocale":"en_us","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Ninja Scan","id":334761951,"baseUrl":"https://ninjacomics.xyz","lang":"pt-br","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/bbranchNamee/dart/manga/multisrc/madara/src/ninjascan/icon.png","dateFormat":"dd 'de' MMMMM 'de' yyyy","dateFormatLocale":"pt-br","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"One Piece TECA","id":743484013,"baseUrl":"https://onepieceteca.com","lang":"pt-br","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/bbranchNamee/dart/manga/multisrc/madara/src/onepieceteca/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"pt-br","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Demon Sect","id":779027778,"baseUrl":"https://dsectcomics.org","lang":"pt-br","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/bbranchNamee/dart/manga/multisrc/madara/src/prismascans/icon.png","dateFormat":"MMMMM dd, yyyy","dateFormatLocale":"pt-br","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Sussy Scan","id":27850545,"baseUrl":"https://sussyscan.com","lang":"pt-br","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/bbranchNamee/dart/manga/multisrc/madara/src/sussyscan/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"pt-br","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Kings-Manga","id":247277818,"baseUrl":"https://www.kings-manga.co","lang":"th","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/bbranchNamee/dart/manga/multisrc/madara/src/kingsmanga/icon.png","dateFormat":"d MMMM yyyy","dateFormatLocale":"th","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"MangaDeemak","id":1013072878,"baseUrl":"https://mangadeemak.com","lang":"th","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/bbranchNamee/dart/manga/multisrc/madara/src/mangadeemak/icon.png","dateFormat":"d MMMM yyyy","dateFormatLocale":"th","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"ManhuaBug","id":1069870491,"baseUrl":"https://www.manhuabug.com","lang":"th","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/bbranchNamee/dart/manga/multisrc/madara/src/manhuabug/icon.png","dateFormat":"d MMMM yyyy","dateFormatLocale":"en","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"ManhuaThai","id":886909171,"baseUrl":"https://www.manhuathai.com","lang":"th","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/bbranchNamee/dart/manga/multisrc/madara/src/manhuathai/icon.png","dateFormat":"d MMMM yyyy","dateFormatLocale":"th","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"ManhwaBreakup","id":1042261128,"baseUrl":"https://www.manhwabreakup.com","lang":"th","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/bbranchNamee/dart/manga/multisrc/madara/src/manhwabreakup/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"th","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Atikrost","id":515012139,"baseUrl":"https://www.atikrost.com","lang":"tr","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/bbranchNamee/dart/manga/multisrc/madara/src/atikrost/icon.png","dateFormat":"d MMMM yyyy","dateFormatLocale":"tr","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"DiamondFansub","id":692477375,"baseUrl":"https://diamondfansub.com","lang":"tr","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/bbranchNamee/dart/manga/multisrc/madara/src/diamondfansub/icon.png","dateFormat":"d MMMM","dateFormatLocale":"tr-tr","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"EvaScans","id":439004766,"baseUrl":"https://evascans.com","lang":"tr","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/evascans/icon.png","dateFormat":"MMM d, yyy","dateFormatLocale":"tr","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Garcia Manga","id":839477218,"baseUrl":"https://garciamanga.com","lang":"tr","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/bbranchNamee/dart/manga/multisrc/madara/src/garciamanga/icon.png","dateFormat":"MMMM d, yyyy","dateFormatLocale":"tr","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"GuncelManga","id":344324216,"baseUrl":"https://guncelmanga.net","lang":"tr","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/bbranchNamee/dart/manga/multisrc/madara/src/guncelmanga/icon.png","dateFormat":"d MMMM yyyy","dateFormatLocale":"tr","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"LilyumFansub","id":987644367,"baseUrl":"https://lilyumfansub.com.tr","lang":"tr","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/bbranchNamee/dart/manga/multisrc/madara/src/lilyumfansub/icon.png","dateFormat":"MMMM dd yyyy","dateFormatLocale":"tr","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"MangaGezgini","id":384203300,"baseUrl":"https://mangagezgini.com","lang":"tr","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/bbranchNamee/dart/manga/multisrc/madara/src/mangagezgini/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"tr","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Manga Keyfi","id":90571537,"baseUrl":"https://mangakeyfi.net","lang":"tr","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/bbranchNamee/dart/manga/multisrc/madara/src/mangakeyfi/icon.png","dateFormat":"d MMM yyy","dateFormatLocale":"tr","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Manga Oku","id":118357555,"baseUrl":"https://mangaoku.info","lang":"tr","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/bbranchNamee/dart/manga/multisrc/madara/src/mangaoku/icon.png","dateFormat":"d MMMM yyyy","dateFormatLocale":"tr","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"MangaWOW","id":753316676,"baseUrl":"https://mangawow.org","lang":"tr","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/bbranchNamee/dart/manga/multisrc/madara/src/mangawow/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"tr","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Merlin Scans","id":766513760,"baseUrl":"https://merlinscans.com","lang":"tr","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/bbranchNamee/dart/manga/multisrc/madara/src/merlinscans/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"tr","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Rüya Manga","id":913158953,"baseUrl":"https://www.ruyamanga.com","lang":"tr","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/bbranchNamee/dart/manga/multisrc/madara/src/ruyamanga/icon.png","dateFormat":"dd/MM/yyyy","dateFormatLocale":"en","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Türkçe Manga Oku","id":1065180352,"baseUrl":"https://turkcemangaoku.com","lang":"tr","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/bbranchNamee/dart/manga/multisrc/madara/src/turkcemangaoku/icon.png","dateFormat":"d MMMM yyyy","dateFormatLocale":"tr","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Webtoon Hatti","id":790500497,"baseUrl":"https://webtoonhatti.net","lang":"tr","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/bbranchNamee/dart/manga/multisrc/madara/src/webtoonhatti/icon.png","dateFormat":"dd MMMM","dateFormatLocale":"tr","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Comick","id":370890607,"baseUrl":"https://comick.app","lang":"all","typeSource":"comick","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/comick/icon.png","dateFormat":"yyyy-MM-dd'T'HH:mm:ss'Z'","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/comick/comick.dart","apiUrl":"https://api.comick.fun","version":"0.0.75","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Comick","id":955190069,"baseUrl":"https://comick.app","lang":"en","typeSource":"comick","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/comick/icon.png","dateFormat":"yyyy-MM-dd'T'HH:mm:ss'Z'","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/comick/comick.dart","apiUrl":"https://api.comick.fun","version":"0.0.75","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Comick","id":494197461,"baseUrl":"https://comick.app","lang":"pt-br","typeSource":"comick","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/comick/icon.png","dateFormat":"yyyy-MM-dd'T'HH:mm:ss'Z'","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/comick/comick.dart","apiUrl":"https://api.comick.fun","version":"0.0.75","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Comick","id":1050814052,"baseUrl":"https://comick.app","lang":"ru","typeSource":"comick","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/comick/icon.png","dateFormat":"yyyy-MM-dd'T'HH:mm:ss'Z'","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/comick/comick.dart","apiUrl":"https://api.comick.fun","version":"0.0.75","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Comick","id":380505196,"baseUrl":"https://comick.app","lang":"fr","typeSource":"comick","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/comick/icon.png","dateFormat":"yyyy-MM-dd'T'HH:mm:ss'Z'","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/comick/comick.dart","apiUrl":"https://api.comick.fun","version":"0.0.75","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Comick","id":296390197,"baseUrl":"https://comick.app","lang":"es-419","typeSource":"comick","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/comick/icon.png","dateFormat":"yyyy-MM-dd'T'HH:mm:ss'Z'","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/comick/comick.dart","apiUrl":"https://api.comick.fun","version":"0.0.75","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Comick","id":242913014,"baseUrl":"https://comick.app","lang":"pl","typeSource":"comick","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/comick/icon.png","dateFormat":"yyyy-MM-dd'T'HH:mm:ss'Z'","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/comick/comick.dart","apiUrl":"https://api.comick.fun","version":"0.0.75","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Comick","id":507059585,"baseUrl":"https://comick.app","lang":"tr","typeSource":"comick","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/comick/icon.png","dateFormat":"yyyy-MM-dd'T'HH:mm:ss'Z'","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/comick/comick.dart","apiUrl":"https://api.comick.fun","version":"0.0.75","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Comick","id":851891714,"baseUrl":"https://comick.app","lang":"it","typeSource":"comick","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/comick/icon.png","dateFormat":"yyyy-MM-dd'T'HH:mm:ss'Z'","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/comick/comick.dart","apiUrl":"https://api.comick.fun","version":"0.0.75","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Comick","id":115169439,"baseUrl":"https://comick.app","lang":"es","typeSource":"comick","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/comick/icon.png","dateFormat":"yyyy-MM-dd'T'HH:mm:ss'Z'","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/comick/comick.dart","apiUrl":"https://api.comick.fun","version":"0.0.75","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Comick","id":719269008,"baseUrl":"https://comick.app","lang":"id","typeSource":"comick","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/comick/icon.png","dateFormat":"yyyy-MM-dd'T'HH:mm:ss'Z'","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/comick/comick.dart","apiUrl":"https://api.comick.fun","version":"0.0.75","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Comick","id":719759654,"baseUrl":"https://comick.app","lang":"hu","typeSource":"comick","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/comick/icon.png","dateFormat":"yyyy-MM-dd'T'HH:mm:ss'Z'","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/comick/comick.dart","apiUrl":"https://api.comick.fun","version":"0.0.75","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Comick","id":301477894,"baseUrl":"https://comick.app","lang":"vi","typeSource":"comick","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/comick/icon.png","dateFormat":"yyyy-MM-dd'T'HH:mm:ss'Z'","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/comick/comick.dart","apiUrl":"https://api.comick.fun","version":"0.0.75","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Comick","id":113594984,"baseUrl":"https://comick.app","lang":"zh-hk","typeSource":"comick","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/comick/icon.png","dateFormat":"yyyy-MM-dd'T'HH:mm:ss'Z'","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/comick/comick.dart","apiUrl":"https://api.comick.fun","version":"0.0.75","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Comick","id":602472856,"baseUrl":"https://comick.app","lang":"ar","typeSource":"comick","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/comick/icon.png","dateFormat":"yyyy-MM-dd'T'HH:mm:ss'Z'","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/comick/comick.dart","apiUrl":"https://api.comick.fun","version":"0.0.75","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Comick","id":401493183,"baseUrl":"https://comick.app","lang":"de","typeSource":"comick","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/comick/icon.png","dateFormat":"yyyy-MM-dd'T'HH:mm:ss'Z'","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/comick/comick.dart","apiUrl":"https://api.comick.fun","version":"0.0.75","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Comick","id":752155292,"baseUrl":"https://comick.app","lang":"zh","typeSource":"comick","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/comick/icon.png","dateFormat":"yyyy-MM-dd'T'HH:mm:ss'Z'","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/comick/comick.dart","apiUrl":"https://api.comick.fun","version":"0.0.75","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Comick","id":1069764002,"baseUrl":"https://comick.app","lang":"ca","typeSource":"comick","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/comick/icon.png","dateFormat":"yyyy-MM-dd'T'HH:mm:ss'Z'","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/comick/comick.dart","apiUrl":"https://api.comick.fun","version":"0.0.75","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Comick","id":678531099,"baseUrl":"https://comick.app","lang":"bg","typeSource":"comick","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/comick/icon.png","dateFormat":"yyyy-MM-dd'T'HH:mm:ss'Z'","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/comick/comick.dart","apiUrl":"https://api.comick.fun","version":"0.0.75","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Comick","id":311480598,"baseUrl":"https://comick.app","lang":"th","typeSource":"comick","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/comick/icon.png","dateFormat":"yyyy-MM-dd'T'HH:mm:ss'Z'","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/comick/comick.dart","apiUrl":"https://api.comick.fun","version":"0.0.75","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Comick","id":141560456,"baseUrl":"https://comick.app","lang":"fa","typeSource":"comick","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/comick/icon.png","dateFormat":"yyyy-MM-dd'T'HH:mm:ss'Z'","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/comick/comick.dart","apiUrl":"https://api.comick.fun","version":"0.0.75","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Comick","id":8261465,"baseUrl":"https://comick.app","lang":"uk","typeSource":"comick","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/comick/icon.png","dateFormat":"yyyy-MM-dd'T'HH:mm:ss'Z'","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/comick/comick.dart","apiUrl":"https://api.comick.fun","version":"0.0.75","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Comick","id":565474938,"baseUrl":"https://comick.app","lang":"mn","typeSource":"comick","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/comick/icon.png","dateFormat":"yyyy-MM-dd'T'HH:mm:ss'Z'","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/comick/comick.dart","apiUrl":"https://api.comick.fun","version":"0.0.75","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Comick","id":533803532,"baseUrl":"https://comick.app","lang":"ro","typeSource":"comick","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/comick/icon.png","dateFormat":"yyyy-MM-dd'T'HH:mm:ss'Z'","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/comick/comick.dart","apiUrl":"https://api.comick.fun","version":"0.0.75","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Comick","id":459976450,"baseUrl":"https://comick.app","lang":"he","typeSource":"comick","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/comick/icon.png","dateFormat":"yyyy-MM-dd'T'HH:mm:ss'Z'","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/comick/comick.dart","apiUrl":"https://api.comick.fun","version":"0.0.75","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Comick","id":375702775,"baseUrl":"https://comick.app","lang":"ms","typeSource":"comick","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/comick/icon.png","dateFormat":"yyyy-MM-dd'T'HH:mm:ss'Z'","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/comick/comick.dart","apiUrl":"https://api.comick.fun","version":"0.0.75","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Comick","id":737984097,"baseUrl":"https://comick.app","lang":"tl","typeSource":"comick","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/comick/icon.png","dateFormat":"yyyy-MM-dd'T'HH:mm:ss'Z'","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/comick/comick.dart","apiUrl":"https://api.comick.fun","version":"0.0.75","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Comick","id":796489006,"baseUrl":"https://comick.app","lang":"ja","typeSource":"comick","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/comick/icon.png","dateFormat":"yyyy-MM-dd'T'HH:mm:ss'Z'","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/comick/comick.dart","apiUrl":"https://api.comick.fun","version":"0.0.75","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Comick","id":683471552,"baseUrl":"https://comick.app","lang":"hi","typeSource":"comick","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/comick/icon.png","dateFormat":"yyyy-MM-dd'T'HH:mm:ss'Z'","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/comick/comick.dart","apiUrl":"https://api.comick.fun","version":"0.0.75","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Comick","id":778623467,"baseUrl":"https://comick.app","lang":"my","typeSource":"comick","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/comick/icon.png","dateFormat":"yyyy-MM-dd'T'HH:mm:ss'Z'","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/comick/comick.dart","apiUrl":"https://api.comick.fun","version":"0.0.75","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Comick","id":1065236294,"baseUrl":"https://comick.app","lang":"ko","typeSource":"comick","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/comick/icon.png","dateFormat":"yyyy-MM-dd'T'HH:mm:ss'Z'","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/comick/comick.dart","apiUrl":"https://api.comick.fun","version":"0.0.75","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Comick","id":422767524,"baseUrl":"https://comick.app","lang":"cs","typeSource":"comick","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/comick/icon.png","dateFormat":"yyyy-MM-dd'T'HH:mm:ss'Z'","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/comick/comick.dart","apiUrl":"https://api.comick.fun","version":"0.0.75","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Comick","id":678647945,"baseUrl":"https://comick.app","lang":"pt","typeSource":"comick","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/comick/icon.png","dateFormat":"yyyy-MM-dd'T'HH:mm:ss'Z'","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/comick/comick.dart","apiUrl":"https://api.comick.fun","version":"0.0.75","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Comick","id":698202010,"baseUrl":"https://comick.app","lang":"nl","typeSource":"comick","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/comick/icon.png","dateFormat":"yyyy-MM-dd'T'HH:mm:ss'Z'","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/comick/comick.dart","apiUrl":"https://api.comick.fun","version":"0.0.75","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Comick","id":359879447,"baseUrl":"https://comick.app","lang":"sv","typeSource":"comick","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/comick/icon.png","dateFormat":"yyyy-MM-dd'T'HH:mm:ss'Z'","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/comick/comick.dart","apiUrl":"https://api.comick.fun","version":"0.0.75","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Comick","id":532878423,"baseUrl":"https://comick.app","lang":"bn","typeSource":"comick","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/comick/icon.png","dateFormat":"yyyy-MM-dd'T'HH:mm:ss'Z'","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/comick/comick.dart","apiUrl":"https://api.comick.fun","version":"0.0.75","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Comick","id":481504622,"baseUrl":"https://comick.app","lang":"no","typeSource":"comick","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/comick/icon.png","dateFormat":"yyyy-MM-dd'T'HH:mm:ss'Z'","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/comick/comick.dart","apiUrl":"https://api.comick.fun","version":"0.0.75","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Comick","id":112887841,"baseUrl":"https://comick.app","lang":"lt","typeSource":"comick","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/comick/icon.png","dateFormat":"yyyy-MM-dd'T'HH:mm:ss'Z'","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/comick/comick.dart","apiUrl":"https://api.comick.fun","version":"0.0.75","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Comick","id":824905526,"baseUrl":"https://comick.app","lang":"el","typeSource":"comick","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/comick/icon.png","dateFormat":"yyyy-MM-dd'T'HH:mm:ss'Z'","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/comick/comick.dart","apiUrl":"https://api.comick.fun","version":"0.0.75","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Comick","id":373675453,"baseUrl":"https://comick.app","lang":"sr","typeSource":"comick","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/comick/icon.png","dateFormat":"yyyy-MM-dd'T'HH:mm:ss'Z'","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/comick/comick.dart","apiUrl":"https://api.comick.fun","version":"0.0.75","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Comick","id":574420905,"baseUrl":"https://comick.app","lang":"da","typeSource":"comick","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/comick/icon.png","dateFormat":"yyyy-MM-dd'T'HH:mm:ss'Z'","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/comick/comick.dart","apiUrl":"https://api.comick.fun","version":"0.0.75","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"MangaDex","id":202373705,"baseUrl":"https://mangadex.org","lang":"ar","typeSource":"mangadex","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/mangadex/icon.png","dateFormat":"yyyy-MM-dd'T'HH:mm:ss+SSS","dateFormatLocale":"en_Us","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/mangadex/mangadex.dart","apiUrl":"https://api.mangadex.org","version":"0.0.9","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"MangaDex","id":860658373,"baseUrl":"https://mangadex.org","lang":"bn","typeSource":"mangadex","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/mangadex/icon.png","dateFormat":"yyyy-MM-dd'T'HH:mm:ss+SSS","dateFormatLocale":"en_Us","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/mangadex/mangadex.dart","apiUrl":"https://api.mangadex.org","version":"0.0.9","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"MangaDex","id":722270529,"baseUrl":"https://mangadex.org","lang":"bg","typeSource":"mangadex","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/mangadex/icon.png","dateFormat":"yyyy-MM-dd'T'HH:mm:ss+SSS","dateFormatLocale":"en_Us","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/mangadex/mangadex.dart","apiUrl":"https://api.mangadex.org","version":"0.0.9","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"MangaDex","id":978675083,"baseUrl":"https://mangadex.org","lang":"my","typeSource":"mangadex","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/mangadex/icon.png","dateFormat":"yyyy-MM-dd'T'HH:mm:ss+SSS","dateFormatLocale":"en_Us","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/mangadex/mangadex.dart","apiUrl":"https://api.mangadex.org","version":"0.0.9","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"MangaDex","id":689496451,"baseUrl":"https://mangadex.org","lang":"ca","typeSource":"mangadex","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/mangadex/icon.png","dateFormat":"yyyy-MM-dd'T'HH:mm:ss+SSS","dateFormatLocale":"en_Us","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/mangadex/mangadex.dart","apiUrl":"https://api.mangadex.org","version":"0.0.9","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"MangaDex","id":593575397,"baseUrl":"https://mangadex.org","lang":"zh","typeSource":"mangadex","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/mangadex/icon.png","dateFormat":"yyyy-MM-dd'T'HH:mm:ss+SSS","dateFormatLocale":"en_Us","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/mangadex/mangadex.dart","apiUrl":"https://api.mangadex.org","version":"0.0.9","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"MangaDex","id":115179159,"baseUrl":"https://mangadex.org","lang":"zh-hk","typeSource":"mangadex","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/mangadex/icon.png","dateFormat":"yyyy-MM-dd'T'HH:mm:ss+SSS","dateFormatLocale":"en_Us","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/mangadex/mangadex.dart","apiUrl":"https://api.mangadex.org","version":"0.0.9","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"MangaDex","id":869144666,"baseUrl":"https://mangadex.org","lang":"cs","typeSource":"mangadex","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/mangadex/icon.png","dateFormat":"yyyy-MM-dd'T'HH:mm:ss+SSS","dateFormatLocale":"en_Us","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/mangadex/mangadex.dart","apiUrl":"https://api.mangadex.org","version":"0.0.9","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"MangaDex","id":846142909,"baseUrl":"https://mangadex.org","lang":"da","typeSource":"mangadex","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/mangadex/icon.png","dateFormat":"yyyy-MM-dd'T'HH:mm:ss+SSS","dateFormatLocale":"en_Us","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/mangadex/mangadex.dart","apiUrl":"https://api.mangadex.org","version":"0.0.9","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"MangaDex","id":841149659,"baseUrl":"https://mangadex.org","lang":"nl","typeSource":"mangadex","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/mangadex/icon.png","dateFormat":"yyyy-MM-dd'T'HH:mm:ss+SSS","dateFormatLocale":"en_Us","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/mangadex/mangadex.dart","apiUrl":"https://api.mangadex.org","version":"0.0.9","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"MangaDex","id":810342358,"baseUrl":"https://mangadex.org","lang":"en","typeSource":"mangadex","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/mangadex/icon.png","dateFormat":"yyyy-MM-dd'T'HH:mm:ss+SSS","dateFormatLocale":"en_Us","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/mangadex/mangadex.dart","apiUrl":"https://api.mangadex.org","version":"0.0.9","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"MangaDex","id":309024312,"baseUrl":"https://mangadex.org","lang":"tl","typeSource":"mangadex","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/mangadex/icon.png","dateFormat":"yyyy-MM-dd'T'HH:mm:ss+SSS","dateFormatLocale":"en_Us","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/mangadex/mangadex.dart","apiUrl":"https://api.mangadex.org","version":"0.0.9","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"MangaDex","id":164642544,"baseUrl":"https://mangadex.org","lang":"fi","typeSource":"mangadex","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/mangadex/icon.png","dateFormat":"yyyy-MM-dd'T'HH:mm:ss+SSS","dateFormatLocale":"en_Us","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/mangadex/mangadex.dart","apiUrl":"https://api.mangadex.org","version":"0.0.9","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"MangaDex","id":545017689,"baseUrl":"https://mangadex.org","lang":"fr","typeSource":"mangadex","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/mangadex/icon.png","dateFormat":"yyyy-MM-dd'T'HH:mm:ss+SSS","dateFormatLocale":"en_Us","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/mangadex/mangadex.dart","apiUrl":"https://api.mangadex.org","version":"0.0.9","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"MangaDex","id":110023605,"baseUrl":"https://mangadex.org","lang":"de","typeSource":"mangadex","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/mangadex/icon.png","dateFormat":"yyyy-MM-dd'T'HH:mm:ss+SSS","dateFormatLocale":"en_Us","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/mangadex/mangadex.dart","apiUrl":"https://api.mangadex.org","version":"0.0.9","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"MangaDex","id":767687578,"baseUrl":"https://mangadex.org","lang":"el","typeSource":"mangadex","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/mangadex/icon.png","dateFormat":"yyyy-MM-dd'T'HH:mm:ss+SSS","dateFormatLocale":"en_Us","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/mangadex/mangadex.dart","apiUrl":"https://api.mangadex.org","version":"0.0.9","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"MangaDex","id":511907642,"baseUrl":"https://mangadex.org","lang":"he","typeSource":"mangadex","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/mangadex/icon.png","dateFormat":"yyyy-MM-dd'T'HH:mm:ss+SSS","dateFormatLocale":"en_Us","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/mangadex/mangadex.dart","apiUrl":"https://api.mangadex.org","version":"0.0.9","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"MangaDex","id":986826068,"baseUrl":"https://mangadex.org","lang":"hi","typeSource":"mangadex","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/mangadex/icon.png","dateFormat":"yyyy-MM-dd'T'HH:mm:ss+SSS","dateFormatLocale":"en_Us","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/mangadex/mangadex.dart","apiUrl":"https://api.mangadex.org","version":"0.0.9","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"MangaDex","id":128441350,"baseUrl":"https://mangadex.org","lang":"hu","typeSource":"mangadex","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/mangadex/icon.png","dateFormat":"yyyy-MM-dd'T'HH:mm:ss+SSS","dateFormatLocale":"en_Us","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/mangadex/mangadex.dart","apiUrl":"https://api.mangadex.org","version":"0.0.9","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"MangaDex","id":183977130,"baseUrl":"https://mangadex.org","lang":"id","typeSource":"mangadex","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/mangadex/icon.png","dateFormat":"yyyy-MM-dd'T'HH:mm:ss+SSS","dateFormatLocale":"en_Us","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/mangadex/mangadex.dart","apiUrl":"https://api.mangadex.org","version":"0.0.9","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"MangaDex","id":127887438,"baseUrl":"https://mangadex.org","lang":"it","typeSource":"mangadex","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/mangadex/icon.png","dateFormat":"yyyy-MM-dd'T'HH:mm:ss+SSS","dateFormatLocale":"en_Us","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/mangadex/mangadex.dart","apiUrl":"https://api.mangadex.org","version":"0.0.9","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"MangaDex","id":204112007,"baseUrl":"https://mangadex.org","lang":"ja","typeSource":"mangadex","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/mangadex/icon.png","dateFormat":"yyyy-MM-dd'T'HH:mm:ss+SSS","dateFormatLocale":"en_Us","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/mangadex/mangadex.dart","apiUrl":"https://api.mangadex.org","version":"0.0.9","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"MangaDex","id":1063442064,"baseUrl":"https://mangadex.org","lang":"kk","typeSource":"mangadex","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/mangadex/icon.png","dateFormat":"yyyy-MM-dd'T'HH:mm:ss+SSS","dateFormatLocale":"en_Us","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/mangadex/mangadex.dart","apiUrl":"https://api.mangadex.org","version":"0.0.9","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"MangaDex","id":898061477,"baseUrl":"https://mangadex.org","lang":"ko","typeSource":"mangadex","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/mangadex/icon.png","dateFormat":"yyyy-MM-dd'T'HH:mm:ss+SSS","dateFormatLocale":"en_Us","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/mangadex/mangadex.dart","apiUrl":"https://api.mangadex.org","version":"0.0.9","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"MangaDex","id":387646759,"baseUrl":"https://mangadex.org","lang":"la","typeSource":"mangadex","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/mangadex/icon.png","dateFormat":"yyyy-MM-dd'T'HH:mm:ss+SSS","dateFormatLocale":"en_Us","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/mangadex/mangadex.dart","apiUrl":"https://api.mangadex.org","version":"0.0.9","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"MangaDex","id":270482698,"baseUrl":"https://mangadex.org","lang":"lt","typeSource":"mangadex","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/mangadex/icon.png","dateFormat":"yyyy-MM-dd'T'HH:mm:ss+SSS","dateFormatLocale":"en_Us","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/mangadex/mangadex.dart","apiUrl":"https://api.mangadex.org","version":"0.0.9","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"MangaDex","id":284400542,"baseUrl":"https://mangadex.org","lang":"ms","typeSource":"mangadex","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/mangadex/icon.png","dateFormat":"yyyy-MM-dd'T'HH:mm:ss+SSS","dateFormatLocale":"en_Us","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/mangadex/mangadex.dart","apiUrl":"https://api.mangadex.org","version":"0.0.9","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"MangaDex","id":525041874,"baseUrl":"https://mangadex.org","lang":"mn","typeSource":"mangadex","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/mangadex/icon.png","dateFormat":"yyyy-MM-dd'T'HH:mm:ss+SSS","dateFormatLocale":"en_Us","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/mangadex/mangadex.dart","apiUrl":"https://api.mangadex.org","version":"0.0.9","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"MangaDex","id":613632949,"baseUrl":"https://mangadex.org","lang":"ne","typeSource":"mangadex","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/mangadex/icon.png","dateFormat":"yyyy-MM-dd'T'HH:mm:ss+SSS","dateFormatLocale":"en_Us","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/mangadex/mangadex.dart","apiUrl":"https://api.mangadex.org","version":"0.0.9","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"MangaDex","id":441032670,"baseUrl":"https://mangadex.org","lang":"no","typeSource":"mangadex","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/mangadex/icon.png","dateFormat":"yyyy-MM-dd'T'HH:mm:ss+SSS","dateFormatLocale":"en_Us","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/mangadex/mangadex.dart","apiUrl":"https://api.mangadex.org","version":"0.0.9","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"MangaDex","id":693311514,"baseUrl":"https://mangadex.org","lang":"fa","typeSource":"mangadex","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/mangadex/icon.png","dateFormat":"yyyy-MM-dd'T'HH:mm:ss+SSS","dateFormatLocale":"en_Us","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/mangadex/mangadex.dart","apiUrl":"https://api.mangadex.org","version":"0.0.9","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"MangaDex","id":683661227,"baseUrl":"https://mangadex.org","lang":"pl","typeSource":"mangadex","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/mangadex/icon.png","dateFormat":"yyyy-MM-dd'T'HH:mm:ss+SSS","dateFormatLocale":"en_Us","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/mangadex/mangadex.dart","apiUrl":"https://api.mangadex.org","version":"0.0.9","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"MangaDex","id":417850874,"baseUrl":"https://mangadex.org","lang":"pt-br","typeSource":"mangadex","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/mangadex/icon.png","dateFormat":"yyyy-MM-dd'T'HH:mm:ss+SSS","dateFormatLocale":"en_Us","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/mangadex/mangadex.dart","apiUrl":"https://api.mangadex.org","version":"0.0.9","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"MangaDex","id":1027115198,"baseUrl":"https://mangadex.org","lang":"pt","typeSource":"mangadex","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/mangadex/icon.png","dateFormat":"yyyy-MM-dd'T'HH:mm:ss+SSS","dateFormatLocale":"en_Us","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/mangadex/mangadex.dart","apiUrl":"https://api.mangadex.org","version":"0.0.9","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"MangaDex","id":399589398,"baseUrl":"https://mangadex.org","lang":"ro","typeSource":"mangadex","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/mangadex/icon.png","dateFormat":"yyyy-MM-dd'T'HH:mm:ss+SSS","dateFormatLocale":"en_Us","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/mangadex/mangadex.dart","apiUrl":"https://api.mangadex.org","version":"0.0.9","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"MangaDex","id":367421943,"baseUrl":"https://mangadex.org","lang":"ru","typeSource":"mangadex","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/mangadex/icon.png","dateFormat":"yyyy-MM-dd'T'HH:mm:ss+SSS","dateFormatLocale":"en_Us","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/mangadex/mangadex.dart","apiUrl":"https://api.mangadex.org","version":"0.0.9","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"MangaDex","id":254140838,"baseUrl":"https://mangadex.org","lang":"sh","typeSource":"mangadex","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/mangadex/icon.png","dateFormat":"yyyy-MM-dd'T'HH:mm:ss+SSS","dateFormatLocale":"en_Us","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/mangadex/mangadex.dart","apiUrl":"https://api.mangadex.org","version":"0.0.9","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"MangaDex","id":823535267,"baseUrl":"https://mangadex.org","lang":"es-419","typeSource":"mangadex","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/mangadex/icon.png","dateFormat":"yyyy-MM-dd'T'HH:mm:ss+SSS","dateFormatLocale":"en_Us","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/mangadex/mangadex.dart","apiUrl":"https://api.mangadex.org","version":"0.0.9","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"MangaDex","id":736630443,"baseUrl":"https://mangadex.org","lang":"es","typeSource":"mangadex","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/mangadex/icon.png","dateFormat":"yyyy-MM-dd'T'HH:mm:ss+SSS","dateFormatLocale":"en_Us","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/mangadex/mangadex.dart","apiUrl":"https://api.mangadex.org","version":"0.0.9","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"MangaDex","id":146351677,"baseUrl":"https://mangadex.org","lang":"sv","typeSource":"mangadex","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/mangadex/icon.png","dateFormat":"yyyy-MM-dd'T'HH:mm:ss+SSS","dateFormatLocale":"en_Us","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/mangadex/mangadex.dart","apiUrl":"https://api.mangadex.org","version":"0.0.9","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"MangaDex","id":739930809,"baseUrl":"https://mangadex.org","lang":"ta","typeSource":"mangadex","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/mangadex/icon.png","dateFormat":"yyyy-MM-dd'T'HH:mm:ss+SSS","dateFormatLocale":"en_Us","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/mangadex/mangadex.dart","apiUrl":"https://api.mangadex.org","version":"0.0.9","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"MangaDex","id":385031783,"baseUrl":"https://mangadex.org","lang":"th","typeSource":"mangadex","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/mangadex/icon.png","dateFormat":"yyyy-MM-dd'T'HH:mm:ss+SSS","dateFormatLocale":"en_Us","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/mangadex/mangadex.dart","apiUrl":"https://api.mangadex.org","version":"0.0.9","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"MangaDex","id":1008587213,"baseUrl":"https://mangadex.org","lang":"tr","typeSource":"mangadex","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/mangadex/icon.png","dateFormat":"yyyy-MM-dd'T'HH:mm:ss+SSS","dateFormatLocale":"en_Us","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/mangadex/mangadex.dart","apiUrl":"https://api.mangadex.org","version":"0.0.9","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"MangaDex","id":778357609,"baseUrl":"https://mangadex.org","lang":"uk","typeSource":"mangadex","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/mangadex/icon.png","dateFormat":"yyyy-MM-dd'T'HH:mm:ss+SSS","dateFormatLocale":"en_Us","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/mangadex/mangadex.dart","apiUrl":"https://api.mangadex.org","version":"0.0.9","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"MangaDex","id":88174952,"baseUrl":"https://mangadex.org","lang":"vi","typeSource":"mangadex","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/mangadex/icon.png","dateFormat":"yyyy-MM-dd'T'HH:mm:ss+SSS","dateFormatLocale":"en_Us","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/mangadex/mangadex.dart","apiUrl":"https://api.mangadex.org","version":"0.0.9","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Beast Scans","id":1051043161,"baseUrl":"https://beast-scans.com","lang":"ar","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/beastscans/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"ar","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Lelmanga","id":35877276,"baseUrl":"https://www.lelmanga.com","lang":"fr","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/lelmanga/icon.png","dateFormat":"MMMM d, yyyy","dateFormatLocale":"en","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Asura Scans","id":524070078,"baseUrl":"https://asuratoon.com/","lang":"en","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/asurascans/icon.png","dateFormat":"MMM d, yyyy","dateFormatLocale":"en_us","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"KomikLab Scans","id":932554594,"baseUrl":"https://komiklab.com","lang":"en","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/komiklab/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"en_us","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Azure Scans","id":316512590,"baseUrl":"https://azuremanga.com","lang":"en","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/azurescans/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"en_us","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Cosmic Scans","id":938687459,"baseUrl":"https://cosmicscans.com","lang":"en","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/cosmicscans/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"en_us","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"CosmicScans.id","id":1053293978,"baseUrl":"https://cosmicscans.id","lang":"id","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/cosmicscansid/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"en_us","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"DuniaKomik.id","id":326969052,"baseUrl":"https://duniakomik.id","lang":"id","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/duniakomikid/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"id","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Gecenin Lordu","id":622207049,"baseUrl":"https://geceninlordu.com","lang":"tr","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/geceninlordu/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"en_us","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Infernal Void Scans","id":460393112,"baseUrl":"https://void-scans.com","lang":"en","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/infernalvoidscans/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"en_us","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"KataKomik","id":61302571,"baseUrl":"https://katakomik.online","lang":"id","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/katakomik/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"en_us","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Komik Station","id":866615506,"baseUrl":"https://komikstation.co","lang":"id","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/komikstation/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"id","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"KomikMama","id":148959602,"baseUrl":"https://komikmama.co","lang":"id","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/komikmama/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"id","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Komiku.com","id":869906392,"baseUrl":"https://komiku.com","lang":"id","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/komikucom/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"id","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Magus Manga","id":487156426,"baseUrl":"https://magusmanga.com","lang":"ar","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/magusmanga/icon.png","dateFormat":"MMMMM d, yyyy","dateFormatLocale":"ar","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Manga Indo.me","id":425166803,"baseUrl":"https://mangaindo.me","lang":"id","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/mangaindome/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"en_us","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Mangacim","id":642410916,"baseUrl":"https://www.mangacim.com","lang":"tr","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/mangacim/icon.png","dateFormat":"MMM d, yyy","dateFormatLocale":"tr","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"MangaTale","id":343986734,"baseUrl":"https://mangatale.co","lang":"id","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/mangatale/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"id","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"MangaWT","id":1014190199,"baseUrl":"https://mangawt.com","lang":"tr","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/mangawt/icon.png","dateFormat":"MMM d, yyyy","dateFormatLocale":"tr","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"MELOKOMIK","id":532392938,"baseUrl":"https://melokomik.xyz","lang":"id","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/melokomik/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"id","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Origami Orpheans","id":261849744,"baseUrl":"https://origami-orpheans.com.br","lang":"pt-br","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/origamiorpheans/icon.png","dateFormat":"MMMMM dd, yyyy","dateFormatLocale":"pt-br","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"PhenixScans","id":984162065,"baseUrl":"https://phenixscans.fr","lang":"fr","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/phenixscans/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"fr","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Pi Scans","id":548699583,"baseUrl":"https://piscans.in","lang":"id","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/piscans/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"en_us","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Raiki Scan","id":550138305,"baseUrl":"https://raikiscan.com","lang":"es","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/raikiscan/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"en_us","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Raven Scans","id":299682436,"baseUrl":"https://ravenscans.com","lang":"en","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/ravenscans/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"en_us","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Shadow Mangas","id":229424731,"baseUrl":"https://shadowmangas.com","lang":"es","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/shadowmangas/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"es","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Surya Scans","id":935389321,"baseUrl":"https://suryascans.com","lang":"en","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/suryascans/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"en_us","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Sushi-Scans","id":1036140988,"baseUrl":"https://sushiscan.fr","lang":"fr","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/sushiscans/icon.png","dateFormat":"MMMM d, yyyy","dateFormatLocale":"fr","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Sushi-Scan","id":972784612,"baseUrl":"https://sushiscan.net","lang":"fr","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/sushiscan/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"fr","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Tarot Scans","id":347606260,"baseUrl":"https://www.tarotscans.com","lang":"tr","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/tarotscans/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"tr","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"TukangKomik","id":884904192,"baseUrl":"https://tukangkomik.id","lang":"id","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/tukangkomik/icon.png","dateFormat":"MMM d, yyyy","dateFormatLocale":"tr","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"TurkToon","id":579681001,"baseUrl":"https://turktoon.com","lang":"tr","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/turktoon/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"en_us","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Uzay Manga","id":762273201,"baseUrl":"https://uzaymanga.com","lang":"tr","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/uzaymanga/icon.png","dateFormat":"MMM d, yyyy","dateFormatLocale":"tr","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"xCaliBR Scans","id":699314250,"baseUrl":"https://xcalibrscans.com","lang":"en","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/xcalibrscans/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"en_us","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Miau Scan","id":579641140,"baseUrl":"https://lectormiau.com","lang":"all","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/miauscan/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"es","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Thunder Scans","id":607210554,"baseUrl":"https://ar-thunderepic.com","lang":"all","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/thunderscans/icon.png","dateFormat":"MMM d, yyy","dateFormatLocale":"ar","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"أريا مانجا","id":101767587,"baseUrl":"https://www.areascans.net","lang":"ar","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/areamanga/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"ar","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Area Scans","id":215530388,"baseUrl":"https://ar.areascans.org","lang":"ar","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/areascans/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"ar","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"SCARManga","id":973665455,"baseUrl":"https://scarmanga.com","lang":"ar","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/aresnov/icon.png","dateFormat":"MMMMM dd, yyyy","dateFormatLocale":"ar","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Beast Scans","id":1051043161,"baseUrl":"https://beast-scans.com","lang":"ar","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/beastscans/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"ar","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Crow Scans","id":113863087,"baseUrl":"https://crowscans.com","lang":"ar","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/crowscans/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"ar","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"ARESManga","id":603318428,"baseUrl":"https://fl-ares.com","lang":"ar","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/iimanga/icon.png","dateFormat":"MMMMM dd, yyyy","dateFormatLocale":"ar","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Manga Flame","id":246146595,"baseUrl":"https://mangaflame.org","lang":"ar","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/mangaflame/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"ar","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"مانجا نون","id":360286753,"baseUrl":"https://manjanoon.org","lang":"ar","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/manganoon/icon.png","dateFormat":"MMM d, yyy","dateFormatLocale":"ar","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Manga Pro","id":349077648,"baseUrl":"https://mangapro.club","lang":"ar","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/mangapro/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"ar","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"MangaSwat","id":1022922869,"baseUrl":"https://normoyun.com","lang":"ar","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/mangaswat/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"ar","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"MangaTak","id":71223245,"baseUrl":"https://mangatak.com","lang":"ar","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/mangatak/icon.png","dateFormat":"MMMM DD, yyyy","dateFormatLocale":"ar","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"PotatoManga","id":833603780,"baseUrl":"https://ar.potatomanga.xyz","lang":"ar","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/potatomanga/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"ar","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"StellarSaber","id":719550729,"baseUrl":"https://stellarsaber.pro","lang":"ar","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/stellarsaber/icon.png","dateFormat":"MMMMM dd, yyyy","dateFormatLocale":"ar","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Rizz Comic","id":369389150,"baseUrl":"https://rizzfables.com","lang":"en","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/rizzcomic/icon.png","dateFormat":"dd MMM yyyy","dateFormatLocale":"en","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Berserker Scan","id":150485334,"baseUrl":"https://ragnascan.com","lang":"es","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/berserkerscan/icon.png","dateFormat":"MMMM d, yyyy","dateFormatLocale":"es","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Cartel de Manhwas","id":884854005,"baseUrl":"https://carteldemanhwas.com","lang":"es","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/carteldemanhwas/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"es","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"De Todo Un Poco Scan","id":843656091,"baseUrl":"https://dtupscan.com","lang":"es","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/dtupscan/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"es","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Gremory Mangas","id":643211287,"baseUrl":"https://gremorymangas.com","lang":"es","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/gremorymangas/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"es","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"RyujinManga","id":280926444,"baseUrl":"https://ryujinmanga.com","lang":"es","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/ryujinmanga/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"es","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Senpai Ediciones","id":483474103,"baseUrl":"https://senpaiediciones.com","lang":"es","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/senpaiediciones/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"es","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"SkyMangas","id":586822857,"baseUrl":"https://skymangas.com","lang":"es","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/skymangas/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"es","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Legacy Scans","id":310973833,"baseUrl":"https://legacy-scans.com","lang":"fr","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/flamescansfr/icon.png","dateFormat":"MMMM d, yyyy","dateFormatLocale":"fr","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Mangas Scans","id":10569804,"baseUrl":"https://mangas-scans.com","lang":"fr","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/mangasscans/icon.png","dateFormat":"MMMM d, yyyy","dateFormatLocale":"fr","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Rimu Scans","id":1062885024,"baseUrl":"https://rimuscans.fr","lang":"fr","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/rimuscans/icon.png","dateFormat":"MMMM d, yyyy","dateFormatLocale":"fr","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"VF Scan","id":66643810,"baseUrl":"https://www.vfscan.cc","lang":"fr","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/vfscan/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"fr","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Comicaso","id":408387886,"baseUrl":"https://comicaso.com","lang":"id","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/comicaso/icon.png","dateFormat":"MMMM d, yyyy","dateFormatLocale":"id","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Kiryuu","id":729634849,"baseUrl":"https://kiryuu.id","lang":"id","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/kiryuu/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"id","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"APKOMIK","id":851821537,"baseUrl":"https://apkomik.cc","lang":"id","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/komikav/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"id","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"KomikIndo.co","id":1029579773,"baseUrl":"https://komikindo.co","lang":"id","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/komikindoco/icon.png","dateFormat":"MMM dd, yyyy","dateFormatLocale":"id","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Mangakyo","id":350778130,"baseUrl":"https://mangakyo.vip","lang":"id","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/mangakyo/icon.png","dateFormat":"MMM d, yyyy","dateFormatLocale":"id","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"MangaYu","id":815037068,"baseUrl":"https://mangayu.id","lang":"id","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/mangayu/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"id","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Siren Komik","id":933724425,"baseUrl":"https://sirenkomik.my.id","lang":"id","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/mangkomik/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"id","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Tenshi.id","id":74634925,"baseUrl":"https://tenshi.id","lang":"id","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/masterkomik/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"id-id","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Natsu","id":539493591,"baseUrl":"https://natsu.id","lang":"id","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/natsu/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"id","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Shea Manga","id":732403984,"baseUrl":"https://sheakomik.com","lang":"id","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/sheamanga/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"id","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Shirakami","id":653518167,"baseUrl":"https://shirakami.xyz","lang":"id","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/shirakami/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"id","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Walpurgi Scan","id":83686844,"baseUrl":"https://www.walpurgiscan.it","lang":"it","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/walpurgisscan/icon.png","dateFormat":"MMM d, yyyy","dateFormatLocale":"it","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Diskus Scan","id":219319544,"baseUrl":"https://diskusscan.com","lang":"pt-br","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/diskusscan/icon.png","dateFormat":"MMMMM dd, yyyy","dateFormatLocale":"pt-br","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Iris Scanlator","id":627481975,"baseUrl":"https://irisscanlator.com.br","lang":"pt-br","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/irisscanlator/icon.png","dateFormat":"MMMM d, yyyy","dateFormatLocale":"pt-br","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Mangás Chan","id":413321827,"baseUrl":"https://mangaschan.net","lang":"pt-br","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/mangaschan/icon.png","dateFormat":"MMMMM dd, yyyy","dateFormatLocale":"pt-br","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Mangás Online","id":607918644,"baseUrl":"https://mangasonline.cc","lang":"pt-br","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/mangasonline/icon.png","dateFormat":"MMMMM dd, yyyy","dateFormatLocale":"pt-br","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"SSSScanlator","id":429559501,"baseUrl":"https://sssscanlator.com.br","lang":"pt-br","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/sssscanlator/icon.png","dateFormat":"MMMMM dd, yyyy","dateFormatLocale":"pt-br","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Tsundoku Traduções","id":958388028,"baseUrl":"https://tsundoku.com.br","lang":"pt-br","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/tsundokutraducoes/icon.png","dateFormat":"MMMMM d, yyyy","dateFormatLocale":"pt-br","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Manga-Moon","id":592572146,"baseUrl":"https://manga-moons.net","lang":"th","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/mangamoon/icon.png","dateFormat":"MMMM d, yyyy","dateFormatLocale":"th","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Adu Manga","id":278062325,"baseUrl":"https://www.mangacim.com","lang":"tr","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/adumanga/icon.png","dateFormat":"MMMM d, yyy","dateFormatLocale":"tr","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Afrodit Scans","id":589929789,"baseUrl":"https://afroditscans.com","lang":"tr","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/afroditscans/icon.png","dateFormat":"MMMM d, yyy","dateFormatLocale":"tr","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Athena Manga","id":279839170,"baseUrl":"https://athenamanga.com","lang":"tr","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/athenamanga/icon.png","dateFormat":"MMMM d, yyy","dateFormatLocale":"tr","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Gaiatoon","id":135821324,"baseUrl":"https://gaiatoon.com","lang":"tr","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/gaiatoon/icon.png","dateFormat":"MMMM d, yyy","dateFormatLocale":"tr","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"MajorScans","id":448604103,"baseUrl":"https://www.majorscans.com","lang":"tr","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/majorscans/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"tr","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Manga Efendisi","id":676269978,"baseUrl":"https://mangaefendisi.net","lang":"tr","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/mangaefendisi/icon.png","dateFormat":"MMMM d, yyyy","dateFormatLocale":"tr","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Manga Kings","id":550899403,"baseUrl":"https://mangakings.com.tr","lang":"tr","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/mangakings/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"tr","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Merlin Shoujo","id":487637789,"baseUrl":"https://merlinshoujo.com","lang":"tr","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/merlinshoujo/icon.png","dateFormat":"MMMM d, yyy","dateFormatLocale":"tr","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Nirvana Manga","id":212544702,"baseUrl":"https://nirvanamanga.com","lang":"tr","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/nirvanamanga/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"tr","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Pati Manga","id":170419301,"baseUrl":"https://www.patimanga.com","lang":"tr","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/patimanga/icon.png","dateFormat":"MMMM d, yyy","dateFormatLocale":"tr","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Raindrop Fansub","id":380323896,"baseUrl":"https://www.raindropteamfan.com","lang":"tr","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/raindropfansub/icon.png","dateFormat":"MMMM d, yyyy","dateFormatLocale":"tr","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Serein Scan","id":366839092,"baseUrl":"https://sereinscan.com","lang":"tr","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/sereinscan/icon.png","dateFormat":"MMM d, yyy","dateFormatLocale":"tr","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Shijie Scans","id":95172728,"baseUrl":"https://shijiescans.com","lang":"tr","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/shijiescans/icon.png","dateFormat":"MMM d, yyy","dateFormatLocale":"tr","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"SummerToon","id":297221652,"baseUrl":"https://summertoon.me","lang":"tr","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/summertoon/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"tr","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Zenith Scans","id":554003129,"baseUrl":"https://zenithscans.com","lang":"tr","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/zenithscans/icon.png","dateFormat":"MMM d, yyy","dateFormatLocale":"tr","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Scan VF","id":929253523,"baseUrl":"https://www.scan-vf.net","lang":"fr","typeSource":"mmrcms","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mmrcms/src/scanvf/icon.png","dateFormat":"d MMM. yyyy","dateFormatLocale":"en_us","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mmrcms/mmrcms.dart","apiUrl":"","version":"0.0.65","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Komikid","id":400330220,"baseUrl":"https://www.komikid.com","lang":"id","typeSource":"mmrcms","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mmrcms/src/komikid/icon.png","dateFormat":"d MMM. yyyy","dateFormatLocale":"en_us","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mmrcms/mmrcms.dart","apiUrl":"","version":"0.0.65","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"MangaID","id":181458486,"baseUrl":"https://mangaid.click","lang":"id","typeSource":"mmrcms","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mmrcms/src/mangaid/icon.png","dateFormat":"d MMM. yyyy","dateFormatLocale":"en_us","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mmrcms/mmrcms.dart","apiUrl":"","version":"0.0.65","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Jpmangas","id":1009609900,"baseUrl":"https://jpmangas.cc","lang":"fr","typeSource":"mmrcms","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mmrcms/src/jpmangas/icon.png","dateFormat":"d MMM. yyyy","dateFormatLocale":"en_us","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mmrcms/mmrcms.dart","apiUrl":"","version":"0.0.65","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"مانجا اون لاين","id":19018595,"baseUrl":"https://onma.top","lang":"ar","typeSource":"mmrcms","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mmrcms/src/onma/icon.png","dateFormat":"d MMM. yyyy","dateFormatLocale":"en_us","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mmrcms/mmrcms.dart","apiUrl":"","version":"0.0.65","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Read Comics Online","id":1021546729,"baseUrl":"https://readcomicsonline.ru","lang":"en","typeSource":"mmrcms","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mmrcms/src/readcomicsonline/icon.png","dateFormat":"d MMM. yyyy","dateFormatLocale":"en_us","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mmrcms/mmrcms.dart","apiUrl":"","version":"0.0.65","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Lelscan-VF","id":529915550,"baseUrl":"https://www.lelscanvf.cc/","lang":"fr","typeSource":"mmrcms","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mmrcms/src/lelscanvf/icon.png","dateFormat":"d MMM. yyyy","dateFormatLocale":"en_us","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mmrcms/mmrcms.dart","apiUrl":"","version":"0.0.65","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Manga-FR","id":410779276,"baseUrl":"https://manga-fr.me","lang":"fr","typeSource":"mmrcms","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mmrcms/src/mangafr/icon.png","dateFormat":"d MMM. yyyy","dateFormatLocale":"en_us","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mmrcms/mmrcms.dart","apiUrl":"","version":"0.0.65","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"MangaHere","id":434984458,"baseUrl":"http://www.mangahere.cc","lang":"en","typeSource":"single","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/en/mangahere/icon.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/en/mangahere/mangahere.dart","apiUrl":"","version":"0.0.7","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"MangaSee","id":531216751,"baseUrl":"https://mangasee123.com","lang":"en","typeSource":"nepnep","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/nepnep/src/mangasee/icon.png","dateFormat":"yyyy-MM-dd HH:mm:ss","dateFormatLocale":"en","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/nepnep/nepnep.dart","apiUrl":"","version":"0.0.65","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"MangaLife","id":434747478,"baseUrl":"https://manga4life.com","lang":"en","typeSource":"nepnep","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/nepnep/src/mangalife/icon.png","dateFormat":"yyyy-MM-dd HH:mm:ss","dateFormatLocale":"en","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/nepnep/nepnep.dart","apiUrl":"","version":"0.0.65","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Mangabat","id":658659024,"baseUrl":"https://m.mangabat.com","lang":"en","typeSource":"mangabox","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangabox/src/mangabat/icon.png","dateFormat":"MMM dd,yy","dateFormatLocale":"en","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangabox/mangabox.dart","apiUrl":"","version":"0.0.6","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Mangairo","id":119266018,"baseUrl":"https://h.mangairo.com","lang":"en","typeSource":"mangabox","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangabox/src/mangairo/icon.png","dateFormat":"MMM-dd-yy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangabox/mangabox.dart","apiUrl":"","version":"0.0.6","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Mangakakalot","id":1071729594,"baseUrl":"https://mangakakalot.com","lang":"en","typeSource":"mangabox","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangabox/src/mangakakalot/icon.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangabox/mangabox.dart","apiUrl":"","version":"0.0.6","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Manganato","id":796167348,"baseUrl":"https://manganato.com","lang":"en","typeSource":"mangabox","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangabox/src/manganato/icon.png","dateFormat":"MMM dd,yy","dateFormatLocale":"en","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangabox/mangabox.dart","apiUrl":"","version":"0.0.6","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"新新漫画","id":652112892,"baseUrl":"https://www.77mh.nl","lang":"zh","typeSource":"single","iconUrl":"https://www.77mh.nl/favicon.ico","dateFormat":"","dateFormatLocale":"","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/javascript/manga/src/zh/77mh.js","apiUrl":"","version":"0.0.25","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":1},{"name":"漫画DB","id":900808373,"baseUrl":"https://www.manhuadb.com","lang":"zh","typeSource":"single","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/javascript/icon/zh.manhuadb.png","dateFormat":"","dateFormatLocale":"","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/javascript/manga/src/zh/manhuadb.js","apiUrl":"","version":"0.0.25","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":1},{"name":"漫画柜","id":219867496,"baseUrl":"https://www.manhuagui.com","lang":"zh","typeSource":"single","iconUrl":"https://www.manhuagui.com/favicon.ico","dateFormat":"","dateFormatLocale":"","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/javascript/manga/src/zh/manhuagui.js","apiUrl":"","version":"0.0.25","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":1},{"name":"拷贝漫画","id":109412435,"baseUrl":"https://www.mangacopy.com","lang":"zh","typeSource":"single","iconUrl":"https://hi77-overseas.mangafuna.xyz/static/free.ico","dateFormat":"","dateFormatLocale":"","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/javascript/manga/src/zh/copymanga.js","apiUrl":"https://api.mangacopy.com","version":"0.0.2","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":1},{"name":"动漫之家","id":434793864,"baseUrl":"https://www.dmzj.com","lang":"zh","typeSource":"single","iconUrl":"https://www.dmzj.com/_nuxt/logo_dmzj.1c94014a.png","dateFormat":"","dateFormatLocale":"","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/javascript/manga/src/zh/dmzj.js","apiUrl":"","version":"0.0.25","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":1}] \ No newline at end of file +[{"name":"1st Kiss-Manga (unoriginal)","id":638504049,"baseUrl":"https://1stkiss-manga.com","lang":"en","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/firstkissdashmanga/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"en_us","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"AQUA Scans","id":1022584413,"baseUrl":"https://aquascans.com","lang":"en","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/manhwaworld/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"en_us","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Akuma no Tenshi","id":556872410,"baseUrl":"https://akumanotenshi.com","lang":"pt-BR","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/akumanotenshi/icon.png","dateFormat":"dd/MM/yyyy","dateFormatLocale":"pt-br","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Anikiga","id":554316969,"baseUrl":"https://anikiga.com","lang":"tr","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/anikiga/icon.png","dateFormat":"d MMMMM yyyy","dateFormatLocale":"tr","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"ArazNovel","id":966932111,"baseUrl":"https://www.araznovel.com","lang":"tr","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/araznovel/icon.png","dateFormat":"d MMMM yyyy","dateFormatLocale":"en","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Arthur Scan","id":678948853,"baseUrl":"https://arthurscan.xyz","lang":"pt-BR","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/arthurscan/icon.png","dateFormat":"MMMMM dd, yyyy","dateFormatLocale":"pt-br","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"AstralManga","id":1028022993,"baseUrl":"https://astral-manga.fr","lang":"fr","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/astralmanga/icon.png","dateFormat":"dd/mm/yyyy","dateFormatLocale":"fr","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Asura Scans.us (unoriginal)","id":586702086,"baseUrl":"https://asurascans.us","lang":"en","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/asurascansus/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"en_us","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"BarManga","id":627965453,"baseUrl":"https://barmanga.com","lang":"es","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/barmanga/icon.png","dateFormat":"MM/dd/yyyy","dateFormatLocale":"es","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"BestManga","id":926276360,"baseUrl":"https://bestmanga.club","lang":"ru","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/bestmanga/icon.png","dateFormat":"dd.MM.yyyy","dateFormatLocale":"ru","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Chibi Manga","id":105430403,"baseUrl":"https://www.cmreader.info","lang":"en","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/chibimanga/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"en_us","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Clover Manga","id":811523862,"baseUrl":"https://clover-manga.com","lang":"tr","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/clovermanga/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"tr","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Coco Rip","id":316931886,"baseUrl":"https://cocorip.net","lang":"es","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/cocorip/icon.png","dateFormat":"dd/MM/yyyy","dateFormatLocale":"es","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Coffee Manga","id":212388160,"baseUrl":"https://coffeemanga.io","lang":"en","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/coffeemanga/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"en_us","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Doodmanga","id":796439892,"baseUrl":"https://www.doodmanga.com","lang":"th","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/doodmanga/icon.png","dateFormat":"dd MMMMM yyyy","dateFormatLocale":"th","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Elite Manga","id":667501516,"baseUrl":"https://www.elitemanga.org","lang":"en","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/elitemanga/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"en_us","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Emperor Scan","id":21325920,"baseUrl":"https://emperorscan.com","lang":"es","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/emperorscan/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"es","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"EvaScans","id":439004766,"baseUrl":"https://evascans.com","lang":"tr","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/evascans/icon.png","dateFormat":"MMM d, yyy","dateFormatLocale":"tr","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"FR-Scan","id":669019889,"baseUrl":"https://fr-scan.com","lang":"fr","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/frscan/icon.png","dateFormat":"MMMM d, yyyy","dateFormatLocale":"fr","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"FactManga","id":956621361,"baseUrl":"https://factmanga.com","lang":"en","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/factmanga/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"en_us","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"FreeMangaTop","id":679915593,"baseUrl":"https://freemangatop.com","lang":"en","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/freemangatop/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"en_us","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Glory Manga","id":284318957,"baseUrl":"https://glorymanga.com","lang":"tr","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/glorymanga/icon.png","dateFormat":"dd/MM/yyy","dateFormatLocale":"tr","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Harimanga","id":178905360,"baseUrl":"https://harimanga.com","lang":"en","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/harimanga/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"en_us","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Immortal Updates","id":227459275,"baseUrl":"https://immortalupdates.com","lang":"en","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/immortalupdates/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"en_us","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Império Scans","id":721205416,"baseUrl":"https://imperioscans.com.br","lang":"pt-BR","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/imperioscans/icon.png","dateFormat":"dd/MM/yyyy","dateFormatLocale":"pt-br","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Inmortal Scan","id":809387434,"baseUrl":"https://manga.mundodrama.site","lang":"es","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/inmortalscan/icon.png","dateFormat":"MMMM d, yyyy","dateFormatLocale":"es","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"IsekaiScanManga (unoriginal)","id":775728183,"baseUrl":"https://isekaiscanmanga.com","lang":"en","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/isekaiscanmanga/icon.png","dateFormat":"dd MMM، yyyy","dateFormatLocale":"en_us","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Jimanga","id":773169340,"baseUrl":"https://jimanga.com","lang":"en","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/jimanga/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"en_us","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"KSGroupScans","id":374902680,"baseUrl":"https://ksgroupscans.com","lang":"en","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/ksgroupscans/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"en_us","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Kakusei Project","id":872023105,"baseUrl":"https://kakuseiproject.com.br","lang":"pt-BR","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/kakuseiproject/icon.png","dateFormat":"MMMMM dd, yyyy","dateFormatLocale":"pt-br","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Kami Sama Explorer","id":797019242,"baseUrl":"https://leitor.kamisama.com.br","lang":"pt-br","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/kamisamaexplorer/icon.png","dateFormat":"dd 'de' MMMM 'de' yyyy","dateFormatLocale":"pt-br","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Komik Chan","id":852383302,"baseUrl":"https://komikchan.com","lang":"en","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/komikchan/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"en_us","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"LHTranslation","id":21247797,"baseUrl":"https://lhtranslation.net","lang":"en","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/lhtranslation/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"en_us","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Lady Estelar Scan","id":987669145,"baseUrl":"https://ladyestelarscan.com.br","lang":"pt-BR","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/ladyestelarscan/icon.png","dateFormat":"dd/MM/yyyy","dateFormatLocale":"pt-br","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Leviatan Scans","id":280413449,"baseUrl":"https://lscomic.com","lang":"en","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/leviatanscans/icon.png","dateFormat":"MMM dd, yyyy","dateFormatLocale":"en_us","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Luffy Manga","id":797524700,"baseUrl":"https://luffymanga.com","lang":"en","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/luffymanga/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"en_us","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Maid Scan","id":931615028,"baseUrl":"https://maidscan.com.br","lang":"pt-BR","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/maidscan/icon.png","dateFormat":"dd 'de' MMMMM 'de' yyyy","dateFormatLocale":"pt-br","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Manga Diyari","id":531861751,"baseUrl":"https://manga-diyari.com","lang":"tr","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/mangadiyari/icon.png","dateFormat":"MMM dd, yyyy","dateFormatLocale":"tr","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Manga Fenix","id":533195191,"baseUrl":"https://manhua-fenix.com","lang":"es","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/mangafenix/icon.png","dateFormat":"dd MMMM, yyyy","dateFormatLocale":"es","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Manga Galaxy","id":935714707,"baseUrl":"https://mangagalaxy.me","lang":"en","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/mangagalaxy/icon.png","dateFormat":"MM/dd/yyyy","dateFormatLocale":"en_us","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Manga Read","id":256879643,"baseUrl":"https://mangaread.co","lang":"en","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/mangaread/icon.png","dateFormat":"yyyy-MM-dd","dateFormatLocale":"en_us","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Manga Tx.gg (unoriginal)","id":457634416,"baseUrl":"https://mangatx.gg","lang":"en","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/mangatxgg/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"en_us","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Manga Weebs","id":499853860,"baseUrl":"https://mangaweebs.in","lang":"en","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/mangaweebs/icon.png","dateFormat":"dd MMMM HH:mm","dateFormatLocale":"en_us","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Manga Şehri","id":865354788,"baseUrl":"https://mangasehri.com","lang":"tr","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/mangasehri/icon.png","dateFormat":"dd/MM/yyy","dateFormatLocale":"tr","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Manga-TX","id":382229208,"baseUrl":"https://manga-tx.com","lang":"en","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/mangatxunoriginal/icon.png","dateFormat":"MMM d, yyyy","dateFormatLocale":"en_us","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"MangaClash","id":1022665553,"baseUrl":"https://mangaclash.com","lang":"en","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/mangaclash/icon.png","dateFormat":"MM/dd/yy","dateFormatLocale":"en_us","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"MangaFreak.online","id":223793266,"baseUrl":"https://mangafreak.online","lang":"en","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/mangafreakonline/icon.png","dateFormat":"d MMMM، yyy","dateFormatLocale":"en_us","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"MangaGreat","id":1054806605,"baseUrl":"https://mangagreat.com","lang":"en","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/mangagreat/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"en_us","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"MangaKomi","id":396237578,"baseUrl":"https://mangakomi.io","lang":"en","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/mangakomi/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"en_us","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"MangaRead.org","id":120353492,"baseUrl":"https://www.mangaread.org","lang":"en","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/mangareadorg/icon.png","dateFormat":"dd.MM.yyy","dateFormatLocale":"en_us","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"MangaRolls","id":720109919,"baseUrl":"https://mangarolls.com","lang":"en","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/mangarolls/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"en_us","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"MangaTyrant","id":32333683,"baseUrl":"https://mangatyrant.com","lang":"en","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/mangatyrant/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"en_us","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"MangaUS","id":503871898,"baseUrl":"https://mangaus.xyz","lang":"en","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/mangaus/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"en_us","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Mangasushi","id":224429716,"baseUrl":"https://mangasushi.org","lang":"en","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/mangasushi/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"en_us","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Mangá Nanquim","id":92850584,"baseUrl":"https://mangananquim.com","lang":"pt-BR","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/mangananquim/icon.png","dateFormat":"dd 'de' MMMMM 'de' yyyy","dateFormatLocale":"pt-br","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Manhua ES","id":722532191,"baseUrl":"https://manhuaaz.com","lang":"en","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/manhuaes/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"en_us","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"ManhuaUS","id":802461663,"baseUrl":"https://manhuaus.com","lang":"en","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/manhuaus/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"en_us","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"ManhuaZone","id":751568949,"baseUrl":"https://manhuazone.org","lang":"en","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/manhuazone/icon.png","dateFormat":"MMM d, yyyy","dateFormatLocale":"en_us","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"ManhwaClan","id":668862828,"baseUrl":"https://manhwaclan.com","lang":"en","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/manhwaclan/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"en_us","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Manhwafull","id":316078751,"baseUrl":"https://manhwafull.com","lang":"en","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/manhwafull/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"en_us","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Mantraz Scan","id":919786495,"baseUrl":"https://mantrazscan.com","lang":"es","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/mantrazscan/icon.png","dateFormat":"dd/MM/yyyy","dateFormatLocale":"es","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Momo no Hana Scan","id":800496106,"baseUrl":"https://momonohanascan.com","lang":"pt-BR","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/momonohanascan/icon.png","dateFormat":"dd/MM/yyyy","dateFormatLocale":"pt-br","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"MonarcaManga","id":677489943,"baseUrl":"https://monarcamanga.com","lang":"es","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/monarcamanga/icon.png","dateFormat":"MMM d, yyy","dateFormatLocale":"es","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Moon Witch In Love","id":1023454168,"baseUrl":"https://moonwitchinlovescan.com","lang":"pt-BR","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/moonwitchinlove/icon.png","dateFormat":"dd 'de' MMMMM 'de' yyyy","dateFormatLocale":"pt-br","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"NekoPost.co (unoriginal)","id":68388394,"baseUrl":"https://www.nekopost.co","lang":"th","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/nekopostco/icon.png","dateFormat":"d MMMM yyyy","dateFormatLocale":"th","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Niji Translations","id":1040686830,"baseUrl":"https://niji-translations.com","lang":"ar","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/nijitranslations/icon.png","dateFormat":"","dateFormatLocale":"","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Pantheon Scan","id":722864118,"baseUrl":"https://pantheon-scan.com","lang":"fr","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/pantheonscan/icon.png","dateFormat":"d MMMM yyyy","dateFormatLocale":"fr","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Pojok Manga","id":620356987,"baseUrl":"https://pojokmanga.net","lang":"id","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/pojokmanga/icon.png","dateFormat":"MMM dd, yyyy","dateFormatLocale":"en_us","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Projeto Scanlator","id":1059909508,"baseUrl":"https://projetoscanlator.com","lang":"pt-BR","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/projetoscanlator/icon.png","dateFormat":"dd/MM/yyyy","dateFormatLocale":"pt-br","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"ROG Mangás","id":876053235,"baseUrl":"https://rogmangas.com","lang":"pt-BR","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/mangasoverall/icon.png","dateFormat":"dd/MM/yyyy","dateFormatLocale":"pt-br","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Ragnarok Scanlation","id":1045851788,"baseUrl":"https://ragnarokscanlation.com","lang":"es","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/ragnarokscanlation/icon.png","dateFormat":"MMMM d, yyyy","dateFormatLocale":"es","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Rainbow Fairy Scan","id":342232477,"baseUrl":"https://rainbowfairyscan.com","lang":"pt-BR","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/rainbowfairyscan/icon.png","dateFormat":"dd/MM/yyyy","dateFormatLocale":"pt-br","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Random Scan","id":608218815,"baseUrl":"https://randomscanlators.net","lang":"pt-BR","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/randomscan/icon.png","dateFormat":"MMMMM dd, yyyy","dateFormatLocale":"pt-br","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"ReaderGen","id":630253320,"baseUrl":"https://fr.readergen.fr","lang":"fr","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/readergen/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"en_us","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"RichtoScan","id":688713066,"baseUrl":"https://richtoscan.com","lang":"es","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/richtoscan/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"es","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Rightdark Scan","id":1015914849,"baseUrl":"https://rightdark-scan.com","lang":"es","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/rightdarkscan/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"es","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Rio2 Manga","id":110090511,"baseUrl":"https://rio2manga.com","lang":"en","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/rio2manga/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"en_us","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Romantik Manga","id":944131896,"baseUrl":"https://romantikmanga.com","lang":"tr","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/romantikmanga/icon.png","dateFormat":"MMM d, yyy","dateFormatLocale":"tr","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"S2Manga","id":763495726,"baseUrl":"https://www.s2manga.com","lang":"en","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/s2manga/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"en_us","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"SamuraiScan","id":76766511,"baseUrl":"https://samuraiscan.com","lang":"es","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/samuraiscan/icon.png","dateFormat":"MMMM d, yyyy","dateFormatLocale":"es","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"ScamberTraslator","id":774205343,"baseUrl":"https://scambertraslator.com","lang":"es","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/scambertraslator/icon.png","dateFormat":"dd/MM/yyyy","dateFormatLocale":"es","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Scantrad-VF","id":400350749,"baseUrl":"https://scantrad-vf.co","lang":"fr","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/scantradvf/icon.png","dateFormat":"d MMMM yyyy","dateFormatLocale":"fr","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Shadowtrad","id":171182128,"baseUrl":"https://shadowtrad.net","lang":"fr","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/shadowtrad/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"fr","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Shiba Manga","id":368209304,"baseUrl":"https://shibamanga.com","lang":"en","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/shibamanga/icon.png","dateFormat":"MM/dd/yyyy","dateFormatLocale":"en_us","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Sinensis Scan","id":874513309,"baseUrl":"https://sinensisscan.net","lang":"pt-BR","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/sinensis/icon.png","dateFormat":"dd/MM/yyyy","dateFormatLocale":"pt-br","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Sweet Time Scan","id":773665225,"baseUrl":"https://sweetscan.net","lang":"pt-BR","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/sweettimescan/icon.png","dateFormat":"MMMMM dd, yyyy","dateFormatLocale":"pt-br","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Tatakae Scan","id":296744306,"baseUrl":"https://tatakaescan.com","lang":"pt-BR","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/tatakaescan/icon.png","dateFormat":"dd 'de' MMMMM 'de' yyyy","dateFormatLocale":"pt-br","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Taurus Fansub","id":1036726988,"baseUrl":"https://taurusfansub.com","lang":"es","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/taurusfansub/icon.png","dateFormat":"dd/MM/yyy","dateFormatLocale":"es","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"The Beginning After The End","id":337822334,"baseUrl":"https://www.thebeginningaftertheend.fr","lang":"fr","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/thebeginningaftertheend/icon.png","dateFormat":"MMMMM dd, yyyy","dateFormatLocale":"fr","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Tortuga Ceviri","id":294602572,"baseUrl":"https://tortuga-ceviri.com","lang":"tr","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/tortugaceviri/icon.png","dateFormat":"MMMM d, yyyy","dateFormatLocale":"tr","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Wicked Witch Scan","id":679298799,"baseUrl":"https://wickedwitchscan.com","lang":"pt-BR","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/wickedwitchscan/icon.png","dateFormat":"MMMMM dd, yyyy","dateFormatLocale":"pt-br","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Winter Scan","id":455337571,"baseUrl":"https://winterscan.com","lang":"pt-BR","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/winterscan/icon.png","dateFormat":"dd 'de' MMMM 'de' yyyy","dateFormatLocale":"pt-br","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Wonderland Scan","id":867820989,"baseUrl":"https://wonderlandscan.com","lang":"pt-BR","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/wonderlandscan/icon.png","dateFormat":"dd/MM/yyyy","dateFormatLocale":"pt-br","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Yuri Verso","id":756257030,"baseUrl":"https://yuri.live","lang":"pt-br","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/yuriverso/icon.png","dateFormat":"dd/MM/yyyy","dateFormatLocale":"pt-br","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"فالكون مانجا","id":390316279,"baseUrl":"https://falconmanga.com","lang":"ar","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/falconmanga/icon.png","dateFormat":"","dateFormatLocale":"","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"مانجا العاشق","id":913767194,"baseUrl":"https://3asq.org","lang":"ar","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/manga3asq/icon.png","dateFormat":"","dateFormatLocale":"","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Grabber Zone","id":88668089,"baseUrl":"https://grabber.zone","lang":"all","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/bbranchNamee/dart/manga/multisrc/madara/src/grabberzone/icon.png","dateFormat":"dd.MM.yyyy","dateFormatLocale":"en","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Gatemanga","id":228457517,"baseUrl":"https://gatemanga.com","lang":"ar","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/bbranchNamee/dart/manga/multisrc/madara/src/gatemanga/icon.png","dateFormat":"d MMMM، yyyy","dateFormatLocale":"ar","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"GMANGA (unoriginal)","id":534385671,"baseUrl":"https://gmanga.site","lang":"ar","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/bbranchNamee/dart/manga/multisrc/madara/src/gmangasite/icon.png","dateFormat":"MMMM dd، yyyy","dateFormatLocale":"ar","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"مانجا لينك","id":933815485,"baseUrl":"https://manga-link.com","lang":"ar","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/bbranchNamee/dart/manga/multisrc/madara/src/mangalink/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"ar","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"MangaLionz","id":718647301,"baseUrl":"https://manga-lionz.com","lang":"ar","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/bbranchNamee/dart/manga/multisrc/madara/src/mangalionz/icon.png","dateFormat":"MMMM d, yyyy","dateFormatLocale":"ar","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Manga Rose","id":492075908,"baseUrl":"https://mangarose.net","lang":"ar","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/bbranchNamee/dart/manga/multisrc/madara/src/mangarose/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"ar","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"MangaSpark","id":498074514,"baseUrl":"https://manga-spark.net","lang":"ar","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/bbranchNamee/dart/manga/multisrc/madara/src/mangaspark/icon.png","dateFormat":"d MMMM، yyyy","dateFormatLocale":"ar","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Manga Starz","id":424368932,"baseUrl":"https://manga-starz.com","lang":"ar","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/bbranchNamee/dart/manga/multisrc/madara/src/mangastarz/icon.png","dateFormat":"d MMMM، yyyy","dateFormatLocale":"ar","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Manga Time","id":929842820,"baseUrl":"https://mangatime.us","lang":"ar","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/bbranchNamee/dart/manga/multisrc/madara/src/mangatime/icon.png","dateFormat":"dd MMMM، yyyy","dateFormatLocale":"ar","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Olaoe","id":765729692,"baseUrl":"https://olaoe.cyou","lang":"ar","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/bbranchNamee/dart/manga/multisrc/madara/src/olaoe/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"ar","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Rocks Manga","id":694856524,"baseUrl":"https://rocks-manga.com","lang":"ar","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/bbranchNamee/dart/manga/multisrc/madara/src/rocksmanga/icon.png","dateFormat":"MMMM d, yyyy","dateFormatLocale":"ar","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"DragonTea","id":351087179,"baseUrl":"https://dragontea.ink","lang":"en","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/bbranchNamee/dart/manga/multisrc/madara/src/dragontea/icon.png","dateFormat":"MM/dd/yyyy","dateFormatLocale":"en_us","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Global Bloging","id":466045336,"baseUrl":"https://globalbloging.com","lang":"en","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/bbranchNamee/dart/manga/multisrc/madara/src/globalbloging/icon.png","dateFormat":"dd MMMM yyyy","dateFormatLocale":"en_us","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Manga347","id":32568759,"baseUrl":"https://manga347.com","lang":"en","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/bbranchNamee/dart/manga/multisrc/madara/src/manga347/icon.png","dateFormat":"d MMM, yyyy","dateFormatLocale":"en_us","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"MangaEffect","id":426231795,"baseUrl":"https://mangaeffect.com","lang":"en","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/bbranchNamee/dart/manga/multisrc/madara/src/mangaeffect/icon.png","dateFormat":"dd.MM.yyyy","dateFormatLocale":"en_us","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Manga-fast.com","id":304908872,"baseUrl":"https://manga-fast.com","lang":"en","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/bbranchNamee/dart/manga/multisrc/madara/src/mangafastcom/icon.png","dateFormat":"d MMMM'،' yyyy","dateFormatLocale":"en_us","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Manga Leveling","id":922449127,"baseUrl":"https://mangaleveling.com","lang":"en","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/bbranchNamee/dart/manga/multisrc/madara/src/mangaleveling/icon.png","dateFormat":"MM/dd/yyyy","dateFormatLocale":"en_us","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"NeatManga","id":481438951,"baseUrl":"https://neatmanga.com","lang":"en","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/bbranchNamee/dart/manga/multisrc/madara/src/neatmanga/icon.png","dateFormat":"dd MMM yyyy","dateFormatLocale":"en_us","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"NvManga","id":714716947,"baseUrl":"https://nvmanga.com","lang":"en","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/bbranchNamee/dart/manga/multisrc/madara/src/nvmanga/icon.png","dateFormat":"dd/MM/yyyy","dateFormatLocale":"en","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"PMScans","id":724822356,"baseUrl":"https://rackusreads.com","lang":"en","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/bbranchNamee/dart/manga/multisrc/madara/src/pmscans/icon.png","dateFormat":"dd/MM/yyyy","dateFormatLocale":"en","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"ReadManhua","id":406424746,"baseUrl":"https://readmanhua.net","lang":"en","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/bbranchNamee/dart/manga/multisrc/madara/src/readmanhua/icon.png","dateFormat":"dd MMM yyyy","dateFormatLocale":"en_us","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"StoneScape","id":611266903,"baseUrl":"https://stonescape.xyz","lang":"en","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/bbranchNamee/dart/manga/multisrc/madara/src/stonescape/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"en","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"TappyToon.Net","id":903184103,"baseUrl":"https://tappytoon.net","lang":"en","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/bbranchNamee/dart/manga/multisrc/madara/src/tappytoonnet/icon.png","dateFormat":"MMMM d, yyyy","dateFormatLocale":"en_us","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Zinmanga.net","id":656879510,"baseUrl":"https://zinmanga.net","lang":"en","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/bbranchNamee/dart/manga/multisrc/madara/src/zinmanganet/icon.png","dateFormat":"MM/dd/yyyy","dateFormatLocale":"en","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"BokugenTranslation","id":406916759,"baseUrl":"https://bokugents.com","lang":"es","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/bbranchNamee/dart/manga/multisrc/madara/src/bokugentranslation/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"es","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"DapRob","id":711981672,"baseUrl":"https://daprob.com","lang":"es","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/bbranchNamee/dart/manga/multisrc/madara/src/daprob/icon.png","dateFormat":"dd/MM/yyy","dateFormatLocale":"en","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"DeManhuas","id":563568870,"baseUrl":"https://demanhuas.com","lang":"es","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/bbranchNamee/dart/manga/multisrc/madara/src/demanhuas/icon.png","dateFormat":"MMMM d, yyyy","dateFormatLocale":"es","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"HerenScan","id":249889937,"baseUrl":"https://herenscan.com","lang":"es","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/bbranchNamee/dart/manga/multisrc/madara/src/herenscan/icon.png","dateFormat":"d 'de' MMM 'de' yyy","dateFormatLocale":"es","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"HouseMangas","id":767167238,"baseUrl":"https://housemangas.com","lang":"es","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/bbranchNamee/dart/manga/multisrc/madara/src/housemangas/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"es","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"InfraFandub","id":1007047649,"baseUrl":"https://infrafandub.com","lang":"es","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/bbranchNamee/dart/manga/multisrc/madara/src/infrafandub/icon.png","dateFormat":"dd/MM/yyyy","dateFormatLocale":"es","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Inmoral No Fansub","id":36533629,"baseUrl":"https://inmoralnofansub.xyz","lang":"es","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/bbranchNamee/dart/manga/multisrc/madara/src/inmoralnofansub/icon.png","dateFormat":"dd/MM/yyyy","dateFormatLocale":"es","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"JeazScans","id":340396217,"baseUrl":"https://jeazscansv2.com","lang":"es","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/bbranchNamee/dart/manga/multisrc/madara/src/jeazscans/icon.png","dateFormat":"d MMMM, yyyy","dateFormatLocale":"es","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Jobsibe","id":132907111,"baseUrl":"https://jobsibe.com","lang":"es","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/bbranchNamee/dart/manga/multisrc/madara/src/jobsibe/icon.png","dateFormat":"MMMM d, yyyy","dateFormatLocale":"es","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"LegnMangas","id":805195882,"baseUrl":"https://legnmangas.com","lang":"es","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/bbranchNamee/dart/manga/multisrc/madara/src/legendsnofansub/icon.png","dateFormat":"dd/MM/yyyy","dateFormatLocale":"es","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Manga Crab","id":830048268,"baseUrl":"https://visorcrab.com","lang":"es","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/bbranchNamee/dart/manga/multisrc/madara/src/mangacrab/icon.png","dateFormat":"dd/MM/yyyy","dateFormatLocale":"es","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Manga Fenix","id":533195191,"baseUrl":"https://manhua-fenix.com","lang":"es","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/mangafenix/icon.png","dateFormat":"dd MMMM, yyyy","dateFormatLocale":"es","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Mangas No Sekai","id":192331842,"baseUrl":"https://mangasnosekai.com","lang":"es","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/bbranchNamee/dart/manga/multisrc/madara/src/mangasnosekai/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"es","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Manhua Online","id":1013501577,"baseUrl":"https://blog.manhuaonline.org","lang":"es","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/bbranchNamee/dart/manga/multisrc/madara/src/manhuaonline/icon.png","dateFormat":"dd 'de' MMMM 'de' yyyy","dateFormatLocale":"es","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"MHScans","id":309079366,"baseUrl":"https://lectormh.com","lang":"es","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/bbranchNamee/dart/manga/multisrc/madara/src/mhscans/icon.png","dateFormat":"dd 'de' MMMM 'de' yyyy","dateFormatLocale":"es","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"MonarcaManga","id":677489943,"baseUrl":"https://monarcamanga.com","lang":"es","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/monarcamanga/icon.png","dateFormat":"MMM d, yyy","dateFormatLocale":"es","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Noblesse Translations","id":303973222,"baseUrl":"https://www.noblessev1.com","lang":"es","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/bbranchNamee/dart/manga/multisrc/madara/src/noblessetranslations/icon.png","dateFormat":"MMMM d, yyyy","dateFormatLocale":"es","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Prince Ediciones","id":23658821,"baseUrl":"https://princediciones.com","lang":"es","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/bbranchNamee/dart/manga/multisrc/madara/src/princediciones/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"es","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"SapphireScan","id":878724478,"baseUrl":"https://sapphirescan.com","lang":"es","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/bbranchNamee/dart/manga/multisrc/madara/src/sapphirescan/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"es","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Tres Daos Scan","id":278790017,"baseUrl":"https://tresdaos.com","lang":"es","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/bbranchNamee/dart/manga/multisrc/madara/src/tresdaosscan/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"es","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Unitoon","id":661103813,"baseUrl":"https://lectorunitoon.com","lang":"es","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/bbranchNamee/dart/manga/multisrc/madara/src/unitoon/icon.png","dateFormat":"dd/MM/yyyy","dateFormatLocale":"es","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Manga-Scantrad","id":686398626,"baseUrl":"https://manga-scantrad.io","lang":"fr","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/bbranchNamee/dart/manga/multisrc/madara/src/mangascantrad/icon.png","dateFormat":"d MMM yyyy","dateFormatLocale":"fr","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Mangas-Origines.fr","id":27886548,"baseUrl":"https://mangas-origines.fr","lang":"fr","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/bbranchNamee/dart/manga/multisrc/madara/src/mangasoriginesfr/icon.png","dateFormat":"dd/mm/yyyy","dateFormatLocale":"fr","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Raijin Scans","id":320342235,"baseUrl":"https://raijinscans.com","lang":"fr","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/bbranchNamee/dart/manga/multisrc/madara/src/raijinscans/icon.png","dateFormat":"dd/MM/yyyy","dateFormatLocale":"fr","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Reaper Scans","id":393303796,"baseUrl":"https://reaperscans.com","lang":"en","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/bbranchNamee/dart/manga/multisrc/madara/src/reaperscans/icon.png","dateFormat":"dd/MM/yyyy","dateFormatLocale":"en_us","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Soft Epsilon Scan","id":59479664,"baseUrl":"https://soft.epsilonscan.fr","lang":"fr","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/bbranchNamee/dart/manga/multisrc/madara/src/softepsilonscan/icon.png","dateFormat":"dd/MM/yy","dateFormatLocale":"fr","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Hwago","id":742688581,"baseUrl":"https://hwago.org","lang":"id","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/bbranchNamee/dart/manga/multisrc/madara/src/hwago/icon.png","dateFormat":"d MMMM yyyy","dateFormatLocale":"en","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"KlikManga","id":325512770,"baseUrl":"https://klikmanga.id","lang":"id","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/bbranchNamee/dart/manga/multisrc/madara/src/klikmanga/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"id","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Komikuzan","id":654623055,"baseUrl":"https://komikuzan.com","lang":"id","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/bbranchNamee/dart/manga/multisrc/madara/src/komikuzan/icon.png","dateFormat":"MMMM d, yyyy","dateFormatLocale":"id","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"MG Komik","id":336171225,"baseUrl":"https://mgkomik.id","lang":"id","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/bbranchNamee/dart/manga/multisrc/madara/src/mgkomik/icon.png","dateFormat":"dd MMM yy","dateFormatLocale":"en_us","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Siimanga","id":33515095,"baseUrl":"https://siimanga.cyou","lang":"id","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/bbranchNamee/dart/manga/multisrc/madara/src/siimanga/icon.png","dateFormat":"d MMMM","dateFormatLocale":"en","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Yubikiri","id":451585835,"baseUrl":"https://yubikiri.my.id","lang":"id","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/bbranchNamee/dart/manga/multisrc/madara/src/yubikiri/icon.png","dateFormat":"d MMMM","dateFormatLocale":"en","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"MangaHoNa","id":1046386661,"baseUrl":"https://mangahona.pl","lang":"pl","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/bbranchNamee/dart/manga/multisrc/madara/src/mangahona/icon.png","dateFormat":"yyyy-MM-dd","dateFormatLocale":"en","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Alone Scanlator","id":646262881,"baseUrl":"https://alonescanlator.com.br","lang":"pt-br","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/bbranchNamee/dart/manga/multisrc/madara/src/alonescanlator/icon.png","dateFormat":"dd/MM/yyyy","dateFormatLocale":"pt-br","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Boruto Explorer","id":824559648,"baseUrl":"https://leitor.borutoexplorer.com.br","lang":"pt-br","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/bbranchNamee/dart/manga/multisrc/madara/src/borutoexplorer/icon.png","dateFormat":"dd 'de' MMMMM 'de' yyyy","dateFormatLocale":"pt-br","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Crystal Comics","id":345759902,"baseUrl":"https://crystalcomics.com","lang":"pt-br","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/bbranchNamee/dart/manga/multisrc/madara/src/crystalcomics/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"pt-br","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Fay Scans","id":591914093,"baseUrl":"https://fayscans.net","lang":"pt-br","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/bbranchNamee/dart/manga/multisrc/madara/src/fayscans/icon.png","dateFormat":"dd/MM/yyyy","dateFormatLocale":"pt-br","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Galinha Samurai Scan","id":204589683,"baseUrl":"https://galinhasamurai.com","lang":"pt-br","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/bbranchNamee/dart/manga/multisrc/madara/src/galinhasamuraiscan/icon.png","dateFormat":"dd/MM/yyyy","dateFormatLocale":"pt-br","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Hikari Ga Nai","id":346017333,"baseUrl":"https://hikariganai.xyz","lang":"pt-br","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/bbranchNamee/dart/manga/multisrc/madara/src/hikariganai/icon.png","dateFormat":"d 'de' MMMM 'de' yyyy","dateFormatLocale":"pt-br","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Sagrado Império da Britannia","id":825744254,"baseUrl":"https://imperiodabritannia.com","lang":"pt-br","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/bbranchNamee/dart/manga/multisrc/madara/src/imperiodabritannia/icon.png","dateFormat":"dd 'de' MMMMM 'de' yyyy","dateFormatLocale":"pt-br","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Império Scans","id":721205416,"baseUrl":"https://imperioscans.com.br","lang":"pt-BR","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/imperioscans/icon.png","dateFormat":"dd/MM/yyyy","dateFormatLocale":"pt-br","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Leitor de Mangá","id":1053799132,"baseUrl":"https://leitordemanga.com","lang":"pt-br","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/bbranchNamee/dart/manga/multisrc/madara/src/leitordemanga/icon.png","dateFormat":"dd/MM/yyyy","dateFormatLocale":"pt-br","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"L Scans","id":1044801707,"baseUrl":"https://lscans.com","lang":"pt-br","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/bbranchNamee/dart/manga/multisrc/madara/src/lscans/icon.png","dateFormat":"dd/MM/yyyy","dateFormatLocale":"en","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Lunar Scan","id":912854479,"baseUrl":"https://lunarscan.com.br","lang":"pt-br","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/bbranchNamee/dart/manga/multisrc/madara/src/lunarscan/icon.png","dateFormat":"MMMMM dd, yyyy","dateFormatLocale":"pt-br","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"MiniTwo Scan","id":601012644,"baseUrl":"https://minitwoscan.com","lang":"pt-br","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/bbranchNamee/dart/manga/multisrc/madara/src/minitwoscan/icon.png","dateFormat":"dd/MM/yyyy","dateFormatLocale":"pt-br","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Nexo Scans","id":290544955,"baseUrl":"https://nexoscans.net","lang":"pt-br","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/bbranchNamee/dart/manga/multisrc/madara/src/nexoscans/icon.png","dateFormat":"dd/MM/yyyy","dateFormatLocale":"en_us","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Ninja Scan","id":334761951,"baseUrl":"https://ninjacomics.xyz","lang":"pt-br","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/bbranchNamee/dart/manga/multisrc/madara/src/ninjascan/icon.png","dateFormat":"dd 'de' MMMMM 'de' yyyy","dateFormatLocale":"pt-br","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"One Piece TECA","id":743484013,"baseUrl":"https://onepieceteca.com","lang":"pt-br","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/bbranchNamee/dart/manga/multisrc/madara/src/onepieceteca/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"pt-br","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Demon Sect","id":779027778,"baseUrl":"https://dsectcomics.org","lang":"pt-br","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/bbranchNamee/dart/manga/multisrc/madara/src/prismascans/icon.png","dateFormat":"MMMMM dd, yyyy","dateFormatLocale":"pt-br","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Sussy Scan","id":27850545,"baseUrl":"https://sussyscan.com","lang":"pt-br","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/bbranchNamee/dart/manga/multisrc/madara/src/sussyscan/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"pt-br","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Kings-Manga","id":247277818,"baseUrl":"https://www.kings-manga.co","lang":"th","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/bbranchNamee/dart/manga/multisrc/madara/src/kingsmanga/icon.png","dateFormat":"d MMMM yyyy","dateFormatLocale":"th","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"MangaDeemak","id":1013072878,"baseUrl":"https://mangadeemak.com","lang":"th","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/bbranchNamee/dart/manga/multisrc/madara/src/mangadeemak/icon.png","dateFormat":"d MMMM yyyy","dateFormatLocale":"th","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"ManhuaBug","id":1069870491,"baseUrl":"https://www.manhuabug.com","lang":"th","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/bbranchNamee/dart/manga/multisrc/madara/src/manhuabug/icon.png","dateFormat":"d MMMM yyyy","dateFormatLocale":"en","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"ManhuaThai","id":886909171,"baseUrl":"https://www.manhuathai.com","lang":"th","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/bbranchNamee/dart/manga/multisrc/madara/src/manhuathai/icon.png","dateFormat":"d MMMM yyyy","dateFormatLocale":"th","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"ManhwaBreakup","id":1042261128,"baseUrl":"https://www.manhwabreakup.com","lang":"th","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/bbranchNamee/dart/manga/multisrc/madara/src/manhwabreakup/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"th","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Atikrost","id":515012139,"baseUrl":"https://www.atikrost.com","lang":"tr","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/bbranchNamee/dart/manga/multisrc/madara/src/atikrost/icon.png","dateFormat":"d MMMM yyyy","dateFormatLocale":"tr","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"DiamondFansub","id":692477375,"baseUrl":"https://diamondfansub.com","lang":"tr","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/bbranchNamee/dart/manga/multisrc/madara/src/diamondfansub/icon.png","dateFormat":"d MMMM","dateFormatLocale":"tr-tr","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"EvaScans","id":439004766,"baseUrl":"https://evascans.com","lang":"tr","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/src/evascans/icon.png","dateFormat":"MMM d, yyy","dateFormatLocale":"tr","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Garcia Manga","id":839477218,"baseUrl":"https://garciamanga.com","lang":"tr","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/bbranchNamee/dart/manga/multisrc/madara/src/garciamanga/icon.png","dateFormat":"MMMM d, yyyy","dateFormatLocale":"tr","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"GuncelManga","id":344324216,"baseUrl":"https://guncelmanga.net","lang":"tr","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/bbranchNamee/dart/manga/multisrc/madara/src/guncelmanga/icon.png","dateFormat":"d MMMM yyyy","dateFormatLocale":"tr","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"LilyumFansub","id":987644367,"baseUrl":"https://lilyumfansub.com.tr","lang":"tr","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/bbranchNamee/dart/manga/multisrc/madara/src/lilyumfansub/icon.png","dateFormat":"MMMM dd yyyy","dateFormatLocale":"tr","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"MangaGezgini","id":384203300,"baseUrl":"https://mangagezgini.com","lang":"tr","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/bbranchNamee/dart/manga/multisrc/madara/src/mangagezgini/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"tr","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Manga Keyfi","id":90571537,"baseUrl":"https://mangakeyfi.net","lang":"tr","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/bbranchNamee/dart/manga/multisrc/madara/src/mangakeyfi/icon.png","dateFormat":"d MMM yyy","dateFormatLocale":"tr","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Manga Oku","id":118357555,"baseUrl":"https://mangaoku.info","lang":"tr","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/bbranchNamee/dart/manga/multisrc/madara/src/mangaoku/icon.png","dateFormat":"d MMMM yyyy","dateFormatLocale":"tr","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"MangaWOW","id":753316676,"baseUrl":"https://mangawow.org","lang":"tr","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/bbranchNamee/dart/manga/multisrc/madara/src/mangawow/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"tr","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Merlin Scans","id":766513760,"baseUrl":"https://merlinscans.com","lang":"tr","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/bbranchNamee/dart/manga/multisrc/madara/src/merlinscans/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"tr","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Rüya Manga","id":913158953,"baseUrl":"https://www.ruyamanga.com","lang":"tr","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/bbranchNamee/dart/manga/multisrc/madara/src/ruyamanga/icon.png","dateFormat":"dd/MM/yyyy","dateFormatLocale":"en","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Türkçe Manga Oku","id":1065180352,"baseUrl":"https://turkcemangaoku.com","lang":"tr","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/bbranchNamee/dart/manga/multisrc/madara/src/turkcemangaoku/icon.png","dateFormat":"d MMMM yyyy","dateFormatLocale":"tr","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Webtoon Hatti","id":790500497,"baseUrl":"https://webtoonhatti.net","lang":"tr","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/bbranchNamee/dart/manga/multisrc/madara/src/webtoonhatti/icon.png","dateFormat":"dd MMMM","dateFormatLocale":"tr","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/madara/madara.dart","apiUrl":"","version":"0.1.15","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Comick","id":370890607,"baseUrl":"https://comick.app","lang":"all","typeSource":"comick","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/comick/icon.png","dateFormat":"yyyy-MM-dd'T'HH:mm:ss'Z'","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/comick/comick.dart","apiUrl":"https://api.comick.fun","version":"0.0.75","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Comick","id":955190069,"baseUrl":"https://comick.app","lang":"en","typeSource":"comick","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/comick/icon.png","dateFormat":"yyyy-MM-dd'T'HH:mm:ss'Z'","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/comick/comick.dart","apiUrl":"https://api.comick.fun","version":"0.0.75","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Comick","id":494197461,"baseUrl":"https://comick.app","lang":"pt-br","typeSource":"comick","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/comick/icon.png","dateFormat":"yyyy-MM-dd'T'HH:mm:ss'Z'","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/comick/comick.dart","apiUrl":"https://api.comick.fun","version":"0.0.75","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Comick","id":1050814052,"baseUrl":"https://comick.app","lang":"ru","typeSource":"comick","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/comick/icon.png","dateFormat":"yyyy-MM-dd'T'HH:mm:ss'Z'","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/comick/comick.dart","apiUrl":"https://api.comick.fun","version":"0.0.75","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Comick","id":380505196,"baseUrl":"https://comick.app","lang":"fr","typeSource":"comick","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/comick/icon.png","dateFormat":"yyyy-MM-dd'T'HH:mm:ss'Z'","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/comick/comick.dart","apiUrl":"https://api.comick.fun","version":"0.0.75","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Comick","id":296390197,"baseUrl":"https://comick.app","lang":"es-419","typeSource":"comick","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/comick/icon.png","dateFormat":"yyyy-MM-dd'T'HH:mm:ss'Z'","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/comick/comick.dart","apiUrl":"https://api.comick.fun","version":"0.0.75","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Comick","id":242913014,"baseUrl":"https://comick.app","lang":"pl","typeSource":"comick","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/comick/icon.png","dateFormat":"yyyy-MM-dd'T'HH:mm:ss'Z'","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/comick/comick.dart","apiUrl":"https://api.comick.fun","version":"0.0.75","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Comick","id":507059585,"baseUrl":"https://comick.app","lang":"tr","typeSource":"comick","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/comick/icon.png","dateFormat":"yyyy-MM-dd'T'HH:mm:ss'Z'","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/comick/comick.dart","apiUrl":"https://api.comick.fun","version":"0.0.75","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Comick","id":851891714,"baseUrl":"https://comick.app","lang":"it","typeSource":"comick","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/comick/icon.png","dateFormat":"yyyy-MM-dd'T'HH:mm:ss'Z'","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/comick/comick.dart","apiUrl":"https://api.comick.fun","version":"0.0.75","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Comick","id":115169439,"baseUrl":"https://comick.app","lang":"es","typeSource":"comick","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/comick/icon.png","dateFormat":"yyyy-MM-dd'T'HH:mm:ss'Z'","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/comick/comick.dart","apiUrl":"https://api.comick.fun","version":"0.0.75","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Comick","id":719269008,"baseUrl":"https://comick.app","lang":"id","typeSource":"comick","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/comick/icon.png","dateFormat":"yyyy-MM-dd'T'HH:mm:ss'Z'","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/comick/comick.dart","apiUrl":"https://api.comick.fun","version":"0.0.75","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Comick","id":719759654,"baseUrl":"https://comick.app","lang":"hu","typeSource":"comick","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/comick/icon.png","dateFormat":"yyyy-MM-dd'T'HH:mm:ss'Z'","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/comick/comick.dart","apiUrl":"https://api.comick.fun","version":"0.0.75","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Comick","id":301477894,"baseUrl":"https://comick.app","lang":"vi","typeSource":"comick","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/comick/icon.png","dateFormat":"yyyy-MM-dd'T'HH:mm:ss'Z'","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/comick/comick.dart","apiUrl":"https://api.comick.fun","version":"0.0.75","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Comick","id":113594984,"baseUrl":"https://comick.app","lang":"zh-hk","typeSource":"comick","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/comick/icon.png","dateFormat":"yyyy-MM-dd'T'HH:mm:ss'Z'","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/comick/comick.dart","apiUrl":"https://api.comick.fun","version":"0.0.75","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Comick","id":602472856,"baseUrl":"https://comick.app","lang":"ar","typeSource":"comick","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/comick/icon.png","dateFormat":"yyyy-MM-dd'T'HH:mm:ss'Z'","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/comick/comick.dart","apiUrl":"https://api.comick.fun","version":"0.0.75","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Comick","id":401493183,"baseUrl":"https://comick.app","lang":"de","typeSource":"comick","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/comick/icon.png","dateFormat":"yyyy-MM-dd'T'HH:mm:ss'Z'","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/comick/comick.dart","apiUrl":"https://api.comick.fun","version":"0.0.75","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Comick","id":752155292,"baseUrl":"https://comick.app","lang":"zh","typeSource":"comick","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/comick/icon.png","dateFormat":"yyyy-MM-dd'T'HH:mm:ss'Z'","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/comick/comick.dart","apiUrl":"https://api.comick.fun","version":"0.0.75","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Comick","id":1069764002,"baseUrl":"https://comick.app","lang":"ca","typeSource":"comick","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/comick/icon.png","dateFormat":"yyyy-MM-dd'T'HH:mm:ss'Z'","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/comick/comick.dart","apiUrl":"https://api.comick.fun","version":"0.0.75","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Comick","id":678531099,"baseUrl":"https://comick.app","lang":"bg","typeSource":"comick","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/comick/icon.png","dateFormat":"yyyy-MM-dd'T'HH:mm:ss'Z'","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/comick/comick.dart","apiUrl":"https://api.comick.fun","version":"0.0.75","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Comick","id":311480598,"baseUrl":"https://comick.app","lang":"th","typeSource":"comick","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/comick/icon.png","dateFormat":"yyyy-MM-dd'T'HH:mm:ss'Z'","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/comick/comick.dart","apiUrl":"https://api.comick.fun","version":"0.0.75","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Comick","id":141560456,"baseUrl":"https://comick.app","lang":"fa","typeSource":"comick","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/comick/icon.png","dateFormat":"yyyy-MM-dd'T'HH:mm:ss'Z'","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/comick/comick.dart","apiUrl":"https://api.comick.fun","version":"0.0.75","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Comick","id":8261465,"baseUrl":"https://comick.app","lang":"uk","typeSource":"comick","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/comick/icon.png","dateFormat":"yyyy-MM-dd'T'HH:mm:ss'Z'","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/comick/comick.dart","apiUrl":"https://api.comick.fun","version":"0.0.75","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Comick","id":565474938,"baseUrl":"https://comick.app","lang":"mn","typeSource":"comick","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/comick/icon.png","dateFormat":"yyyy-MM-dd'T'HH:mm:ss'Z'","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/comick/comick.dart","apiUrl":"https://api.comick.fun","version":"0.0.75","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Comick","id":533803532,"baseUrl":"https://comick.app","lang":"ro","typeSource":"comick","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/comick/icon.png","dateFormat":"yyyy-MM-dd'T'HH:mm:ss'Z'","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/comick/comick.dart","apiUrl":"https://api.comick.fun","version":"0.0.75","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Comick","id":459976450,"baseUrl":"https://comick.app","lang":"he","typeSource":"comick","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/comick/icon.png","dateFormat":"yyyy-MM-dd'T'HH:mm:ss'Z'","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/comick/comick.dart","apiUrl":"https://api.comick.fun","version":"0.0.75","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Comick","id":375702775,"baseUrl":"https://comick.app","lang":"ms","typeSource":"comick","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/comick/icon.png","dateFormat":"yyyy-MM-dd'T'HH:mm:ss'Z'","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/comick/comick.dart","apiUrl":"https://api.comick.fun","version":"0.0.75","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Comick","id":737984097,"baseUrl":"https://comick.app","lang":"tl","typeSource":"comick","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/comick/icon.png","dateFormat":"yyyy-MM-dd'T'HH:mm:ss'Z'","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/comick/comick.dart","apiUrl":"https://api.comick.fun","version":"0.0.75","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Comick","id":796489006,"baseUrl":"https://comick.app","lang":"ja","typeSource":"comick","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/comick/icon.png","dateFormat":"yyyy-MM-dd'T'HH:mm:ss'Z'","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/comick/comick.dart","apiUrl":"https://api.comick.fun","version":"0.0.75","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Comick","id":683471552,"baseUrl":"https://comick.app","lang":"hi","typeSource":"comick","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/comick/icon.png","dateFormat":"yyyy-MM-dd'T'HH:mm:ss'Z'","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/comick/comick.dart","apiUrl":"https://api.comick.fun","version":"0.0.75","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Comick","id":778623467,"baseUrl":"https://comick.app","lang":"my","typeSource":"comick","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/comick/icon.png","dateFormat":"yyyy-MM-dd'T'HH:mm:ss'Z'","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/comick/comick.dart","apiUrl":"https://api.comick.fun","version":"0.0.75","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Comick","id":1065236294,"baseUrl":"https://comick.app","lang":"ko","typeSource":"comick","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/comick/icon.png","dateFormat":"yyyy-MM-dd'T'HH:mm:ss'Z'","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/comick/comick.dart","apiUrl":"https://api.comick.fun","version":"0.0.75","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Comick","id":422767524,"baseUrl":"https://comick.app","lang":"cs","typeSource":"comick","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/comick/icon.png","dateFormat":"yyyy-MM-dd'T'HH:mm:ss'Z'","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/comick/comick.dart","apiUrl":"https://api.comick.fun","version":"0.0.75","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Comick","id":678647945,"baseUrl":"https://comick.app","lang":"pt","typeSource":"comick","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/comick/icon.png","dateFormat":"yyyy-MM-dd'T'HH:mm:ss'Z'","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/comick/comick.dart","apiUrl":"https://api.comick.fun","version":"0.0.75","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Comick","id":698202010,"baseUrl":"https://comick.app","lang":"nl","typeSource":"comick","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/comick/icon.png","dateFormat":"yyyy-MM-dd'T'HH:mm:ss'Z'","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/comick/comick.dart","apiUrl":"https://api.comick.fun","version":"0.0.75","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Comick","id":359879447,"baseUrl":"https://comick.app","lang":"sv","typeSource":"comick","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/comick/icon.png","dateFormat":"yyyy-MM-dd'T'HH:mm:ss'Z'","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/comick/comick.dart","apiUrl":"https://api.comick.fun","version":"0.0.75","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Comick","id":532878423,"baseUrl":"https://comick.app","lang":"bn","typeSource":"comick","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/comick/icon.png","dateFormat":"yyyy-MM-dd'T'HH:mm:ss'Z'","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/comick/comick.dart","apiUrl":"https://api.comick.fun","version":"0.0.75","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Comick","id":481504622,"baseUrl":"https://comick.app","lang":"no","typeSource":"comick","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/comick/icon.png","dateFormat":"yyyy-MM-dd'T'HH:mm:ss'Z'","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/comick/comick.dart","apiUrl":"https://api.comick.fun","version":"0.0.75","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Comick","id":112887841,"baseUrl":"https://comick.app","lang":"lt","typeSource":"comick","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/comick/icon.png","dateFormat":"yyyy-MM-dd'T'HH:mm:ss'Z'","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/comick/comick.dart","apiUrl":"https://api.comick.fun","version":"0.0.75","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Comick","id":824905526,"baseUrl":"https://comick.app","lang":"el","typeSource":"comick","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/comick/icon.png","dateFormat":"yyyy-MM-dd'T'HH:mm:ss'Z'","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/comick/comick.dart","apiUrl":"https://api.comick.fun","version":"0.0.75","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Comick","id":373675453,"baseUrl":"https://comick.app","lang":"sr","typeSource":"comick","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/comick/icon.png","dateFormat":"yyyy-MM-dd'T'HH:mm:ss'Z'","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/comick/comick.dart","apiUrl":"https://api.comick.fun","version":"0.0.75","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Comick","id":574420905,"baseUrl":"https://comick.app","lang":"da","typeSource":"comick","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/comick/icon.png","dateFormat":"yyyy-MM-dd'T'HH:mm:ss'Z'","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/comick/comick.dart","apiUrl":"https://api.comick.fun","version":"0.0.75","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"MangaDex","id":202373705,"baseUrl":"https://mangadex.org","lang":"ar","typeSource":"mangadex","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/mangadex/icon.png","dateFormat":"yyyy-MM-dd'T'HH:mm:ss+SSS","dateFormatLocale":"en_Us","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/mangadex/mangadex.dart","apiUrl":"https://api.mangadex.org","version":"0.1.1","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"MangaDex","id":860658373,"baseUrl":"https://mangadex.org","lang":"bn","typeSource":"mangadex","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/mangadex/icon.png","dateFormat":"yyyy-MM-dd'T'HH:mm:ss+SSS","dateFormatLocale":"en_Us","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/mangadex/mangadex.dart","apiUrl":"https://api.mangadex.org","version":"0.1.1","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"MangaDex","id":722270529,"baseUrl":"https://mangadex.org","lang":"bg","typeSource":"mangadex","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/mangadex/icon.png","dateFormat":"yyyy-MM-dd'T'HH:mm:ss+SSS","dateFormatLocale":"en_Us","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/mangadex/mangadex.dart","apiUrl":"https://api.mangadex.org","version":"0.1.1","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"MangaDex","id":978675083,"baseUrl":"https://mangadex.org","lang":"my","typeSource":"mangadex","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/mangadex/icon.png","dateFormat":"yyyy-MM-dd'T'HH:mm:ss+SSS","dateFormatLocale":"en_Us","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/mangadex/mangadex.dart","apiUrl":"https://api.mangadex.org","version":"0.1.1","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"MangaDex","id":689496451,"baseUrl":"https://mangadex.org","lang":"ca","typeSource":"mangadex","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/mangadex/icon.png","dateFormat":"yyyy-MM-dd'T'HH:mm:ss+SSS","dateFormatLocale":"en_Us","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/mangadex/mangadex.dart","apiUrl":"https://api.mangadex.org","version":"0.1.1","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"MangaDex","id":593575397,"baseUrl":"https://mangadex.org","lang":"zh","typeSource":"mangadex","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/mangadex/icon.png","dateFormat":"yyyy-MM-dd'T'HH:mm:ss+SSS","dateFormatLocale":"en_Us","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/mangadex/mangadex.dart","apiUrl":"https://api.mangadex.org","version":"0.1.1","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"MangaDex","id":115179159,"baseUrl":"https://mangadex.org","lang":"zh-hk","typeSource":"mangadex","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/mangadex/icon.png","dateFormat":"yyyy-MM-dd'T'HH:mm:ss+SSS","dateFormatLocale":"en_Us","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/mangadex/mangadex.dart","apiUrl":"https://api.mangadex.org","version":"0.1.1","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"MangaDex","id":869144666,"baseUrl":"https://mangadex.org","lang":"cs","typeSource":"mangadex","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/mangadex/icon.png","dateFormat":"yyyy-MM-dd'T'HH:mm:ss+SSS","dateFormatLocale":"en_Us","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/mangadex/mangadex.dart","apiUrl":"https://api.mangadex.org","version":"0.1.1","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"MangaDex","id":846142909,"baseUrl":"https://mangadex.org","lang":"da","typeSource":"mangadex","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/mangadex/icon.png","dateFormat":"yyyy-MM-dd'T'HH:mm:ss+SSS","dateFormatLocale":"en_Us","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/mangadex/mangadex.dart","apiUrl":"https://api.mangadex.org","version":"0.1.1","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"MangaDex","id":841149659,"baseUrl":"https://mangadex.org","lang":"nl","typeSource":"mangadex","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/mangadex/icon.png","dateFormat":"yyyy-MM-dd'T'HH:mm:ss+SSS","dateFormatLocale":"en_Us","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/mangadex/mangadex.dart","apiUrl":"https://api.mangadex.org","version":"0.1.1","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"MangaDex","id":810342358,"baseUrl":"https://mangadex.org","lang":"en","typeSource":"mangadex","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/mangadex/icon.png","dateFormat":"yyyy-MM-dd'T'HH:mm:ss+SSS","dateFormatLocale":"en_Us","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/mangadex/mangadex.dart","apiUrl":"https://api.mangadex.org","version":"0.1.1","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"MangaDex","id":309024312,"baseUrl":"https://mangadex.org","lang":"tl","typeSource":"mangadex","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/mangadex/icon.png","dateFormat":"yyyy-MM-dd'T'HH:mm:ss+SSS","dateFormatLocale":"en_Us","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/mangadex/mangadex.dart","apiUrl":"https://api.mangadex.org","version":"0.1.1","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"MangaDex","id":164642544,"baseUrl":"https://mangadex.org","lang":"fi","typeSource":"mangadex","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/mangadex/icon.png","dateFormat":"yyyy-MM-dd'T'HH:mm:ss+SSS","dateFormatLocale":"en_Us","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/mangadex/mangadex.dart","apiUrl":"https://api.mangadex.org","version":"0.1.1","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"MangaDex","id":545017689,"baseUrl":"https://mangadex.org","lang":"fr","typeSource":"mangadex","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/mangadex/icon.png","dateFormat":"yyyy-MM-dd'T'HH:mm:ss+SSS","dateFormatLocale":"en_Us","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/mangadex/mangadex.dart","apiUrl":"https://api.mangadex.org","version":"0.1.1","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"MangaDex","id":110023605,"baseUrl":"https://mangadex.org","lang":"de","typeSource":"mangadex","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/mangadex/icon.png","dateFormat":"yyyy-MM-dd'T'HH:mm:ss+SSS","dateFormatLocale":"en_Us","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/mangadex/mangadex.dart","apiUrl":"https://api.mangadex.org","version":"0.1.1","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"MangaDex","id":767687578,"baseUrl":"https://mangadex.org","lang":"el","typeSource":"mangadex","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/mangadex/icon.png","dateFormat":"yyyy-MM-dd'T'HH:mm:ss+SSS","dateFormatLocale":"en_Us","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/mangadex/mangadex.dart","apiUrl":"https://api.mangadex.org","version":"0.1.1","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"MangaDex","id":511907642,"baseUrl":"https://mangadex.org","lang":"he","typeSource":"mangadex","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/mangadex/icon.png","dateFormat":"yyyy-MM-dd'T'HH:mm:ss+SSS","dateFormatLocale":"en_Us","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/mangadex/mangadex.dart","apiUrl":"https://api.mangadex.org","version":"0.1.1","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"MangaDex","id":986826068,"baseUrl":"https://mangadex.org","lang":"hi","typeSource":"mangadex","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/mangadex/icon.png","dateFormat":"yyyy-MM-dd'T'HH:mm:ss+SSS","dateFormatLocale":"en_Us","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/mangadex/mangadex.dart","apiUrl":"https://api.mangadex.org","version":"0.1.1","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"MangaDex","id":128441350,"baseUrl":"https://mangadex.org","lang":"hu","typeSource":"mangadex","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/mangadex/icon.png","dateFormat":"yyyy-MM-dd'T'HH:mm:ss+SSS","dateFormatLocale":"en_Us","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/mangadex/mangadex.dart","apiUrl":"https://api.mangadex.org","version":"0.1.1","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"MangaDex","id":183977130,"baseUrl":"https://mangadex.org","lang":"id","typeSource":"mangadex","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/mangadex/icon.png","dateFormat":"yyyy-MM-dd'T'HH:mm:ss+SSS","dateFormatLocale":"en_Us","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/mangadex/mangadex.dart","apiUrl":"https://api.mangadex.org","version":"0.1.1","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"MangaDex","id":127887438,"baseUrl":"https://mangadex.org","lang":"it","typeSource":"mangadex","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/mangadex/icon.png","dateFormat":"yyyy-MM-dd'T'HH:mm:ss+SSS","dateFormatLocale":"en_Us","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/mangadex/mangadex.dart","apiUrl":"https://api.mangadex.org","version":"0.1.1","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"MangaDex","id":204112007,"baseUrl":"https://mangadex.org","lang":"ja","typeSource":"mangadex","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/mangadex/icon.png","dateFormat":"yyyy-MM-dd'T'HH:mm:ss+SSS","dateFormatLocale":"en_Us","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/mangadex/mangadex.dart","apiUrl":"https://api.mangadex.org","version":"0.1.1","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"MangaDex","id":1063442064,"baseUrl":"https://mangadex.org","lang":"kk","typeSource":"mangadex","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/mangadex/icon.png","dateFormat":"yyyy-MM-dd'T'HH:mm:ss+SSS","dateFormatLocale":"en_Us","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/mangadex/mangadex.dart","apiUrl":"https://api.mangadex.org","version":"0.1.1","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"MangaDex","id":898061477,"baseUrl":"https://mangadex.org","lang":"ko","typeSource":"mangadex","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/mangadex/icon.png","dateFormat":"yyyy-MM-dd'T'HH:mm:ss+SSS","dateFormatLocale":"en_Us","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/mangadex/mangadex.dart","apiUrl":"https://api.mangadex.org","version":"0.1.1","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"MangaDex","id":387646759,"baseUrl":"https://mangadex.org","lang":"la","typeSource":"mangadex","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/mangadex/icon.png","dateFormat":"yyyy-MM-dd'T'HH:mm:ss+SSS","dateFormatLocale":"en_Us","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/mangadex/mangadex.dart","apiUrl":"https://api.mangadex.org","version":"0.1.1","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"MangaDex","id":270482698,"baseUrl":"https://mangadex.org","lang":"lt","typeSource":"mangadex","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/mangadex/icon.png","dateFormat":"yyyy-MM-dd'T'HH:mm:ss+SSS","dateFormatLocale":"en_Us","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/mangadex/mangadex.dart","apiUrl":"https://api.mangadex.org","version":"0.1.1","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"MangaDex","id":284400542,"baseUrl":"https://mangadex.org","lang":"ms","typeSource":"mangadex","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/mangadex/icon.png","dateFormat":"yyyy-MM-dd'T'HH:mm:ss+SSS","dateFormatLocale":"en_Us","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/mangadex/mangadex.dart","apiUrl":"https://api.mangadex.org","version":"0.1.1","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"MangaDex","id":525041874,"baseUrl":"https://mangadex.org","lang":"mn","typeSource":"mangadex","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/mangadex/icon.png","dateFormat":"yyyy-MM-dd'T'HH:mm:ss+SSS","dateFormatLocale":"en_Us","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/mangadex/mangadex.dart","apiUrl":"https://api.mangadex.org","version":"0.1.1","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"MangaDex","id":613632949,"baseUrl":"https://mangadex.org","lang":"ne","typeSource":"mangadex","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/mangadex/icon.png","dateFormat":"yyyy-MM-dd'T'HH:mm:ss+SSS","dateFormatLocale":"en_Us","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/mangadex/mangadex.dart","apiUrl":"https://api.mangadex.org","version":"0.1.1","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"MangaDex","id":441032670,"baseUrl":"https://mangadex.org","lang":"no","typeSource":"mangadex","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/mangadex/icon.png","dateFormat":"yyyy-MM-dd'T'HH:mm:ss+SSS","dateFormatLocale":"en_Us","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/mangadex/mangadex.dart","apiUrl":"https://api.mangadex.org","version":"0.1.1","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"MangaDex","id":693311514,"baseUrl":"https://mangadex.org","lang":"fa","typeSource":"mangadex","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/mangadex/icon.png","dateFormat":"yyyy-MM-dd'T'HH:mm:ss+SSS","dateFormatLocale":"en_Us","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/mangadex/mangadex.dart","apiUrl":"https://api.mangadex.org","version":"0.1.1","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"MangaDex","id":683661227,"baseUrl":"https://mangadex.org","lang":"pl","typeSource":"mangadex","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/mangadex/icon.png","dateFormat":"yyyy-MM-dd'T'HH:mm:ss+SSS","dateFormatLocale":"en_Us","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/mangadex/mangadex.dart","apiUrl":"https://api.mangadex.org","version":"0.1.1","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"MangaDex","id":417850874,"baseUrl":"https://mangadex.org","lang":"pt-br","typeSource":"mangadex","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/mangadex/icon.png","dateFormat":"yyyy-MM-dd'T'HH:mm:ss+SSS","dateFormatLocale":"en_Us","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/mangadex/mangadex.dart","apiUrl":"https://api.mangadex.org","version":"0.1.1","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"MangaDex","id":1027115198,"baseUrl":"https://mangadex.org","lang":"pt","typeSource":"mangadex","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/mangadex/icon.png","dateFormat":"yyyy-MM-dd'T'HH:mm:ss+SSS","dateFormatLocale":"en_Us","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/mangadex/mangadex.dart","apiUrl":"https://api.mangadex.org","version":"0.1.1","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"MangaDex","id":399589398,"baseUrl":"https://mangadex.org","lang":"ro","typeSource":"mangadex","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/mangadex/icon.png","dateFormat":"yyyy-MM-dd'T'HH:mm:ss+SSS","dateFormatLocale":"en_Us","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/mangadex/mangadex.dart","apiUrl":"https://api.mangadex.org","version":"0.1.1","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"MangaDex","id":367421943,"baseUrl":"https://mangadex.org","lang":"ru","typeSource":"mangadex","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/mangadex/icon.png","dateFormat":"yyyy-MM-dd'T'HH:mm:ss+SSS","dateFormatLocale":"en_Us","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/mangadex/mangadex.dart","apiUrl":"https://api.mangadex.org","version":"0.1.1","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"MangaDex","id":254140838,"baseUrl":"https://mangadex.org","lang":"sh","typeSource":"mangadex","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/mangadex/icon.png","dateFormat":"yyyy-MM-dd'T'HH:mm:ss+SSS","dateFormatLocale":"en_Us","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/mangadex/mangadex.dart","apiUrl":"https://api.mangadex.org","version":"0.1.1","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"MangaDex","id":823535267,"baseUrl":"https://mangadex.org","lang":"es-419","typeSource":"mangadex","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/mangadex/icon.png","dateFormat":"yyyy-MM-dd'T'HH:mm:ss+SSS","dateFormatLocale":"en_Us","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/mangadex/mangadex.dart","apiUrl":"https://api.mangadex.org","version":"0.1.1","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"MangaDex","id":736630443,"baseUrl":"https://mangadex.org","lang":"es","typeSource":"mangadex","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/mangadex/icon.png","dateFormat":"yyyy-MM-dd'T'HH:mm:ss+SSS","dateFormatLocale":"en_Us","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/mangadex/mangadex.dart","apiUrl":"https://api.mangadex.org","version":"0.1.1","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"MangaDex","id":146351677,"baseUrl":"https://mangadex.org","lang":"sv","typeSource":"mangadex","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/mangadex/icon.png","dateFormat":"yyyy-MM-dd'T'HH:mm:ss+SSS","dateFormatLocale":"en_Us","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/mangadex/mangadex.dart","apiUrl":"https://api.mangadex.org","version":"0.1.1","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"MangaDex","id":739930809,"baseUrl":"https://mangadex.org","lang":"ta","typeSource":"mangadex","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/mangadex/icon.png","dateFormat":"yyyy-MM-dd'T'HH:mm:ss+SSS","dateFormatLocale":"en_Us","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/mangadex/mangadex.dart","apiUrl":"https://api.mangadex.org","version":"0.1.1","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"MangaDex","id":385031783,"baseUrl":"https://mangadex.org","lang":"th","typeSource":"mangadex","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/mangadex/icon.png","dateFormat":"yyyy-MM-dd'T'HH:mm:ss+SSS","dateFormatLocale":"en_Us","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/mangadex/mangadex.dart","apiUrl":"https://api.mangadex.org","version":"0.1.1","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"MangaDex","id":1008587213,"baseUrl":"https://mangadex.org","lang":"tr","typeSource":"mangadex","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/mangadex/icon.png","dateFormat":"yyyy-MM-dd'T'HH:mm:ss+SSS","dateFormatLocale":"en_Us","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/mangadex/mangadex.dart","apiUrl":"https://api.mangadex.org","version":"0.1.1","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"MangaDex","id":778357609,"baseUrl":"https://mangadex.org","lang":"uk","typeSource":"mangadex","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/mangadex/icon.png","dateFormat":"yyyy-MM-dd'T'HH:mm:ss+SSS","dateFormatLocale":"en_Us","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/mangadex/mangadex.dart","apiUrl":"https://api.mangadex.org","version":"0.1.1","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"MangaDex","id":88174952,"baseUrl":"https://mangadex.org","lang":"vi","typeSource":"mangadex","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/mangadex/icon.png","dateFormat":"yyyy-MM-dd'T'HH:mm:ss+SSS","dateFormatLocale":"en_Us","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/all/mangadex/mangadex.dart","apiUrl":"https://api.mangadex.org","version":"0.1.1","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Beast Scans","id":1051043161,"baseUrl":"https://beast-scans.com","lang":"ar","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/beastscans/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"ar","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Lelmanga","id":35877276,"baseUrl":"https://www.lelmanga.com","lang":"fr","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/lelmanga/icon.png","dateFormat":"MMMM d, yyyy","dateFormatLocale":"en","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"KomikLab Scans","id":932554594,"baseUrl":"https://komiklab.com","lang":"en","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/komiklab/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"en_us","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Azure Scans","id":316512590,"baseUrl":"https://azuremanga.com","lang":"en","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/azurescans/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"en_us","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Cosmic Scans","id":938687459,"baseUrl":"https://cosmicscans.com","lang":"en","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/cosmicscans/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"en_us","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"CosmicScans.id","id":1053293978,"baseUrl":"https://cosmicscans.id","lang":"id","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/cosmicscansid/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"en_us","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"DuniaKomik.id","id":326969052,"baseUrl":"https://duniakomik.id","lang":"id","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/duniakomikid/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"id","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Gecenin Lordu","id":622207049,"baseUrl":"https://geceninlordu.com","lang":"tr","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/geceninlordu/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"en_us","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Infernal Void Scans","id":460393112,"baseUrl":"https://void-scans.com","lang":"en","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/infernalvoidscans/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"en_us","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"KataKomik","id":61302571,"baseUrl":"https://katakomik.online","lang":"id","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/katakomik/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"en_us","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Komik Station","id":866615506,"baseUrl":"https://komikstation.co","lang":"id","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/komikstation/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"id","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"KomikMama","id":148959602,"baseUrl":"https://komikmama.co","lang":"id","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/komikmama/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"id","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Komiku.com","id":869906392,"baseUrl":"https://komiku.com","lang":"id","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/komikucom/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"id","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Magus Manga","id":487156426,"baseUrl":"https://magusmanga.com","lang":"ar","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/magusmanga/icon.png","dateFormat":"MMMMM d, yyyy","dateFormatLocale":"ar","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Manga Indo.me","id":425166803,"baseUrl":"https://mangaindo.me","lang":"id","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/mangaindome/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"en_us","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Mangacim","id":642410916,"baseUrl":"https://www.mangacim.com","lang":"tr","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/mangacim/icon.png","dateFormat":"MMM d, yyy","dateFormatLocale":"tr","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"MangaTale","id":343986734,"baseUrl":"https://mangatale.co","lang":"id","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/mangatale/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"id","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"MangaWT","id":1014190199,"baseUrl":"https://mangawt.com","lang":"tr","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/mangawt/icon.png","dateFormat":"MMM d, yyyy","dateFormatLocale":"tr","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"MELOKOMIK","id":532392938,"baseUrl":"https://melokomik.xyz","lang":"id","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/melokomik/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"id","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Origami Orpheans","id":261849744,"baseUrl":"https://origami-orpheans.com.br","lang":"pt-br","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/origamiorpheans/icon.png","dateFormat":"MMMMM dd, yyyy","dateFormatLocale":"pt-br","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"PhenixScans","id":984162065,"baseUrl":"https://phenixscans.fr","lang":"fr","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/phenixscans/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"fr","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Pi Scans","id":548699583,"baseUrl":"https://piscans.in","lang":"id","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/piscans/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"en_us","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Raiki Scan","id":550138305,"baseUrl":"https://raikiscan.com","lang":"es","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/raikiscan/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"en_us","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Raven Scans","id":299682436,"baseUrl":"https://ravenscans.com","lang":"en","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/ravenscans/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"en_us","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Shadow Mangas","id":229424731,"baseUrl":"https://shadowmangas.com","lang":"es","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/shadowmangas/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"es","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Surya Scans","id":935389321,"baseUrl":"https://suryascans.com","lang":"en","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/suryascans/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"en_us","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Sushi-Scans","id":1036140988,"baseUrl":"https://sushiscan.fr","lang":"fr","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/sushiscans/icon.png","dateFormat":"MMMM d, yyyy","dateFormatLocale":"fr","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Sushi-Scan","id":972784612,"baseUrl":"https://sushiscan.net","lang":"fr","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/sushiscan/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"fr","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Tarot Scans","id":347606260,"baseUrl":"https://www.tarotscans.com","lang":"tr","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/tarotscans/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"tr","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"TukangKomik","id":884904192,"baseUrl":"https://tukangkomik.id","lang":"id","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/tukangkomik/icon.png","dateFormat":"MMM d, yyyy","dateFormatLocale":"tr","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"TurkToon","id":579681001,"baseUrl":"https://turktoon.com","lang":"tr","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/turktoon/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"en_us","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Uzay Manga","id":762273201,"baseUrl":"https://uzaymanga.com","lang":"tr","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/uzaymanga/icon.png","dateFormat":"MMM d, yyyy","dateFormatLocale":"tr","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"xCaliBR Scans","id":699314250,"baseUrl":"https://xcalibrscans.com","lang":"en","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/xcalibrscans/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"en_us","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Miau Scan","id":579641140,"baseUrl":"https://lectormiau.com","lang":"all","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/miauscan/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"es","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Thunder Scans","id":607210554,"baseUrl":"https://ar-thunderepic.com","lang":"all","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/thunderscans/icon.png","dateFormat":"MMM d, yyy","dateFormatLocale":"ar","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"أريا مانجا","id":101767587,"baseUrl":"https://www.areascans.net","lang":"ar","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/areamanga/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"ar","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Area Scans","id":215530388,"baseUrl":"https://ar.areascans.org","lang":"ar","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/areascans/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"ar","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"SCARManga","id":973665455,"baseUrl":"https://scarmanga.com","lang":"ar","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/aresnov/icon.png","dateFormat":"MMMMM dd, yyyy","dateFormatLocale":"ar","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Beast Scans","id":1051043161,"baseUrl":"https://beast-scans.com","lang":"ar","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/beastscans/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"ar","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Crow Scans","id":113863087,"baseUrl":"https://crowscans.com","lang":"ar","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/crowscans/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"ar","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"ARESManga","id":603318428,"baseUrl":"https://fl-ares.com","lang":"ar","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/iimanga/icon.png","dateFormat":"MMMMM dd, yyyy","dateFormatLocale":"ar","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Manga Flame","id":246146595,"baseUrl":"https://mangaflame.org","lang":"ar","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/mangaflame/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"ar","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"مانجا نون","id":360286753,"baseUrl":"https://manjanoon.org","lang":"ar","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/manganoon/icon.png","dateFormat":"MMM d, yyy","dateFormatLocale":"ar","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Manga Pro","id":349077648,"baseUrl":"https://mangapro.club","lang":"ar","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/mangapro/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"ar","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"MangaSwat","id":1022922869,"baseUrl":"https://normoyun.com","lang":"ar","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/mangaswat/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"ar","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"MangaTak","id":71223245,"baseUrl":"https://mangatak.com","lang":"ar","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/mangatak/icon.png","dateFormat":"MMMM DD, yyyy","dateFormatLocale":"ar","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"PotatoManga","id":833603780,"baseUrl":"https://ar.potatomanga.xyz","lang":"ar","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/potatomanga/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"ar","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"StellarSaber","id":719550729,"baseUrl":"https://stellarsaber.pro","lang":"ar","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/stellarsaber/icon.png","dateFormat":"MMMMM dd, yyyy","dateFormatLocale":"ar","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Rizz Comic","id":369389150,"baseUrl":"https://rizzfables.com","lang":"en","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/rizzcomic/icon.png","dateFormat":"dd MMM yyyy","dateFormatLocale":"en","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Berserker Scan","id":150485334,"baseUrl":"https://ragnascan.com","lang":"es","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/berserkerscan/icon.png","dateFormat":"MMMM d, yyyy","dateFormatLocale":"es","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Cartel de Manhwas","id":884854005,"baseUrl":"https://carteldemanhwas.com","lang":"es","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/carteldemanhwas/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"es","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"De Todo Un Poco Scan","id":843656091,"baseUrl":"https://dtupscan.com","lang":"es","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/dtupscan/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"es","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Gremory Mangas","id":643211287,"baseUrl":"https://gremorymangas.com","lang":"es","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/gremorymangas/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"es","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"RyujinManga","id":280926444,"baseUrl":"https://ryujinmanga.com","lang":"es","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/ryujinmanga/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"es","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Senpai Ediciones","id":483474103,"baseUrl":"https://senpaiediciones.com","lang":"es","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/senpaiediciones/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"es","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"SkyMangas","id":586822857,"baseUrl":"https://skymangas.com","lang":"es","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/skymangas/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"es","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Legacy Scans","id":310973833,"baseUrl":"https://legacy-scans.com","lang":"fr","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/flamescansfr/icon.png","dateFormat":"MMMM d, yyyy","dateFormatLocale":"fr","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Mangas Scans","id":10569804,"baseUrl":"https://mangas-scans.com","lang":"fr","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/mangasscans/icon.png","dateFormat":"MMMM d, yyyy","dateFormatLocale":"fr","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Rimu Scans","id":1062885024,"baseUrl":"https://rimuscans.fr","lang":"fr","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/rimuscans/icon.png","dateFormat":"MMMM d, yyyy","dateFormatLocale":"fr","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"VF Scan","id":66643810,"baseUrl":"https://www.vfscan.cc","lang":"fr","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/vfscan/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"fr","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Comicaso","id":408387886,"baseUrl":"https://comicaso.com","lang":"id","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/comicaso/icon.png","dateFormat":"MMMM d, yyyy","dateFormatLocale":"id","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Kiryuu","id":729634849,"baseUrl":"https://kiryuu.id","lang":"id","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/kiryuu/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"id","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"APKOMIK","id":851821537,"baseUrl":"https://apkomik.cc","lang":"id","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/komikav/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"id","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"KomikIndo.co","id":1029579773,"baseUrl":"https://komikindo.co","lang":"id","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/komikindoco/icon.png","dateFormat":"MMM dd, yyyy","dateFormatLocale":"id","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Mangakyo","id":350778130,"baseUrl":"https://mangakyo.vip","lang":"id","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/mangakyo/icon.png","dateFormat":"MMM d, yyyy","dateFormatLocale":"id","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"MangaYu","id":815037068,"baseUrl":"https://mangayu.id","lang":"id","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/mangayu/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"id","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Siren Komik","id":933724425,"baseUrl":"https://sirenkomik.my.id","lang":"id","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/mangkomik/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"id","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Tenshi.id","id":74634925,"baseUrl":"https://tenshi.id","lang":"id","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/masterkomik/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"id-id","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Natsu","id":539493591,"baseUrl":"https://natsu.id","lang":"id","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/natsu/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"id","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Shea Manga","id":732403984,"baseUrl":"https://sheakomik.com","lang":"id","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/sheamanga/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"id","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Shirakami","id":653518167,"baseUrl":"https://shirakami.xyz","lang":"id","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/shirakami/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"id","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Walpurgi Scan","id":83686844,"baseUrl":"https://www.walpurgiscan.it","lang":"it","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/walpurgisscan/icon.png","dateFormat":"MMM d, yyyy","dateFormatLocale":"it","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Diskus Scan","id":219319544,"baseUrl":"https://diskusscan.com","lang":"pt-br","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/diskusscan/icon.png","dateFormat":"MMMMM dd, yyyy","dateFormatLocale":"pt-br","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Iris Scanlator","id":627481975,"baseUrl":"https://irisscanlator.com.br","lang":"pt-br","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/irisscanlator/icon.png","dateFormat":"MMMM d, yyyy","dateFormatLocale":"pt-br","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Mangás Chan","id":413321827,"baseUrl":"https://mangaschan.net","lang":"pt-br","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/mangaschan/icon.png","dateFormat":"MMMMM dd, yyyy","dateFormatLocale":"pt-br","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Mangás Online","id":607918644,"baseUrl":"https://mangasonline.cc","lang":"pt-br","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/mangasonline/icon.png","dateFormat":"MMMMM dd, yyyy","dateFormatLocale":"pt-br","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"SSSScanlator","id":429559501,"baseUrl":"https://sssscanlator.com.br","lang":"pt-br","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/sssscanlator/icon.png","dateFormat":"MMMMM dd, yyyy","dateFormatLocale":"pt-br","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Tsundoku Traduções","id":958388028,"baseUrl":"https://tsundoku.com.br","lang":"pt-br","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/tsundokutraducoes/icon.png","dateFormat":"MMMMM d, yyyy","dateFormatLocale":"pt-br","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Manga-Moon","id":592572146,"baseUrl":"https://manga-moons.net","lang":"th","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/mangamoon/icon.png","dateFormat":"MMMM d, yyyy","dateFormatLocale":"th","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Adu Manga","id":278062325,"baseUrl":"https://www.mangacim.com","lang":"tr","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/adumanga/icon.png","dateFormat":"MMMM d, yyy","dateFormatLocale":"tr","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Afrodit Scans","id":589929789,"baseUrl":"https://afroditscans.com","lang":"tr","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/afroditscans/icon.png","dateFormat":"MMMM d, yyy","dateFormatLocale":"tr","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Athena Manga","id":279839170,"baseUrl":"https://athenamanga.com","lang":"tr","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/athenamanga/icon.png","dateFormat":"MMMM d, yyy","dateFormatLocale":"tr","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Gaiatoon","id":135821324,"baseUrl":"https://gaiatoon.com","lang":"tr","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/gaiatoon/icon.png","dateFormat":"MMMM d, yyy","dateFormatLocale":"tr","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"MajorScans","id":448604103,"baseUrl":"https://www.majorscans.com","lang":"tr","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/majorscans/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"tr","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Manga Efendisi","id":676269978,"baseUrl":"https://mangaefendisi.net","lang":"tr","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/mangaefendisi/icon.png","dateFormat":"MMMM d, yyyy","dateFormatLocale":"tr","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Manga Kings","id":550899403,"baseUrl":"https://mangakings.com.tr","lang":"tr","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/mangakings/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"tr","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Merlin Shoujo","id":487637789,"baseUrl":"https://merlinshoujo.com","lang":"tr","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/merlinshoujo/icon.png","dateFormat":"MMMM d, yyy","dateFormatLocale":"tr","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Nirvana Manga","id":212544702,"baseUrl":"https://nirvanamanga.com","lang":"tr","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/nirvanamanga/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"tr","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Pati Manga","id":170419301,"baseUrl":"https://www.patimanga.com","lang":"tr","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/patimanga/icon.png","dateFormat":"MMMM d, yyy","dateFormatLocale":"tr","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Raindrop Fansub","id":380323896,"baseUrl":"https://www.raindropteamfan.com","lang":"tr","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/raindropfansub/icon.png","dateFormat":"MMMM d, yyyy","dateFormatLocale":"tr","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Serein Scan","id":366839092,"baseUrl":"https://sereinscan.com","lang":"tr","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/sereinscan/icon.png","dateFormat":"MMM d, yyy","dateFormatLocale":"tr","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Shijie Scans","id":95172728,"baseUrl":"https://shijiescans.com","lang":"tr","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/shijiescans/icon.png","dateFormat":"MMM d, yyy","dateFormatLocale":"tr","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"SummerToon","id":297221652,"baseUrl":"https://summertoon.me","lang":"tr","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/summertoon/icon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"tr","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Zenith Scans","id":554003129,"baseUrl":"https://zenithscans.com","lang":"tr","typeSource":"mangareader","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/src/zenithscans/icon.png","dateFormat":"MMM d, yyy","dateFormatLocale":"tr","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangareader/mangareader.dart","apiUrl":"","version":"0.1.5","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Scan VF","id":929253523,"baseUrl":"https://www.scan-vf.net","lang":"fr","typeSource":"mmrcms","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mmrcms/src/scanvf/icon.png","dateFormat":"d MMM. yyyy","dateFormatLocale":"en_us","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mmrcms/mmrcms.dart","apiUrl":"","version":"0.0.65","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Komikid","id":400330220,"baseUrl":"https://www.komikid.com","lang":"id","typeSource":"mmrcms","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mmrcms/src/komikid/icon.png","dateFormat":"d MMM. yyyy","dateFormatLocale":"en_us","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mmrcms/mmrcms.dart","apiUrl":"","version":"0.0.65","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"MangaID","id":181458486,"baseUrl":"https://mangaid.click","lang":"id","typeSource":"mmrcms","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mmrcms/src/mangaid/icon.png","dateFormat":"d MMM. yyyy","dateFormatLocale":"en_us","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mmrcms/mmrcms.dart","apiUrl":"","version":"0.0.65","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Jpmangas","id":1009609900,"baseUrl":"https://jpmangas.cc","lang":"fr","typeSource":"mmrcms","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mmrcms/src/jpmangas/icon.png","dateFormat":"d MMM. yyyy","dateFormatLocale":"en_us","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mmrcms/mmrcms.dart","apiUrl":"","version":"0.0.65","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"مانجا اون لاين","id":19018595,"baseUrl":"https://onma.top","lang":"ar","typeSource":"mmrcms","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mmrcms/src/onma/icon.png","dateFormat":"d MMM. yyyy","dateFormatLocale":"en_us","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mmrcms/mmrcms.dart","apiUrl":"","version":"0.0.65","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Read Comics Online","id":1021546729,"baseUrl":"https://readcomicsonline.ru","lang":"en","typeSource":"mmrcms","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mmrcms/src/readcomicsonline/icon.png","dateFormat":"d MMM. yyyy","dateFormatLocale":"en_us","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mmrcms/mmrcms.dart","apiUrl":"","version":"0.0.65","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Lelscan-VF","id":529915550,"baseUrl":"https://www.lelscanvf.cc/","lang":"fr","typeSource":"mmrcms","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mmrcms/src/lelscanvf/icon.png","dateFormat":"d MMM. yyyy","dateFormatLocale":"en_us","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mmrcms/mmrcms.dart","apiUrl":"","version":"0.0.65","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Manga-FR","id":410779276,"baseUrl":"https://manga-fr.me","lang":"fr","typeSource":"mmrcms","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mmrcms/src/mangafr/icon.png","dateFormat":"d MMM. yyyy","dateFormatLocale":"en_us","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mmrcms/mmrcms.dart","apiUrl":"","version":"0.0.65","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"MangaHere","id":434984458,"baseUrl":"http://www.mangahere.cc","lang":"en","typeSource":"single","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/en/mangahere/icon.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/src/en/mangahere/mangahere.dart","apiUrl":"","version":"0.0.7","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"MangaSee","id":531216751,"baseUrl":"https://mangasee123.com","lang":"en","typeSource":"nepnep","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/nepnep/src/mangasee/icon.png","dateFormat":"yyyy-MM-dd HH:mm:ss","dateFormatLocale":"en","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/nepnep/nepnep.dart","apiUrl":"","version":"0.0.65","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"MangaLife","id":434747478,"baseUrl":"https://manga4life.com","lang":"en","typeSource":"nepnep","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/nepnep/src/mangalife/icon.png","dateFormat":"yyyy-MM-dd HH:mm:ss","dateFormatLocale":"en","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/nepnep/nepnep.dart","apiUrl":"","version":"0.0.65","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Mangabat","id":658659024,"baseUrl":"https://m.mangabat.com","lang":"en","typeSource":"mangabox","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangabox/src/mangabat/icon.png","dateFormat":"MMM dd,yy","dateFormatLocale":"en","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangabox/mangabox.dart","apiUrl":"","version":"0.0.6","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Mangairo","id":119266018,"baseUrl":"https://h.mangairo.com","lang":"en","typeSource":"mangabox","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangabox/src/mangairo/icon.png","dateFormat":"MMM-dd-yy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangabox/mangabox.dart","apiUrl":"","version":"0.0.6","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Mangakakalot","id":1071729594,"baseUrl":"https://mangakakalot.com","lang":"en","typeSource":"mangabox","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangabox/src/mangakakalot/icon.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangabox/mangabox.dart","apiUrl":"","version":"0.0.6","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"Manganato","id":796167348,"baseUrl":"https://manganato.com","lang":"en","typeSource":"mangabox","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangabox/src/manganato/icon.png","dateFormat":"MMM dd,yy","dateFormatLocale":"en","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/dart/manga/multisrc/mangabox/mangabox.dart","apiUrl":"","version":"0.0.6","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":0},{"name":"漫画柜","id":219867496,"baseUrl":"https://www.manhuagui.com","lang":"zh","typeSource":"single","iconUrl":"https://www.manhuagui.com/favicon.ico","dateFormat":"","dateFormatLocale":"","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/javascript/manga/src/zh/manhuagui.js","apiUrl":"","version":"0.0.25","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":1},{"name":"漫画DB","id":900808373,"baseUrl":"https://www.manhuadb.com","lang":"zh","typeSource":"single","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/javascript/icon/zh.manhuadb.png","dateFormat":"","dateFormatLocale":"","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/javascript/manga/src/zh/manhuadb.js","apiUrl":"","version":"0.0.25","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":1},{"name":"拷贝漫画","id":109412435,"baseUrl":"https://www.mangacopy.com","lang":"zh","typeSource":"single","iconUrl":"https://hi77-overseas.mangafuna.xyz/static/free.ico","dateFormat":"","dateFormatLocale":"","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/javascript/manga/src/zh/copymanga.js","apiUrl":"https://api.mangacopy.com","version":"0.0.2","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":1},{"name":"动漫之家","id":434793864,"baseUrl":"https://www.dmzj.com","lang":"zh","typeSource":"single","iconUrl":"https://www.dmzj.com/_nuxt/logo_dmzj.1c94014a.png","dateFormat":"","dateFormatLocale":"","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/javascript/manga/src/zh/dmzj.js","apiUrl":"","version":"0.0.25","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":1},{"name":"新新漫画","id":652112892,"baseUrl":"https://www.77mh.nl","lang":"zh","typeSource":"single","iconUrl":"https://www.77mh.nl/favicon.ico","dateFormat":"","dateFormatLocale":"","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/javascript/manga/src/zh/77mh.js","apiUrl":"","version":"0.0.25","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":1},{"name":"Asura Scans","id":524070078,"baseUrl":"https://asuracomic.net","lang":"en","typeSource":"single","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/javascript/icon/en.asurascans.png","dateFormat":"","dateFormatLocale":"","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/javascript/manga/src/en/asurascans.js","apiUrl":"","version":"0.1.65","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":1},{"name":"Mangafire","id":463934370,"baseUrl":"https://mangafire.to","lang":"en","typeSource":"single","iconUrl":"https://mangafire.to/assets/sites/mangafire/favicon.png?v3","dateFormat":"","dateFormatLocale":"","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/javascript/manga/src/all/mangafire.js","apiUrl":"","version":"0.1.2","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":1},{"name":"Mangafire","id":539346615,"baseUrl":"https://mangafire.to","lang":"ja","typeSource":"single","iconUrl":"https://mangafire.to/assets/sites/mangafire/favicon.png?v3","dateFormat":"","dateFormatLocale":"","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/javascript/manga/src/all/mangafire.js","apiUrl":"","version":"0.1.2","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":1},{"name":"Mangafire","id":963891592,"baseUrl":"https://mangafire.to","lang":"fr","typeSource":"single","iconUrl":"https://mangafire.to/assets/sites/mangafire/favicon.png?v3","dateFormat":"","dateFormatLocale":"","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/javascript/manga/src/all/mangafire.js","apiUrl":"","version":"0.1.2","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":1},{"name":"Mangafire","id":368653246,"baseUrl":"https://mangafire.to","lang":"es","typeSource":"single","iconUrl":"https://mangafire.to/assets/sites/mangafire/favicon.png?v3","dateFormat":"","dateFormatLocale":"","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/javascript/manga/src/all/mangafire.js","apiUrl":"","version":"0.1.2","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":1},{"name":"Mangafire","id":842761811,"baseUrl":"https://mangafire.to","lang":"es-la","typeSource":"single","iconUrl":"https://mangafire.to/assets/sites/mangafire/favicon.png?v3","dateFormat":"","dateFormatLocale":"","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/javascript/manga/src/all/mangafire.js","apiUrl":"","version":"0.1.2","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":1},{"name":"Mangafire","id":952845214,"baseUrl":"https://mangafire.to","lang":"pt","typeSource":"single","iconUrl":"https://mangafire.to/assets/sites/mangafire/favicon.png?v3","dateFormat":"","dateFormatLocale":"","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/javascript/manga/src/all/mangafire.js","apiUrl":"","version":"0.1.2","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":1},{"name":"Mangafire","id":361505853,"baseUrl":"https://mangafire.to","lang":"pt-br","typeSource":"single","iconUrl":"https://mangafire.to/assets/sites/mangafire/favicon.png?v3","dateFormat":"","dateFormatLocale":"","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/javascript/manga/src/all/mangafire.js","apiUrl":"","version":"0.1.2","isManga":true,"isFullData":false,"appMinVerReq":"0.2.0","additionalParams":"","sourceCodeLanguage":1}] \ No newline at end of file diff --git a/javascript/anime/src/all/netflixmirror.js b/javascript/anime/src/all/netflixmirror.js new file mode 100644 index 00000000..3fa88c48 --- /dev/null +++ b/javascript/anime/src/all/netflixmirror.js @@ -0,0 +1,202 @@ +const mangayomiSources = [{ + "name": "NetflixMirror", + "lang": "all", + "baseUrl": "https://iosmirror.cc", + "apiUrl": "", + "iconUrl": "https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/javascript/icon/all.netflixmirror.png", + "typeSource": "single", + "isManga": false, + "version": "0.0.45", + "dateFormat": "", + "dateFormatLocale": "", + "pkgPath": "anime/src/all/netflixmirror.js" +}]; + +class DefaultExtension extends MProvider { + async getCookie() { + const addhash = new Document((await new Client().get(`${this.source.baseUrl}/home`, { "cookie": "" })).body).selectFirst("body").attr("data-addhash"); + await new Client().get(`https://userverify.netmirror.app/verify?dp1=${addhash}&a=y`); + let body; + let res; + do { + res = await new Client().post(`${this.source.baseUrl}/verify2.php`, { "cookie": "" }, { "verify": addhash }); + body = res.body; + } while (!body.includes('"statusup":"All Done"')); + return res.headers["set-cookie"]; + } + async request(url, cookie) { + cookie = cookie ?? await this.getCookie(); + return (await new Client().get(this.source.baseUrl + url, { "cookie": `ott=nf; hd=on; ${cookie}` })).body; + } + async getPopular(page) { + return await this.getPages(await this.request("/home"), ".tray-container, #top10") + } + async getLatestUpdates(page) { + return await this.getPages(await this.request("/home"), ".inner-mob-tray-container") + } + async getPages(body, selector) { + const elements = new Document(body).select(selector); + const cookie = await this.getCookie(); + const list = []; + for (const element of elements) { + const linkElement = element.selectFirst("article, .top10-post"); + const id = linkElement.selectFirst("a").attr("data-post"); + if (id.length > 0) { + const imageUrl = linkElement.selectFirst(".card-img-container img, .top10-img img").attr("data-src"); + list.push({ name: JSON.parse(await this.request(`/post.php?id=${id}`, cookie)).title, imageUrl, link: id }); + } + } + return { + list: list, + hasNextPage: false + } + } + async search(query, page, filters) { + const data = JSON.parse(await this.request(`/search.php?s=${query}`)); + const list = []; + data.searchResult.map(async (res) => { + const id = res.id; + list.push({ name: res.t, imageUrl: `https://img.nfmirrorcdn.top/poster/v/${id}.jpg`, link: id }); + }) + + return { + list: list, + hasNextPage: false + } + } + async getDetail(url) { + const cookie = await this.getCookie(); + const data = JSON.parse(await this.request(`/post.php?id=${url}`, cookie)); + const name = data.title; + const genre = [data.ua, ...(data.genre || '').split(',').map(g => g.trim())]; + const description = data.desc; + let episodes = []; + if (data.episodes[0] === null) { + episodes.push({ name, url: JSON.stringify({ id: url, name }) }); + } else { + episodes = data.episodes.map(ep => ({ + name: `${ep.s.replace('S', 'Season ')} ${ep.ep.replace('E', 'Episode ')} : ${ep.t}`, + url: JSON.stringify({ id: ep.id, name }) + })); + } + if (data.nextPageShow === 1) { + const eps = await this.getEpisodes(name, url, data.nextPageSeason, 2, cookie); + episodes.push(...eps); + } + episodes.reverse(); + if (data.season && data.season.length > 1) { + let newEpisodes = []; + const seasonsToProcess = data.season.slice(0, -1); + await Promise.all(seasonsToProcess.map(async (season) => { + const eps = await this.getEpisodes(name, url, season.id, 1, cookie); + newEpisodes.push(...eps); + })); + newEpisodes.reverse(); + episodes.push(...newEpisodes); + + } + + return { + description, status: 1, genre, episodes + }; + } + async getEpisodes(name, eid, sid, page, cookie) { + const episodes = []; + let pg = page; + while (true) { + try { + const data = JSON.parse(await this.request(`/episodes.php?s=${sid}&series=${eid}&page=${pg}`, cookie)); + + data.episodes?.forEach(ep => { + episodes.push({ + name: `${ep.s.replace('S', 'Season ')} ${ep.ep.replace('E', 'Episode ')} : ${ep.t}`, + url: JSON.stringify({ id: ep.id, name }) + }); + }); + + if (data.nextPageShow === 0) break; + pg++; + } catch (_) { + break; + } + } + + return episodes; + } + + + async getVideoList(url) { + const baseUrl = this.source.baseUrl; + const urlData = JSON.parse(url); + const data = JSON.parse(await this.request(`/playlist.php?id=${urlData.id}&t=${urlData.name}`)); + const videoList = []; + for (const playlist of data) { + for (const source of playlist.sources) { + try { + const subtitles = []; + playlist.tracks.filter(track => track.kind === 'captions').forEach(track => { + subtitles.push({ + label: track.label, + file: track.file + }); + }); + const link = baseUrl + source.file; + const headers = + { + 'Host': link.match(/^(?:https?:\/\/)?(?:www\.)?([^\/]+)/)[1], + 'Origin': baseUrl, + 'Referer': `${baseUrl}/` + }; + const resp = await new Client().get(link, headers); + + if (resp.statusCode === 200) { + const masterPlaylist = resp.body; + const audios = []; + masterPlaylist.substringAfter('#EXT-X-MEDIA:').split('#EXT-X-MEDIA:').forEach(it => { + if (it.includes('TYPE=AUDIO')) { + const audioInfo = it.substringAfter('TYPE=AUDIO').substringBefore('\n'); + const language = audioInfo.substringAfter('NAME="').substringBefore('"'); + const url = audioInfo.substringAfter('URI="').substringBefore('"'); + audios.push({ file: url, label: language }); + } + }); + + if (!masterPlaylist.includes('#EXT-X-STREAM-INF:')) { + if (audios.length === 0) { + videoList.push({ url: link, quality: source.label, originalUrl: link, subtitles, headers }); + } else { + videoList.push({ url: link, quality: source.label, originalUrl: link, subtitles, audios, headers }); + } + } else { + masterPlaylist.substringAfter('#EXT-X-STREAM-INF:').split('#EXT-X-STREAM-INF:').forEach(it => { + + const quality = `${it.substringAfter('RESOLUTION=').substringAfter('x').substringBefore(',')}p (${source.label})`; + let videoUrl = it.substringAfter('\n').substringBefore('\n'); + + if (!videoUrl.startsWith('http')) { + videoUrl = resp.request.url.substringBeforeLast('/') + `/${videoUrl}`; + } + const headers = + { + 'Host': videoUrl.match(/^(?:https?:\/\/)?(?:www\.)?([^\/]+)/)[1], + 'Origin': baseUrl, + 'Referer': `${baseUrl}/` + }; + if (audios.length === 0) { + videoList.push({ url: videoUrl, quality, originalUrl: videoUrl, subtitles, headers }); + } else { + videoList.push({ url: videoUrl, quality, originalUrl: videoUrl, subtitles, audios, headers }); + } + + }); + } + } + } catch (_) { + + } + } + } + return videoList; + } + +} \ No newline at end of file diff --git a/javascript/anime/src/de/aniworld.js b/javascript/anime/src/de/aniworld.js index 67c68e21..09a63c7c 100644 --- a/javascript/anime/src/de/aniworld.js +++ b/javascript/anime/src/de/aniworld.js @@ -7,16 +7,20 @@ const mangayomiSources = [{ "typeSource": "single", "itemType": "anime", "isNsfw": false, - "version": "0.0.15", + "version": "0.0.28", "dateFormat": "", "dateFormatLocale": "", "pkgPath": "anime/src/de/aniworld.js" }]; class DefaultExtension extends MProvider { + constructor () { + super(); + this.client = new Client(); + } async getPopular(page) { const baseUrl = this.source.baseUrl; - const res = await new Client().get(`${baseUrl}/beliebte-animes`); + const res = await this.client.get(`${baseUrl}/beliebte-animes`); const elements = new Document(res.body).select("div.seriesListContainer div"); const list = []; for (const element of elements) { @@ -33,7 +37,7 @@ class DefaultExtension extends MProvider { } async getLatestUpdates(page) { const baseUrl = this.source.baseUrl; - const res = await new Client().get(`${baseUrl}/neu`); + const res = await this.client.get(`${baseUrl}/neu`); const elements = new Document(res.body).select("div.seriesListContainer div"); const list = []; for (const element of elements) { @@ -50,13 +54,13 @@ class DefaultExtension extends MProvider { } async search(query, page, filters) { const baseUrl = this.source.baseUrl; - const res = await new Client().get(`${baseUrl}/animes`); + const res = await this.client.get(`${baseUrl}/animes`); const elements = new Document(res.body).select("#seriesContainer > div > ul > li > a").filter(e => e.attr("title").toLowerCase().includes(query.toLowerCase())); const list = []; for (const element of elements) { const name = element.text; const link = element.attr("href"); - const img = new Document((await new Client().get(baseUrl + link)).body).selectFirst("div.seriesCoverBox img").attr("data-src"); + const img = new Document((await this.client.get(baseUrl + link)).body).selectFirst("div.seriesCoverBox img").attr("data-src"); const imageUrl = baseUrl + img; list.push({ name, imageUrl, link }); } @@ -67,7 +71,7 @@ class DefaultExtension extends MProvider { } async getDetail(url) { const baseUrl = this.source.baseUrl; - const res = await new Client().get(baseUrl + url); + const res = await this.client.get(baseUrl + url); const document = new Document(res.body); const imageUrl = baseUrl + document.selectFirst("div.seriesCoverBox img").attr("data-src"); @@ -81,22 +85,23 @@ class DefaultExtension extends MProvider { author = produzent[0].select("li").map(e => e.text).join(", "); } const seasonsElements = document.select("#stream > ul:nth-child(1) > li > a"); - let episodes = []; + + const promises = []; + const episodes = []; for (const element of seasonsElements) { - const eps = await this.parseEpisodesFromSeries(element); - for (const ep of eps) { - episodes.push(ep); + promises.push(this.parseEpisodesFromSeries(element)); + } + for (const p of (await Promise.allSettled(promises))) { + if (p.status == 'fulfilled') { + episodes.push(...p.value); } } episodes.reverse(); - - return { - name, imageUrl, description, author, status: 5, genre, episodes - }; + return { name, imageUrl, description, author, status: 5, genre, episodes }; } async parseEpisodesFromSeries(element) { const seasonId = element.getHref; - const res = await new Client().get(this.source.baseUrl + seasonId); + const res = await this.client.get(this.source.baseUrl + seasonId); const episodeElements = new Document(res.body).select("table.seasonEpisodesList tbody tr"); const list = []; for (const episodeElement of episodeElements) { @@ -105,94 +110,71 @@ class DefaultExtension extends MProvider { return list; } episodeFromElement(element) { + const titleAnchor = element.selectFirst("td.seasonEpisodeTitle a"); + const episodeSpan = titleAnchor.selectFirst("span"); + const url = titleAnchor.attr("href"); + const episodeSeasonId = element.attr("data-episode-season-id"); + let episode = episodeSpan.text.replace(/'/g, "'"); let name = ""; - let url = ""; - if (element.selectFirst("td.seasonEpisodeTitle a").attr("href").includes("/film")) { - const num = element.attr("data-episode-season-id"); - name = `Film ${num}` + " : " + element.selectFirst("td.seasonEpisodeTitle a span").text; - url = element.selectFirst("td.seasonEpisodeTitle a").attr("href"); + if (url.includes("/film")) { + name = `Film ${episodeSeasonId} : ${episode}`; } else { - const season = - element.selectFirst("td.seasonEpisodeTitle a").attr("href").substringAfter("staffel-").substringBefore("/episode");; - const num = element.attr("data-episode-season-id"); - name = `Staffel ${season} Folge ${num}` + " : " + element.selectFirst("td.seasonEpisodeTitle a span").text; - url = element.selectFirst("td.seasonEpisodeTitle a").attr("href"); + const seasonMatch = url.match(/staffel-(\d+)\/episode/); + name = `Staffel ${seasonMatch[1]} Folge ${episodeSeasonId} : ${episode}`; } - if (name.length > 0 && url.length > 0) { - return { name, url } - } - return {} + return name && url ? { name, url } : {}; } async getVideoList(url) { const baseUrl = this.source.baseUrl; - const res = await new Client().get(baseUrl + url); + const res = await this.client.get(baseUrl + url, { + 'Accept': '*/*', + 'Referer': baseUrl + url, + 'Priority': 'u=0, i', + 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:132.0) Gecko/20100101 Firefox/132.0' + }); const document = new Document(res.body); - const redirectlink = document.select("ul.row li"); - const preference = new SharedPreferences(); - const hosterSelection = preference.get("hoster_selection"); + let promises = []; const videos = []; - for (const element of redirectlink) { - try { + + const redirectsElements = document.select("ul.row li"); + const hosterSelection = new SharedPreferences().get("hoster_selection_new"); + const dartClient = new Client({ 'useDartHttpClient': true, "followRedirects": false }); + + for (const element of redirectsElements) { + const host = element.selectFirst("a h4").text; + + if (hosterSelection.includes(host)) { const langkey = element.attr("data-lang-key"); - let language = ""; - if (langkey.includes("3")) { - language = "Deutscher Sub"; - } else if (langkey.includes("1")) { - language = "Deutscher Dub"; - } else if (langkey.includes("2")) { - language = "Englischer Sub"; - } - const redirectgs = baseUrl + element.selectFirst("a.watchEpisode").attr("href"); - const hoster = element.selectFirst("a h4").text; - - if (hoster == "Streamtape" && hosterSelection.includes("Streamtape")) { - const body = (await new Client().get(redirectgs)).body; - const quality = `Streamtape ${language}`; - const vids = await streamTapeExtractor(body.match(/https:\/\/streamtape\.com\/e\/[a-zA-Z0-9]+/g)[0], quality); - for (const vid of vids) { - videos.push(vid); - } - } else if (hoster == "VOE" && hosterSelection.includes("VOE")) { - const body = (await new Client().get(redirectgs)).body; - const quality = `VOE ${language}`; - const vids = await voeExtractor(body.match(/https:\/\/voe\.sx\/e\/[a-zA-Z0-9]+/g)[0], quality); - for (const vid of vids) { - videos.push(vid); - } - } else if (hoster == "Vidoza" && hosterSelection.includes("Vidoza")) { - const body = (await new Client().get(redirectgs)).body; - const quality = `Vidoza ${language}`; - const match = body.match(/https:\/\/[^\s]*\.vidoza\.net\/[^\s]*\.mp4/g); - if (match.length > 0) { - videos.push({ url: match[0], originalUrl: match[0], quality }); - } - } - } catch (_) { - + const lang = (langkey == 1 || langkey == 3) ? 'Deutscher' : 'Englischer'; + const type = (langkey == 1) ? 'Dub' : 'Sub'; + const redirect = baseUrl + element.selectFirst("a.watchEpisode").attr("href"); + promises.push((async (redirect, lang, type, host) => { + const location = (await dartClient.get(redirect)).headers.location; + return await extractAny(location, host.toLowerCase(), lang, type, host); + })(redirect, lang, type, host)); + } + } + for (const p of (await Promise.allSettled(promises))) { + if (p.status == 'fulfilled') { + videos.push.apply(videos, p.value); } } return this.sortVideos(videos); } sortVideos(videos) { const preference = new SharedPreferences(); - const hoster = preference.get("preferred_hoster"); - const subPreference = preference.get("preferred_lang"); + const hoster = RegExp(preference.get("preferred_hoster_new")); + const lang = RegExp(preference.get("preferred_lang")); videos.sort((a, b) => { - let qualityMatchA = 0; - if (a.quality.includes(hoster) && - a.quality.includes(subPreference)) { - qualityMatchA = 1; - } - let qualityMatchB = 0; - if (b.quality.includes(hoster) && - b.quality.includes(subPreference)) { - qualityMatchB = 1; - } + let qualityMatchA = hoster.test(a.quality) * lang.test(a.quality); + let qualityMatchB = hoster.test(b.quality) * lang.test(b.quality); return qualityMatchB - qualityMatchA; }); return videos; } getSourcePreferences() { + const hosterOptions = ["Streamtape", "VOE", "Vidoza", "Doodstream"]; + const languageOptions = ["Deutscher Sub", "Deutscher Dub", "Englischer Sub"]; return [ { "key": "preferred_lang", @@ -200,58 +182,92 @@ class DefaultExtension extends MProvider { "title": "Bevorzugte Sprache", "summary": "", "valueIndex": 0, - "entries": [ - "Deutscher Sub", - "Deutscher Dub", - "Englischer Sub" - ], - "entryValues": [ - "Deutscher Sub", - "Deutscher Dub", - "Englischer Sub" - ] + "entries": languageOptions, + "entryValues": languageOptions } }, { - "key": "preferred_hoster", + "key": "preferred_hoster_new", "listPreference": { "title": "Standard-Hoster", "summary": "", "valueIndex": 0, - "entries": [ - "Streamtape", - "VOE", - "Vidoza" - ], - "entryValues": [ - "Streamtape", - "VOE", - "Vidoza" - ] + "entries": hosterOptions, + "entryValues": hosterOptions } }, { - "key": "hoster_selection", + "key": "hoster_selection_new", "multiSelectListPreference": { "title": "Hoster auswählen", "summary": "", - "entries": [ - "Streamtape", - "VOE", - "Vidoza" - ], - "entryValues": [ - "Streamtape", - "VOE", - "Vidoza" - ], - "values": [ - "Streamtape", - "VOE", - "Vidoza" - ] + "entries": hosterOptions, + "entryValues": hosterOptions, + "values": hosterOptions } } ]; } } + +async function doodExtractor(url) { + const dartClient = new Client({ 'useDartHttpClient': true, "followRedirects": false }); + let response = await dartClient.get(url); + while ("location" in response.headers) { + response = await dartClient.get(response.headers.location); + } + const newUrl = response.request.url; + const doodhost = newUrl.match(/https:\/\/(.*?)\//, newUrl)[0].slice(8, -1); + const md5 = response.body.match(/'\/pass_md5\/(.*?)',/, newUrl)[0].slice(11, -2); + const token = md5.substring(md5.lastIndexOf("/") + 1); + const expiry = new Date().valueOf(); + const randomString = getRandomString(10); + + response = await new Client().get(`https://${doodhost}/pass_md5/${md5}`, { "Referer": newUrl }); + const videoUrl = `${response.body}${randomString}?token=${token}&expiry=${expiry}`; + const headers = { "User-Agent": "Mangayomi", "Referer": doodhost }; + return [{ url: videoUrl, originalUrl: videoUrl, headers: headers, quality: '' }]; +} + +async function vidozaExtractor(url) { + let response = await new Client({ 'useDartHttpClient': true, "followRedirects": true }).get(url); + const videoUrl = response.body.match(/https:\/\/\S*\.mp4/)[0]; + return [{ url: videoUrl, originalUrl: videoUrl, quality: '' }]; +} + +_streamTapeExtractor = streamTapeExtractor; +streamTapeExtractor = async (url) => { + return await _streamTapeExtractor(url, ''); +} + +_voeExtractor = voeExtractor; +voeExtractor = async (url) => { + return (await _voeExtractor(url, '')).map(v => { + v.quality = v.quality.replace(/Voe: (\d+p?)/i, '$1'); + return v; + }); +} + +async function extractAny(link, method, lang, type, host) { + const m = extractAny.methods[method]; + return (!m) ? [] : (await m(link)).map(v => { + v.quality = v.quality ? `${lang} ${type} ${v.quality} ${host}` : `${lang} ${type} ${host}`; + return v; + }); +}; + +extractAny.methods = { + 'doodstream': doodExtractor, + 'streamtape': streamTapeExtractor, + 'vidoza': vidozaExtractor, + 'voe': voeExtractor +}; + +function getRandomString(length) { + const chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890"; + const charArray = new Array(length); + for (let i = 0; i < length; i++) { + charArray[i] = chars[Math.floor(Math.random() * chars.length)]; + } + return charArray.join(""); +} diff --git a/javascript/anime/src/de/serienstream.js b/javascript/anime/src/de/serienstream.js new file mode 100644 index 00000000..64dca94c --- /dev/null +++ b/javascript/anime/src/de/serienstream.js @@ -0,0 +1,273 @@ +const mangayomiSources = [{ + "name": "SerienStream", + "lang": "de", + "baseUrl": "https://s.to", + "apiUrl": "", + "iconUrl": "https://s.to/favicon.ico", + "typeSource": "single", + "isManga": false, + "isNsfw": false, + "version": "0.0.2", + "dateFormat": "", + "dateFormatLocale": "", + "pkgPath": "anime/src/de/serienstream.js" +}]; + +class DefaultExtension extends MProvider { + constructor () { + super(); + this.client = new Client(); + } + async getPopular(page) { + const baseUrl = this.source.baseUrl; + const res = await this.client.get(`${baseUrl}/beliebte-serien`); + const elements = new Document(res.body).select("div.seriesListContainer div"); + const list = []; + for (const element of elements) { + const linkElement = element.selectFirst("a"); + const name = element.selectFirst("h3").text; + const imageUrl = baseUrl + linkElement.selectFirst("img").attr("data-src"); + const link = linkElement.attr("href"); + list.push({ name, imageUrl, link }); + } + return { + list: list, + hasNextPage: false + } + } + async getLatestUpdates(page) { + const baseUrl = this.source.baseUrl; + const res = await this.client.get(`${baseUrl}/neu`); + const elements = new Document(res.body).select("div.seriesListContainer div"); + const list = []; + for (const element of elements) { + const linkElement = element.selectFirst("a"); + const name = element.selectFirst("h3").text; + const imageUrl = baseUrl + linkElement.selectFirst("img").attr("data-src"); + const link = linkElement.attr("href"); + list.push({ name, imageUrl, link }); + } + return { + list: list, + hasNextPage: false + } + } + async search(query, page, filters) { + const baseUrl = this.source.baseUrl; + const res = await this.client.get(`${baseUrl}/serien`); + const elements = new Document(res.body).select("#seriesContainer > div > ul > li > a").filter(e => e.attr("title").toLowerCase().includes(query.toLowerCase())); + const list = []; + for (const element of elements) { + const name = element.text; + const link = element.attr("href"); + const img = new Document((await this.client.get(baseUrl + link)).body).selectFirst("div.seriesCoverBox img").attr("data-src"); + const imageUrl = baseUrl + img; + list.push({ name, imageUrl, link }); + } + return { + list: list, + hasNextPage: false + } + } + async getDetail(url) { + const baseUrl = this.source.baseUrl; + const res = await this.client.get(baseUrl + url); + const document = new Document(res.body); + const imageUrl = baseUrl + + document.selectFirst("div.seriesCoverBox img").attr("data-src"); + const name = document.selectFirst("div.series-title h1 span").text; + const genre = document.select("div.genres ul li").map(e => e.text); + const description = document.selectFirst("p.seri_des").attr("data-full-description"); + const produzent = document.select("div.cast li") + .filter(e => e.outerHtml.includes("Produzent:")); + let author = ""; + if (produzent.length > 0) { + author = produzent[0].select("li").map(e => e.text).join(", "); + } + const seasonsElements = document.select("#stream > ul:nth-child(1) > li > a"); + + const promises = []; + const episodes = []; + for (const element of seasonsElements) { + promises.push(this.parseEpisodesFromSeries(element)); + } + for (const p of (await Promise.allSettled(promises))) { + if (p.status == 'fulfilled') { + episodes.push(...p.value); + } + } + episodes.reverse(); + return { name, imageUrl, description, author, status: 5, genre, episodes }; + } + async parseEpisodesFromSeries(element) { + const seasonId = element.getHref; + const res = await this.client.get(this.source.baseUrl + seasonId); + const episodeElements = new Document(res.body).select("table.seasonEpisodesList tbody tr"); + const list = []; + for (const episodeElement of episodeElements) { + list.push(this.episodeFromElement(episodeElement)); + } + return list; + } + episodeFromElement(element) { + const titleAnchor = element.selectFirst("td.seasonEpisodeTitle a"); + const episodeSpan = titleAnchor.selectFirst("span"); + const url = titleAnchor.attr("href"); + const episodeSeasonId = element.attr("data-episode-season-id"); + let episode = episodeSpan.text.replace(/'/g, "'"); + let name = ""; + if (url.includes("/film")) { + name = `Film ${episodeSeasonId} : ${episode}`; + } else { + const seasonMatch = url.match(/staffel-(\d+)\/episode/); + name = `Staffel ${seasonMatch[1]} Folge ${episodeSeasonId} : ${episode}`; + } + return name && url ? { name, url } : {}; + } + async getVideoList(url) { + const baseUrl = this.source.baseUrl; + const res = await this.client.get(baseUrl + url, { + 'Accept': '*/*', + 'Referer': baseUrl + url, + 'Priority': 'u=0, i', + 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:132.0) Gecko/20100101 Firefox/132.0' + }); + const document = new Document(res.body); + let promises = []; + const videos = []; + + const redirectsElements = document.select("ul.row li"); + const hosterSelection = new SharedPreferences().get("hoster_selection_new"); + const dartClient = new Client({ 'useDartHttpClient': true, "followRedirects": false }); + + for (const element of redirectsElements) { + const host = element.selectFirst("a h4").text; + + if (hosterSelection.includes(host)) { + const langkey = element.attr("data-lang-key"); + const lang = (langkey == 1 || langkey == 3) ? 'Deutscher' : 'Englischer'; + const type = (langkey == 1) ? 'Dub' : 'Sub'; + const redirect = baseUrl + element.selectFirst("a.watchEpisode").attr("href"); + promises.push((async (redirect, lang, type, host) => { + const location = (await dartClient.get(redirect)).headers.location; + return await extractAny(location, host.toLowerCase(), lang, type, host); + })(redirect, lang, type, host)); + } + } + for (const p of (await Promise.allSettled(promises))) { + if (p.status == 'fulfilled') { + videos.push.apply(videos, p.value); + } + } + return this.sortVideos(videos); + } + sortVideos(videos) { + const preference = new SharedPreferences(); + const hoster = RegExp(preference.get("preferred_hoster_new")); + const lang = RegExp(preference.get("preferred_lang")); + videos.sort((a, b) => { + let qualityMatchA = hoster.test(a.quality) * lang.test(a.quality); + let qualityMatchB = hoster.test(b.quality) * lang.test(b.quality); + return qualityMatchB - qualityMatchA; + }); + return videos; + } + getSourcePreferences() { + const hosterOptions = ["Streamtape", "VOE", "Vidoza", "Doodstream"]; + const languageOptions = ["Deutscher Sub", "Deutscher Dub", "Englischer Sub"]; + return [ + { + "key": "preferred_lang", + "listPreference": { + "title": "Bevorzugte Sprache", + "summary": "", + "valueIndex": 0, + "entries": languageOptions, + "entryValues": languageOptions + } + }, + { + "key": "preferred_hoster_new", + "listPreference": { + "title": "Standard-Hoster", + "summary": "", + "valueIndex": 0, + "entries": hosterOptions, + "entryValues": hosterOptions + } + }, + { + "key": "hoster_selection_new", + "multiSelectListPreference": { + "title": "Hoster auswählen", + "summary": "", + "entries": hosterOptions, + "entryValues": hosterOptions, + "values": hosterOptions + } + } + ]; + } +} + +async function doodExtractor(url) { + const dartClient = new Client({ 'useDartHttpClient': true, "followRedirects": false }); + let response = await dartClient.get(url); + while ("location" in response.headers) { + response = await dartClient.get(response.headers.location); + } + const newUrl = response.request.url; + const doodhost = newUrl.match(/https:\/\/(.*?)\//, newUrl)[0].slice(8, -1); + const md5 = response.body.match(/'\/pass_md5\/(.*?)',/, newUrl)[0].slice(11, -2); + const token = md5.substring(md5.lastIndexOf("/") + 1); + const expiry = new Date().valueOf(); + const randomString = getRandomString(10); + + response = await new Client().get(`https://${doodhost}/pass_md5/${md5}`, { "Referer": newUrl }); + const videoUrl = `${response.body}${randomString}?token=${token}&expiry=${expiry}`; + const headers = { "User-Agent": "Mangayomi", "Referer": doodhost }; + return [{ url: videoUrl, originalUrl: videoUrl, headers: headers, quality: '' }]; +} + +async function vidozaExtractor(url) { + let response = await new Client({ 'useDartHttpClient': true, "followRedirects": true }).get(url); + const videoUrl = response.body.match(/https:\/\/\S*\.mp4/)[0]; + return [{ url: videoUrl, originalUrl: videoUrl, quality: '' }]; +} + +_streamTapeExtractor = streamTapeExtractor; +streamTapeExtractor = async (url) => { + return await _streamTapeExtractor(url, ''); +} + +_voeExtractor = voeExtractor; +voeExtractor = async (url) => { + return (await _voeExtractor(url, '')).map(v => { + v.quality = v.quality.replace(/Voe: (\d+p?)/i, '$1'); + return v; + }); +} + +async function extractAny(link, method, lang, type, host) { + const m = extractAny.methods[method]; + return (!m) ? [] : (await m(link)).map(v => { + v.quality = v.quality ? `${lang} ${type} ${v.quality} ${host}` : `${lang} ${type} ${host}`; + return v; + }); +}; + +extractAny.methods = { + 'doodstream': doodExtractor, + 'streamtape': streamTapeExtractor, + 'vidoza': vidozaExtractor, + 'voe': voeExtractor +}; + +function getRandomString(length) { + const chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890"; + const charArray = new Array(length); + for (let i = 0; i < length; i++) { + charArray[i] = chars[Math.floor(Math.random() * chars.length)]; + } + return charArray.join(""); +} diff --git a/javascript/anime/src/en/allanime.js b/javascript/anime/src/en/allanime.js index 6815242b..a69deb4b 100644 --- a/javascript/anime/src/en/allanime.js +++ b/javascript/anime/src/en/allanime.js @@ -7,7 +7,7 @@ const mangayomiSources = [{ "typeSource": "single", "itemType": "anime", "isNsfw": false, - "version": "0.0.25", + "version": "0.0.35", "dateFormat": "", "dateFormatLocale": "", "pkgPath": "anime/src/en/allanime.js" @@ -162,7 +162,7 @@ class DefaultExtension extends MProvider { const encodedGql = `?variables=%0A%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%22showId%22:%20%22${ep.showId}%22,%0A%20%20%20%20%20%20%20%20%20%20%22episodeString%22:%20%22${ep.episodeString}%22,%0A%20%20%20%20%20%20%20%20%20%20%22translationType%22:%20%22${translationType[0]}%22%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20&query=%0A%20%20%20%20%20%20%20%20query(%0A%20%20%20%20%20%20%20%20%20%20$showId:%20String!%0A%20%20%20%20%20%20%20%20%20%20$episodeString:%20String!%0A%20%20%20%20%20%20%20%20%20%20$translationType:%20VaildTranslationTypeEnumType!%0A%20%20%20%20%20%20%20%20)%20%7B%0A%20%20%20%20%20%20%20%20%20%20episode(%0A%20%20%20%20%20%20%20%20%20%20%20%20showId:%20$showId%0A%20%20%20%20%20%20%20%20%20%20%20%20episodeString:%20$episodeString%0A%20%20%20%20%20%20%20%20%20%20%20%20translationType:%20$translationType%0A%20%20%20%20%20%20%20%20%20%20)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20sourceUrls%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20`; const videoJson = JSON.parse(await this.request(encodedGql)); const videos = []; - const altHosterSelection = preferences.get('alt_hoster_selection'); + const altHosterSelection = preferences.get('alt_hoster_selection1'); for (const video of videoJson.data.episode.sourceUrls) { const videoUrl = this.decryptSource(video.sourceUrl); let quality = ""; @@ -193,7 +193,7 @@ class DefaultExtension extends MProvider { videos.push(vid); } } else if (videoUrl.includes("streamlare.com") && altHosterSelection.some(element => 'streamlare' === element)) { - const vids = await streamlareExtractor(videoUrl); + const vids = await streamlareExtractor(videoUrl, 'Streamlare '); for (const vid of vids) { videos.push(vid); } @@ -203,7 +203,7 @@ class DefaultExtension extends MProvider { videos.push(vid); } } else if (videoUrl.includes("wish") && altHosterSelection.some(element => 'streamwish' === element)) { - const vids = await streamwishExtractor(videoUrl); + const vids = await streamWishExtractor(videoUrl, 'StreamWish '); for (const vid of vids) { videos.push(vid); } @@ -213,7 +213,7 @@ class DefaultExtension extends MProvider { } sortVideos(videos) { const preferences = new SharedPreferences(); - const hoster = preferences.get("preferred_hoster"); + const hoster = preferences.get("preferred_hoster1"); const quality = preferences.get("preferred_quality"); videos.sort((a, b) => { let qualityMatchA = 0; @@ -290,7 +290,7 @@ class DefaultExtension extends MProvider { } }, { - "key": "preferred_hoster_", + "key": "preferred_hoster1", "listPreference": { "title": "Preferred Video Server", "summary": "", @@ -302,7 +302,7 @@ class DefaultExtension extends MProvider { "filemoon", "streamwish" ], - "entryValues_": [ + "entryValues": [ "Ac", "Ak", "Kir", "Rab", "Luf-mp4", "Si-Hls", "S-mp4", "Ac-Hls", "Uv-mp4", "Pn-Hls", "vidstreaming", "okru", "mp4upload", "streamlare", "doodstream", @@ -312,7 +312,7 @@ class DefaultExtension extends MProvider { } }, { - "key": "alt_hoster_selection_", + "key": "alt_hoster_selection1", "multiSelectListPreference": { "title": "Enable/Disable Alternative Hosts", "summary": "", diff --git a/javascript/anime/src/es/animefenix.js b/javascript/anime/src/es/animefenix.js new file mode 100644 index 00000000..df82d147 --- /dev/null +++ b/javascript/anime/src/es/animefenix.js @@ -0,0 +1,1128 @@ +const mangayomiSources = [{ + "name": "AnimeFénix", + "lang": "es", + "baseUrl": "https://www3.animefenix.tv", + "apiUrl": "", + "iconUrl": "https://www3.animefenix.tv/themes/fenix-neo/images/AveFenix.png", + "typeSource": "single", + "isManga": false, + "version": "0.1.0", + "dateFormat": "", + "dateFormatLocale": "", + "pkgPath": "anime/src/es/animefenix.js" +}]; + +class DefaultExtension extends MProvider { + constructor () { + super(); + this.client = new Client(); + } + getHeaders(url) { + throw new Error("getHeaders not implemented"); + } + async parseAnimeList(url) { + const res = await this.client.get(url); + const doc = new Document(res.body); + const elements = doc.select("main div.grid a"); + const list = []; + + for (const element of elements) { + const name = element.selectFirst("h3").text; + const imageUrl = element.selectFirst("img").getSrc; + const link = element.getHref; + list.push({ name, imageUrl, link }); + } + const hasNextPage = doc.selectFirst("main nav a:last-child").text.trim() == "Next"; + return { "list": list, "hasNextPage": hasNextPage }; + } + statusFromString(status) { + return { + "En emision": 0, // releasing + "Finalizado": 1, // finished + "Proximamente": 4, // unreleased + }[status] ?? 5; + } + async getPopular(page) { + return this.parseAnimeList(`${this.source.baseUrl}/animes?order=visits&page=${page}`); + } + async getLatestUpdates(page) { + return this.parseAnimeList(`${this.source.baseUrl}/animes?order=updated&page=${page}`); + } + async search(query, page, filters) { + query = query.trim().replaceAll(/\ +/g, "+"); + let url = `${this.source.baseUrl}/animes?q=${query}`; + + // Search sometimes failed because filters were empty. I experienced this mostly on android... + if (!filters || filters.length == 0) { + return this.parseAnimeList(url + `&page=${page}`); + } + + for (const filter of filters[0].state) { + if (filter.state == true) + url += `&type[]=${filter.value}`; + } + + url += `&genero[]=${filters[1].values[filters[1].state].value}`; + + for (const filter of filters[2].state) { + if (filter.state == true) + url += `&estado[]=${filter.value}`; + } + + url += `&order=${filters[3].values[filters[3].state].value}`; + url += `&page=${page}`; + return this.parseAnimeList(url); + } + async getDetail(url) { + const detail = {}; + const res = await this.client.get(url); + const doc = new Document(res.body); + const info = doc.selectFirst('main div.flex'); + + detail.name = info.selectFirst("h1").text; + detail.status = this.statusFromString(info.selectFirst("a").text); + detail.imageUrl = info.selectFirst("img").getSrc; + detail.description = info.selectFirst("h2 + p").text.trim(); + detail.genre = info.select("h2 + div a").map(e => e.text.trim()); + detail.episodes = []; + for (const e of doc.select('main + div ul a').reverse()) { + const name = `Episodio ${detail.episodes.length + 1}`; + const url = e.getHref; + detail.episodes.push({ name, url }); + } + detail.episodes.reverse(); + return detail; + } + // For anime episode video list + async getVideoList(url) { + let res = await this.client.get(url); + let doc = new Document(res.body); + let promises = []; + const videos = []; + + // get type + const type = /\blatino\b/i.test(url) ? 'Dub' : 'Sub'; + + // get names + const hosts = doc.select('main ul a').map(e => e.text); + + // get links + const redirects = []; + let script = doc.selectFirst("script:contains(tabsArray)"); + for (const e of script.text.matchAll(/tabsArray.*? = "(.*?)"/g)) { + redirects.push(e[1]); + }; + + // extract remote video links + const renameLUT = { + 'amazones': 'amazon', + 'burst': 'burstcloud', + 'hide': 'vidhide', + 'ru': 'okru', + 'stream2': 'vidhide', + }; + for (let i = 0; i < hosts.length; i++) { + const host = hosts[i].trim(); + const lhost = host.toLowerCase(); + const method = renameLUT[lhost] ?? lhost; + if (method in extractAny.methods) { + promises.push((async (redirect) => { + const res = await this.client.get(redirect); + const doc = new Document(res.body); + const script = doc.selectFirst('script:contains(play)'); + let link = script.text.match(/src="(.*?)"/)[1]; + + if (method == 'amazon') + link = this.source.baseUrl + link.slice(link.search('/')); + + return await extractAny(link, method, 'Español', type, host); + })(redirects[i])); + } + } + for (const p of (await Promise.allSettled(promises))) { + if (p.status == 'fulfilled') { + videos.push.apply(videos, p.value); + } + } + return sortVideos(videos); + } + getFilterList() { + return [ + { + type_name: "GroupFilter", + name: "Tipo", + state: [ + { + type_name: "CheckBox", + name: "TV", + value: "tv" + }, + { + type_name: "CheckBox", + name: "Película", + value: "movie" + }, + { + type_name: "CheckBox", + name: "Especial", + value: "special" + }, + { + type_name: "CheckBox", + name: "OVA", + value: "ova" + }, + { + type_name: "CheckBox", + name: "DONGHUA", + value: "donghua" + } + ] + }, + { + type_name: "SelectFilter", + type: "genero", + name: "Género", + state: 0, + values: [ + { + type_name: "SelectOption", + name: "Todos", + value: "" + }, + { + type_name: "SelectOption", + name: "Acción", + value: "accion" + }, + { + type_name: "SelectOption", + name: "Ángeles", + value: "angeles" + }, + { + type_name: "SelectOption", + name: "Artes Marciales", + value: "artes-marciales" + }, + { + type_name: "SelectOption", + name: "Aventura", + value: "aventura" + }, + { + type_name: "SelectOption", + name: "Ciencia Ficción", + value: "Ciencia Ficción" + }, + { + type_name: "SelectOption", + name: "Comedia", + value: "comedia" + }, + { + type_name: "SelectOption", + name: "Cyberpunk", + value: "cyberpunk" + }, + { + type_name: "SelectOption", + name: "Demonios", + value: "demonios" + }, + { + type_name: "SelectOption", + name: "Deportes", + value: "deportes" + }, + { + type_name: "SelectOption", + name: "Dragones", + value: "dragones" + }, + { + type_name: "SelectOption", + name: "Drama", + value: "drama" + }, + { + type_name: "SelectOption", + name: "Ecchi", + value: "ecchi" + }, + { + type_name: "SelectOption", + name: "Escolares", + value: "escolares" + }, + { + type_name: "SelectOption", + name: "Fantasía", + value: "fantasia" + }, + { + type_name: "SelectOption", + name: "Gore", + value: "gore" + }, + { + type_name: "SelectOption", + name: "Harem", + value: "harem" + }, + { + type_name: "SelectOption", + name: "Histórico", + value: "historico" + }, + { + type_name: "SelectOption", + name: "Horror", + value: "horror" + }, + { + type_name: "SelectOption", + name: "Infantil", + value: "infantil" + }, + { + type_name: "SelectOption", + name: "Isekai", + value: "isekai" + }, + { + type_name: "SelectOption", + name: "Josei", + value: "josei" + }, + { + type_name: "SelectOption", + name: "Juegos", + value: "juegos" + }, + { + type_name: "SelectOption", + name: "Magia", + value: "magia" + }, + { + type_name: "SelectOption", + name: "Mecha", + value: "mecha" + }, + { + type_name: "SelectOption", + name: "Militar", + value: "militar" + }, + { + type_name: "SelectOption", + name: "Misterio", + value: "misterio" + }, + { + type_name: "SelectOption", + name: "Música", + value: "Musica" + }, + { + type_name: "SelectOption", + name: "Ninjas", + value: "ninjas" + }, + { + type_name: "SelectOption", + name: "Parodia", + value: "parodia" + }, + { + type_name: "SelectOption", + name: "Policía", + value: "policia" + }, + { + type_name: "SelectOption", + name: "Psicológico", + value: "psicologico" + }, + { + type_name: "SelectOption", + name: "Recuerdos de la vida", + value: "Recuerdos de la vida" + }, + { + type_name: "SelectOption", + name: "Romance", + value: "romance" + }, + { + type_name: "SelectOption", + name: "Samurai", + value: "samurai" + }, + { + type_name: "SelectOption", + name: "Sci-Fi", + value: "sci-fi" + }, + { + type_name: "SelectOption", + name: "Seinen", + value: "seinen" + }, + { + type_name: "SelectOption", + name: "Shoujo", + value: "shoujo" + }, + { + type_name: "SelectOption", + name: "Shoujo Ai", + value: "shoujo-ai" + }, + { + type_name: "SelectOption", + name: "Shounen", + value: "shounen" + }, + { + type_name: "SelectOption", + name: "Slice of life", + value: "slice-of-life" + }, + { + type_name: "SelectOption", + name: "Sobrenatural", + value: "sobrenatural" + }, + { + type_name: "SelectOption", + name: "Space", + value: "space" + }, + { + type_name: "SelectOption", + name: "Spokon", + value: "spokon" + }, + { + type_name: "SelectOption", + name: "Steampunk", + value: "steampunk" + }, + { + type_name: "SelectOption", + name: "Superpoder", + value: "superpoder" + }, + { + type_name: "SelectOption", + name: "Thriller", + value: "thriller" + }, + { + type_name: "SelectOption", + name: "Vampiro", + value: "vampiro" + }, + { + type_name: "SelectOption", + name: "Yaoi", + value: "yaoi" + }, + { + type_name: "SelectOption", + name: "Yuri", + value: "yuri" + }, + { + type_name: "SelectOption", + name: "Zombies", + value: "zombies" + } + ] + }, + { + type_name: "GroupFilter", + name: "Estado", + state: [ + { + type_name: "CheckBox", + name: "Emisión", + value: "1" + }, + { + type_name: "CheckBox", + name: "Finalizado", + value: "2" + }, + { + type_name: "CheckBox", + name: "Proximamente", + value: "3" + }, + { + type_name: "CheckBox", + name: "En Cuarentena", + value: "4" + } + ] + }, + { + type_name: "SelectFilter", + type: "sort", + name: "Orden", + state: 0, + values: [ + { + type_name: "SelectOption", + name: "Por Defecto", + value: "default" + }, + { + type_name: "SelectOption", + name: "Recientemente Actualizados", + value: "updated" + }, + { + type_name: "SelectOption", + name: "Recientemente Agregados", + value: "added" + }, + { + type_name: "SelectOption", + name: "Nombre A-Z", + value: "title" + }, + { + type_name: "SelectOption", + name: "Calificación", + value: "likes" + }, + { + type_name: "SelectOption", + name: "Más Vistos", + value: "visits" + } + ] + } + ]; + } + getSourcePreferences() { + return [ + { + key: 'lang', + listPreference: { + title: 'Preferred Language', + summary: 'If available, this language will be chosen by default. Priority = 0 (lower is better)', + valueIndex: 0, + entries: [ + 'Español' + ], + entryValues: [ + 'Español' + ] + } + }, + { + key: 'type', + listPreference: { + title: 'Preferred Type', + summary: 'If available, this type will be chosen by default. Priority = 1 (lower is better)', + valueIndex: 0, + entries: [ + 'Sub' + ], + entryValues: [ + 'Sub' + ] + } + }, + { + key: 'res', + listPreference: { + title: 'Preferred Resolution', + summary: 'If available, this resolution will be chosen by default. Priority = 2 (lower is better)', + valueIndex: 0, + entries: [ + '1080p', + '720p', + '480p' + ], + entryValues: [ + '1080p', + '720p', + '480p' + ] + } + }, + { + key: 'host', + listPreference: { + title: 'Preferred Hoster', + summary: 'If available, this hoster will be chosen by default. Priority = 3 (lower is better)', + valueIndex: 0, + entries: [ + 'Amazon', + 'Burst', + 'Mp4Upload', + 'RU', + 'Sendvid', + 'STREAM2', + 'HIDE', + 'YourUpload', + ], + entryValues: [ + 'Amazon', + 'Burst', + 'Mp4Upload', + 'RU', + 'Sendvid', + 'STREAM2', + 'HIDE', + 'YourUpload', + ] + } + } + ]; + } +} + +/*************************************************************************************************** +* +* mangayomi-js-helpers v1.0 +* +* # Video Extractors +* - vidGuardExtractor +* - doodExtractor +* - vidozaExtractor +* - okruExtractor +* - amazonExtractor +* - vidHideExtractor +* - filemoonExtractor +* - mixdropExtractor +* - burstcloudExtractor (not working, see description) +* +* # Video Extractor Format Wrappers +* - streamWishExtractor +* - voeExtractor +* - mp4UploadExtractor +* - yourUploadExtractor +* - streamTapeExtractor +* - sendVidExtractor +* +* # Video Extractor helpers +* - extractAny +* +* # Playlist Extractors +* - m3u8Extractor +* - jwplayerExtractor +* +* # Extension +* - sortVideos() +* +* # Encoding/Decoding +* - Uint8Array.fromBase64() +* - Uint8Array.prototype.toBase64() +* - Uint8Array.prototype.decode() +* - String.prototype.encode() +* - String.prototype.decode() +* +* # Random string +* - getRandomString() +* +* # URL +* - absUrl() +* +***************************************************************************************************/ + +async function vidGuardExtractor(url) { + // get html + const res = await new Client().get(url); + const doc = new Document(res.body); + const script = doc.selectFirst('script:contains(eval)'); + + // eval code + const code = script.text; + eval?.('var window = {};'); + eval?.(code); + const playlistUrl = globalThis.window.svg.stream; + + // decode sig + const encoded = playlistUrl.match(/sig=(.*?)&/)[1]; + const charCodes = []; + + for (let i = 0; i < encoded.length; i += 2) { + charCodes.push(parseInt(encoded.slice(i, i + 2), 16) ^ 2); + } + + let decoded = Uint8Array.fromBase64( + String.fromCharCode(...charCodes)) + .slice(5, -5) + .reverse(); + + for (let i = 0; i < decoded.length; i += 2) { + let tmp = decoded[i]; + decoded[i] = decoded[i + 1]; + decoded[i + 1] = tmp; + } + + decoded = decoded.decode(); + return await m3u8Extractor(playlistUrl.replace(encoded, decoded), null); +} + +async function doodExtractor(url) { + const dartClient = new Client({ 'useDartHttpClient': true, "followRedirects": false }); + let response = await dartClient.get(url); + while ("location" in response.headers) { + response = await dartClient.get(response.headers.location); + } + const newUrl = response.request.url; + const doodhost = newUrl.match(/https:\/\/(.*?)\//, newUrl)[0].slice(8, -1); + const md5 = response.body.match(/'\/pass_md5\/(.*?)',/, newUrl)[0].slice(11, -2); + const token = md5.substring(md5.lastIndexOf("/") + 1); + const expiry = new Date().valueOf(); + const randomString = getRandomString(10); + + response = await new Client().get(`https://${doodhost}/pass_md5/${md5}`, { "Referer": newUrl }); + const videoUrl = `${response.body}${randomString}?token=${token}&expiry=${expiry}`; + const headers = { "User-Agent": "Mangayomi", "Referer": doodhost }; + return [{ url: videoUrl, originalUrl: videoUrl, headers: headers, quality: '' }]; +} + +async function vidozaExtractor(url) { + let response = await new Client({ 'useDartHttpClient': true, "followRedirects": true }).get(url); + const videoUrl = response.body.match(/https:\/\/\S*\.mp4/)[0]; + return [{ url: videoUrl, originalUrl: videoUrl, quality: '' }]; +} + +async function okruExtractor(url) { + const res = await new Client().get(url); + const doc = new Document(res.body); + const tag = doc.selectFirst('div[data-options]'); + const playlistUrl = tag.attr('data-options').match(/hlsManifestUrl.*?(h.*?id=\d+)/)[1].replaceAll('\\\\u0026', '&'); + return await m3u8Extractor(playlistUrl, null); +} + +async function amazonExtractor(url) { + const res = await new Client().get(url); + const doc = new Document(res.body); + const videoUrl = doc.selectFirst('video').getSrc; + return videoUrl ? [{ url: videoUrl, originalUrl: videoUrl, headers: null, quality: '' }] : []; +} + +async function vidHideExtractor(url) { + const res = await new Client().get(url); + return await jwplayerExtractor(res.body); +} + +async function filemoonExtractor(url) { + let res = await new Client().get(url); + const src = res.body.match(/iframe src="(.*?)"/)?.[1]; + if (src) { + res = await new Client().get(src, { + 'Referer': url, + 'Accept-Language': 'de,en-US;q=0.7,en;q=0.3' + }); + } + return await jwplayerExtractor(res.body); +} + +async function mixdropExtractor(url) { + headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36'}; + let res = await new Client({ 'useDartHttpClient': true, "followRedirects": false }).get(url, headers); + while ("location" in res.headers) { + res = await new Client({ 'useDartHttpClient': true, "followRedirects": false }).get(res.headers.location, headers); + } + const newUrl = res.request.url; + let doc = new Document(res.body); + + const code = doc.selectFirst('script:contains(MDCore):contains(eval)').text; + const unpacked = unpackJs(code); + let videoUrl = unpacked.match(/wurl="(.*?)"/)?.[1]; + + if (!videoUrl) return []; + + videoUrl = 'https:' + videoUrl; + headers.referer = newUrl; + + return [{url: videoUrl, originalUrl: videoUrl, quality: '', headers: headers}]; +} + +/** Does not work: Client always sets 'charset=utf-8' in Content-Type. */ +async function burstcloudExtractor(url) { + let client = new Client(); + let res = await client.get(url); + + const id = res.body.match(/data-file-id="(.*?)"/)[1]; + const headers = { + "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8", + 'Referer': url, + }; + const data = { + 'fileId': id + }; + + res = await client.post(`https://www.burstcloud.co/file/play-request/`, headers, data); + const videoUrl = res.body.match(/cdnUrl":"(.*?)"/)[1]; + return [{ + url: videoUrl, + originalUrl: videoUrl, + headers: { 'Referer': url.match(/.*?:\/\/.*?\//) }, + quality: '' + }]; +} + +_streamWishExtractor = streamWishExtractor; +streamWishExtractor = async (url) => { + return (await _streamWishExtractor(url, '')).map(v => { + v.quality = v.quality.slice(3, -1); + return v; + }); +} + +_voeExtractor = voeExtractor; +voeExtractor = async (url) => { + return (await _voeExtractor(url, '')).map(v => { + v.quality = v.quality.replace(/Voe: (\d+p?)/i, '$1'); + return v; + }); +} + +_mp4UploadExtractor = mp4UploadExtractor; +mp4UploadExtractor = async (url) => { + return (await _mp4UploadExtractor(url)).map(v => { + v.quality = v.quality.match(/\d+p/)?.[0] ?? ''; + return v; + }); +} + +_yourUploadExtractor = yourUploadExtractor; +yourUploadExtractor = async (url) => { + return (await _yourUploadExtractor(url)) + .filter(v => !v.url.includes('/novideo')) + .map(v => { + v.quality = ''; + return v; + }); +} + +_streamTapeExtractor = streamTapeExtractor; +streamTapeExtractor = async (url) => { + return await _streamTapeExtractor(url, ''); +} + +_sendVidExtractor = sendVidExtractor; +sendVidExtractor = async (url) => { + let res = await new Client().get(url); + var videoUrl, quality; + try { + videoUrl = res.body.match(/og:video" content="(.*?\.mp4.*?)"/)[1]; + quality = res.body.match(/og:video:height" content="(.*?)"/)?.[1]; + quality = quality ? quality + 'p' : ''; + } catch (error) { + + } + if (!videoUrl) { + return _sendVidExtractor(url, null, ''); + } + return [{url: videoUrl, originalUrl: videoUrl, quality: quality, headers: null}]; +} + +async function extractAny(url, method, lang, type, host) { + const m = extractAny.methods[method]; + return (!m) ? [] : (await m(url)).map(v => { + v.quality = v.quality ? `${lang} ${type} ${v.quality} ${host}` : `${lang} ${type} ${host}`; + return v; + }); +}; + +extractAny.methods = { + 'amazon': amazonExtractor, + 'burstcloud': burstcloudExtractor, + 'doodstream': doodExtractor, + 'filemoon': filemoonExtractor, + 'mixdrop': mixdropExtractor, + 'mp4upload': mp4UploadExtractor, + 'okru': okruExtractor, + 'sendvid': sendVidExtractor, + 'streamtape': streamTapeExtractor, + 'streamwish': vidHideExtractor, + 'vidguard': vidGuardExtractor, + 'vidhide': vidHideExtractor, + 'vidoza': vidozaExtractor, + 'voe': voeExtractor, + 'yourupload': yourUploadExtractor +}; + +async function m3u8Extractor(url, headers = null) { + // https://developer.apple.com/documentation/http-live-streaming/creating-a-multivariant-playlist + // https://developer.apple.com/documentation/http-live-streaming/adding-alternate-media-to-a-playlist + // define attribute lists + const streamAttributes = [ + ['avg_bandwidth', /AVERAGE-BANDWIDTH=(\d+)/], + ['bandwidth', /\bBANDWIDTH=(\d+)/], + ['resolution', /\bRESOLUTION=([\dx]+)/], + ['framerate', /\bFRAME-RATE=([\d\.]+)/], + ['codecs', /\bCODECS="(.*?)"/], + ['video', /\bVIDEO="(.*?)"/], + ['audio', /\bAUDIO="(.*?)"/], + ['subtitles', /\bSUBTITLES="(.*?)"/], + ['captions', /\bCLOSED-CAPTIONS="(.*?)"/] + ]; + const mediaAttributes = [ + ['type', /\bTYPE=([\w-]*)/], + ['group', /\bGROUP-ID="(.*?)"/], + ['lang', /\bLANGUAGE="(.*?)"/], + ['name', /\bNAME="(.*?)"/], + ['autoselect', /\bAUTOSELECT=(\w*)/], + ['default', /\bDEFAULT=(\w*)/], + ['instream-id', /\bINSTREAM-ID="(.*?)"/], + ['assoc-lang', /\bASSOC-LANGUAGE="(.*?)"/], + ['channels', /\bCHANNELS="(.*?)"/], + ['uri', /\bURI="(.*?)"/] + ]; + const streams = [], videos = {}, audios = {}, subtitles = {}, captions = {}; + const dict = { 'VIDEO': videos, 'AUDIO': audios, 'SUBTITLES': subtitles, 'CLOSED-CAPTIONS': captions }; + + const res = await new Client().get(url, headers); + const text = res.body; + + // collect media + for (const match of text.matchAll(/#EXT-X-MEDIA:(.*)/g)) { + const info = match[1], medium = {}; + for (const attr of mediaAttributes) { + const m = info.match(attr[1]); + medium[attr[0]] = m ? m[1] : null; + } + + const type = medium.type; + delete medium.type; + const group = medium.group; + delete medium.group; + + const typedict = dict[type]; + if (typedict[group] == undefined) + typedict[group] = []; + typedict[group].push(medium); + } + + // collect streams + for (const match of text.matchAll(/#EXT-X-STREAM-INF:(.*)\s*(.*)/g)) { + const info = match[1], stream = { 'url': absUrl(match[2], url) }; + for (const attr of streamAttributes) { + const m = info.match(attr[1]); + stream[attr[0]] = m ? m[1] : null; + } + + stream['video'] = videos[stream.video] ?? null; + stream['audio'] = audios[stream.audio] ?? null; + stream['subtitles'] = subtitles[stream.subtitles] ?? null; + stream['captions'] = captions[stream.captions] ?? null; + + // format resolution or bandwidth + let quality; + if (stream.resolution) { + quality = stream.resolution.match(/x(\d+)/)[1] + 'p'; + } else { + quality = (parseInt(stream.avg_bandwidth ?? stream.bandwidth) / 1000000) + 'Mb/s' + } + + // add stream to list + const subs = stream.subtitles?.map((s) => { + return { file: s.uri, label: s.name }; + }); + const auds = stream.audio?.map((a) => { + return { file: a.uri, label: a.name }; + }); + streams.push({ + url: stream.url, + quality: quality, + originalUrl: stream.url, + headers: headers, + subtitles: subs ?? null, + audios: auds ?? null + }); + } + return streams.length ? streams : [{ + url: url, + quality: '', + originalUrl: url, + headers: headers, + subtitles: null, + audios: null + }]; +} + +async function jwplayerExtractor(text, headers) { + // https://docs.jwplayer.com/players/reference/playlists + const getsetup = /setup\(({[\s\S]*?})\)/; + const getsources = /sources:\s*(\[[\s\S]*?\])/; + const gettracks = /tracks:\s*(\[[\s\S]*?\])/; + const unpacked = unpackJs(text); + + const videos = [], subtitles = []; + + const data = eval('(' + (getsetup.exec(text) || getsetup.exec(unpacked))?.[1] + ')'); + + if (data){ + var sources = data.sources; + var tracks = data.tracks; + } else { + var sources = eval('(' + (getsources.exec(text) || getsources.exec(unpacked))?.[1] + ')'); + var tracks = eval('(' + (gettracks.exec(text) || gettracks.exec(unpacked))?.[1] + ')'); + } + for (t of tracks) { + if (t.type == "captions") { + subtitles.push({file: t.file, label: t.label}); + } + } + for (s of sources) { + if (s.file.includes('master.m3u8')) { + videos.push(...(await m3u8Extractor(s.file, headers))); + } else if (s.file.includes('.mpd')) { + + } else { + videos.push({url: s.file, originalUrl: s.file, quality: '', headers: headers}); + } + } + return videos.map(v => { + v.subtitles = subtitles; + return v; + }); +} + +function sortVideos(videos) { + const pref = new SharedPreferences(); + const getres = RegExp('(\\d+)p?', 'i'); + const lang = RegExp(pref.get('lang'), 'i'); + const type = RegExp(pref.get('type'), 'i'); + const res = RegExp(getres.exec(pref.get('res'))[1], 'i'); + const host = RegExp(pref.get('host'), 'i'); + + let getScore = (q, hasRes) => { + const bLang = lang.test(q), bType = type.test(q), bRes = res.test(q), bHost = host.test(q); + if (hasRes) { + return bLang * (8 + bType * (4 + bRes * (2 + bHost * 1))); + } else { + return bLang * (8 + bType * (4 + (bHost * 3))); + } + } + + return videos.sort((a, b) => { + const resA = getres.exec(a.quality)?.[1]; + const resB = getres.exec(b.quality)?.[1]; + const score = getScore(b.quality, resB) - getScore(a.quality, resA); + + if (score) return score; + + const qA = resA ? a.quality.replace(resA, (9999 - parseInt(resA)).toString()) : a.quality; + const qB = resA ? b.quality.replace(resB, (9999 - parseInt(resB)).toString()) : b.quality; + + return qA.localeCompare(qB); + }); +} + +Uint8Array.fromBase64 = function (b64) { + // [00,01,02,03,04,05,06,07,08,\t,\n,0b,0c,\r,0e,0f,10,11,12,13,14,15,16,17,18,19,1a,1b,1c,1d,1e,1f,' ', !, ", #, $, %, &, ', (, ), *, +,',', -, ., /, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, :, ;, <,'=', >, ?, @,A,B,C,D,E,F,G,H,I,J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z, [, \, ], ^, _, `, a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, {, |, }, ~,7f] + const m = [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 62, -1, 62, -1, 63, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, -1, -1, -1, -1, -1, -1, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, -1, -1, -1, -1, 63, -1, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, -1, -1, -1, -1, -1] + let data = [], val = 0, bits = -8 + for (const c of b64) { + let n = m[c.charCodeAt(0)]; + if (n == -1) break; + val = (val << 6) + n; + bits += 6; + for (; bits >= 0; bits -= 8) + data.push((val >> bits) & 0xFF); + } + return new Uint8Array(data); +} + +Uint8Array.prototype.toBase64 = function () { + const m = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/' + let b64 = '', val = 0, bits = -6; + for (const b of this) { + val = (val << 8) + b; + bits += 8; + while (bits >= 0) { + b64 += m[(val >> bits) & 0x3F]; + bits -= 6; + } + } + if (bits > -6) + b64 += m[(val << -bits) & 0x3F]; + return b64 + ['', '', '==', '='][b64.length % 4]; +} + +Uint8Array.prototype.decode = function (encoding = 'utf-8') { + encoding = encoding.toLowerCase(); + if (encoding == 'utf-8') { + return decodeUTF8(this); + } + return null; +} + +String.prototype.encode = function (encoding = 'utf-8') { + encoding = encoding.toLowerCase(); + if (encoding == 'utf-8') { + return encodeUTF8(this); + } + return null; +} + +String.decode = function (data, encoding = 'utf-8') { + encoding = encoding.toLowerCase(); + if (encoding == 'utf-8') { + return decodeUTF8(data); + } + return null; +} + +function decodeUTF8(data) { + const codes = []; + for (let i = 0; i < data.length;) { + const c = data[i++]; + const len = (c > 0xBF) + (c > 0xDF) + (c > 0xEF); + let val = c & (0xFF >> (len + 1)); + for (const end = i + len; i < end; i++) { + val = (val << 6) + (data[i] & 0x3F); + } + codes.push(val); + } + return String.fromCharCode(...codes); +} + +function encodeUTF8(string) { + const data = []; + for (const c of string) { + const code = c.charCodeAt(0); + const len = (code > 0x7F) + (code > 0x7FF) + (code > 0xFFFF); + let bits = len * 6; + + data.push((len ? ~(0xFF >> len + 1) : (0)) + (code >> bits)); + while (bits > 0) { + data.push(0x80 + ((code >> (bits -= 6)) & 0x3F)) + } + } + return new Uint8Array(data); +} + +function getRandomString(length) { + const chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890"; + let result = ""; + for (let i = 0; i < length; i++) { + const random = Math.floor(Math.random() * 61); + result += chars[random]; + } + return result; +} + +function absUrl(url, base) { + if (url.search(/^\w+:\/\//) == 0) { + return url; + } else if (url.startsWith('/')) { + return base.slice(0, base.lastIndexOf('/')) + url; + } else { + return base.slice(0, base.lastIndexOf('/') + 1) + url; + } +} \ No newline at end of file diff --git a/javascript/anime/src/es/jkanime.js b/javascript/anime/src/es/jkanime.js new file mode 100644 index 00000000..a1ab1bf9 --- /dev/null +++ b/javascript/anime/src/es/jkanime.js @@ -0,0 +1,1398 @@ +const mangayomiSources = [{ + "name": "JKAnime", + "lang": "es", + "baseUrl": "https://jkanime.net", + "apiUrl": "", + "iconUrl": "https://cdn.jkdesu.com/assets2/css/img/favicon.ico", + "typeSource": "single", + "isManga": false, + "version": "0.1.0", + "dateFormat": "", + "dateFormatLocale": "", + "pkgPath": "anime/src/es/jkanime.js" +}]; + +class DefaultExtension extends MProvider { + constructor () { + super(); + this.client = new Client(); + } + getHeaders(url) { + throw new Error("getHeaders not implemented"); + } + async parseAnimeList(url) { + const res = await this.client.get(url); + const doc = new Document(res.body); + const code = doc.selectFirst("script:contains(var animes)").text; + const list = []; + + for (const element of code.matchAll(/{.*?short_title.*?}/g)) { + const data = JSON.parse(element[0]); + const name = data.title; + const imageUrl = data.image; + const link = this.source.baseUrl + '/' + data.slug; + list.push({ name, imageUrl, link }); + } + + const nextBtn = doc.selectFirst("a.nav-next"); + const hasNextPage = nextBtn && nextBtn.text != ''; + return { "list": list, "hasNextPage": hasNextPage }; + } + statusFromString(status) { + return { + "En emision": 0, + "Finalizado": 1, + "Concluido": 1 + }[status] ?? 5; + } + async getPopular(page) { + const res = await this.client.get('https://jkanime.net/top/'); + const doc = new Document(res.body); + const list = []; + + for (const i of doc.select('div#conb')) { + const name = i.selectFirst('h2 a').text; + const imageUrl = i.selectFirst('img').getSrc; + let link = i.selectFirst('a').getHref; + link = link.endsWith('/') ? link.slice(0, -1) : link; + list.push({ name, imageUrl, link }); + } + + return { "list": list, "hasNextPage": false }; + } + async getLatestUpdates(page) { + return this.parseAnimeList(`${this.source.baseUrl}/directorio/${page}/`); + } + async search(query, page, filters) { + query = query.trim().replaceAll(/\ +/g, "_"); + + // Search sometimes failed because filters were empty. I experienced this mostly on android... + if (!filters || filters.length == 0) { + return this.parseAnimeList(`${this.source.baseUrl}/buscar/${query}/${page}/`); + } else if (query) { + var url = `${this.source.baseUrl}/buscar/${query}/${page}/`; + url += `?filtro=${filters[1].values[filters[1].state].value}`; + url += `&tipo=${filters[5].values[filters[5].state].value}`; + url += `&estado=${filters[6].values[filters[6].state].value}`; + } else { + var url = `${this.source.baseUrl}/directorio/${query}/${page}`; + url += `/${filters[1].values[filters[1].state].value}`; + url += `/${filters[2].values[filters[2].state].value}`; + url += `/${filters[3].values[filters[3].state].value}`; + url += `/${filters[4].values[filters[4].state].value}`; + url += `/${filters[5].values[filters[5].state].value}`; + url += `/${filters[6].values[filters[6].state].value}`; + url += `/${filters[7].values[filters[7].state].value}`; + url += `/${filters[8].values[filters[8].state].value}`; + } + return this.parseAnimeList(url); + } + async getDetail(url) { + let res = await this.client.get(url); + const doc = new Document(res.body); + const detail = {}; + + const id = res.body.match(/data-anime="(\d+)"/)[1]; + const lastEpisodeUrl = `${this.source.baseUrl}/ajax/last_episode/${id}`; + + const info = doc.selectFirst("div.anime__details__content"); + const extInfo = doc.selectFirst('div.aninfo'); + detail.name = info.selectFirst("h3").text; + detail.imageUrl = info.selectFirst("div.anime__details__pic").attr('data-setbg'); + detail.description = info.selectFirst("p.sinopsis").text.trim(); + detail.status = this.statusFromString(extInfo.selectFirst("span:contains(Estado) + span").text); + detail.genre = extInfo.select("li:contains(Genero) a").map(e => e.text); + + // get episodes + detail.episodes = []; + res = await this.client.get(lastEpisodeUrl, {'User-Agent': 'Mangayomi'}); + const end = parseInt(JSON.parse(res.body)[0].number); + for (let i = 1; i <= end; i++) { + detail.episodes.push({ + name: 'Episodio ' + i, + url: url + '/' + i + }); + } + detail.episodes.reverse(); + return detail; + } + async extractRedirect(redirect, referer, lang, type, host) { + const res = await this.client.get(this.source.baseUrl + redirect, {'Referer': referer}); + const m3u = res.body.match(/http.*?.m3u8/)[0]; + return [{ url: m3u, originalUrl: m3u, headers: {'Referer': referer}, quality: `${lang} ${type} ${host}` }]; + }; + // For anime episode video list + async getVideoList(url) { + const res = await this.client.get(url); + const doc = new Document(res.body); + let promises = []; + const videos = []; + + const code = doc.selectFirst("script:contains(var video)").text; + + // extract direct video links + for (const m of code.matchAll(/video\s*\[\d+\].*?src="(.*?)"/g)) { + promises.push(this.extractRedirect(m[1], url, 'Español', 'Sub', 'Desu')); + } + promises = [Promise.any(promises)]; + + // extract remote video links + for (const server of code.matchAll(/{"remote"\s*:\s*"(.*?)".*?"server"\s*:\s*"(.*?)"/g)) { + const link = Uint8Array.fromBase64(server[1]).decode('utf-8'); + const host = server[2]; + promises.push(extractAny(link, host.toLowerCase(), 'Español', 'Sub', host)); + } + for (const p of (await Promise.allSettled(promises))) { + if (p.status == 'fulfilled') { + videos.push.apply(videos, p.value); + } + } + return sortVideos(videos); + } + getFilterList() { + return [ + { + type_name: "HeaderFilter", + type: "info", + name: "IMPORTANT: Some filters do not work when searching text!", + state: 0 + }, + { + type_name: "SelectFilter", + type: "filtro", + name: "Filtro", + state: 0, + values: [ + { + type_name: "SelectOption", + name: "Por fecha", + value: "" + }, + { + type_name: "SelectOption", + name: "Por nombre", + value: "nombre" + } + ] + }, + { + type_name: "SelectFilter", + type: "genero", + name: "Género", + state: 0, + values: [ + { + type_name: "SelectOption", + name: "Género", + value: "" + }, + { + type_name: "SelectOption", + name: "Accion", + value: "accion" + }, + { + type_name: "SelectOption", + name: "Aventura", + value: "aventura" + }, + { + type_name: "SelectOption", + name: "Autos", + value: "autos" + }, + { + type_name: "SelectOption", + name: "Comedia", + value: "comedia" + }, + { + type_name: "SelectOption", + name: "Dementia", + value: "dementia" + }, + { + type_name: "SelectOption", + name: "Demonios", + value: "demonios" + }, + { + type_name: "SelectOption", + name: "Misterio", + value: "misterio" + }, + { + type_name: "SelectOption", + name: "Drama", + value: "drama" + }, + { + type_name: "SelectOption", + name: "Ecchi", + value: "ecchi" + }, + { + type_name: "SelectOption", + name: "Fantasia", + value: "fantasia" + }, + { + type_name: "SelectOption", + name: "Juegos", + value: "juegos" + }, + { + type_name: "SelectOption", + name: "Hentai", + value: "hentai" + }, + { + type_name: "SelectOption", + name: "Historico", + value: "historico" + }, + { + type_name: "SelectOption", + name: "Terror", + value: "terror" + }, + { + type_name: "SelectOption", + name: "Magia", + value: "magia" + }, + { + type_name: "SelectOption", + name: "Artes Marciales", + value: "artes-marciales" + }, + { + type_name: "SelectOption", + name: "Mecha", + value: "mecha" + }, + { + type_name: "SelectOption", + name: "Musica", + value: "musica" + }, + { + type_name: "SelectOption", + name: "Parodia", + value: "parodia" + }, + { + type_name: "SelectOption", + name: "Samurai", + value: "samurai" + }, + { + type_name: "SelectOption", + name: "Romance", + value: "romance" + }, + { + type_name: "SelectOption", + name: "Colegial", + value: "colegial" + }, + { + type_name: "SelectOption", + name: "Sci-Fi", + value: "sci-fi" + }, + { + type_name: "SelectOption", + name: "Shoujo Ai", + value: "shoujo-ai" + }, + { + type_name: "SelectOption", + name: "Shounen Ai", + value: "shounen-ai" + }, + { + type_name: "SelectOption", + name: "Space", + value: "space" + }, + { + type_name: "SelectOption", + name: "Deportes", + value: "deportes" + }, + { + type_name: "SelectOption", + name: "Super Poderes", + value: "super-poderes" + }, + { + type_name: "SelectOption", + name: "Vampiros", + value: "vampiros" + }, + { + type_name: "SelectOption", + name: "Yaoi", + value: "yaoi" + }, + { + type_name: "SelectOption", + name: "Yuri", + value: "yuri" + }, + { + type_name: "SelectOption", + name: "Harem", + value: "harem" + }, + { + type_name: "SelectOption", + name: "Cosas de la vida", + value: "cosas-de-la-vida" + }, + { + type_name: "SelectOption", + name: "Sobrenatural", + value: "sobrenatural" + }, + { + type_name: "SelectOption", + name: "Militar", + value: "militar" + }, + { + type_name: "SelectOption", + name: "Policial", + value: "policial" + }, + { + type_name: "SelectOption", + name: "Psicologico", + value: "psicologico" + }, + { + type_name: "SelectOption", + name: "Thriller", + value: "thriller" + }, + { + type_name: "SelectOption", + name: "Español Latino", + value: "latino" + }, + { + type_name: "SelectOption", + name: "Isekai", + value: "isekai" + } + ] + }, + { + type_name: "SelectFilter", + type: "demografia", + name: "Demografía", + state: 0, + values: [ + { + type_name: "SelectOption", + name: "Demografía", + value: "" + }, + { + type_name: "SelectOption", + name: "Niños", + value: "nios" + }, + { + type_name: "SelectOption", + name: "Shoujo", + value: "shoujo" + }, + { + type_name: "SelectOption", + name: "Shounen", + value: "shounen" + }, + { + type_name: "SelectOption", + name: "Seinen", + value: "seinen" + }, + { + type_name: "SelectOption", + name: "Josei", + value: "josei" + } + ] + }, + { + type_name: "SelectFilter", + type: "categoria", + name: "Categoría", + state: 0, + values: [ + { + type_name: "SelectOption", + name: "Categoría", + value: "" + }, + { + type_name: "SelectOption", + name: "Donghua", + value: "donghua" + } + ] + }, + { + type_name: "SelectFilter", + type: "tipo", + name: "Tipo", + state: 0, + values: [ + { + type_name: "SelectOption", + name: "Tipo", + value: "" + }, + { + type_name: "SelectOption", + name: "Animes", + value: "animes" + }, + { + type_name: "SelectOption", + name: "Peliculas", + value: "peliculas" + }, + { + type_name: "SelectOption", + name: "Especiales", + value: "especiales" + }, + { + type_name: "SelectOption", + name: "Ovas", + value: "ovas" + }, + { + type_name: "SelectOption", + name: "Onas", + value: "onas" + } + ] + }, + { + type_name: "SelectFilter", + type: "estado", + name: "Estado", + state: 0, + values: [ + { + type_name: "SelectOption", + name: "Estado", + value: "" + }, + { + type_name: "SelectOption", + name: "En emisión", + value: "emision" + }, + { + type_name: "SelectOption", + name: "Finalizado", + value: "finalizados" + }, + { + type_name: "SelectOption", + name: "Por Estrenar", + value: "estrenos" + } + ] + }, + { + type_name: "SelectFilter", + type: "ano", + name: "Año", + state: 0, + values: [ + { + type_name: "SelectOption", + name: "Año", + value: "Año" + }, + { + type_name: "SelectOption", + name: "2024", + value: "2024" + }, + { + type_name: "SelectOption", + name: "2023", + value: "2023" + }, + { + type_name: "SelectOption", + name: "2022", + value: "2022" + }, + { + type_name: "SelectOption", + name: "2021", + value: "2021" + }, + { + type_name: "SelectOption", + name: "2020", + value: "2020" + }, + { + type_name: "SelectOption", + name: "2019", + value: "2019" + }, + { + type_name: "SelectOption", + name: "2018", + value: "2018" + }, + { + type_name: "SelectOption", + name: "2017", + value: "2017" + }, + { + type_name: "SelectOption", + name: "2016", + value: "2016" + }, + { + type_name: "SelectOption", + name: "2015", + value: "2015" + }, + { + type_name: "SelectOption", + name: "2014", + value: "2014" + }, + { + type_name: "SelectOption", + name: "2013", + value: "2013" + }, + { + type_name: "SelectOption", + name: "2012", + value: "2012" + }, + { + type_name: "SelectOption", + name: "2011", + value: "2011" + }, + { + type_name: "SelectOption", + name: "2010", + value: "2010" + }, + { + type_name: "SelectOption", + name: "2009", + value: "2009" + }, + { + type_name: "SelectOption", + name: "2008", + value: "2008" + }, + { + type_name: "SelectOption", + name: "2007", + value: "2007" + }, + { + type_name: "SelectOption", + name: "2006", + value: "2006" + }, + { + type_name: "SelectOption", + name: "2005", + value: "2005" + }, + { + type_name: "SelectOption", + name: "2004", + value: "2004" + }, + { + type_name: "SelectOption", + name: "2003", + value: "2003" + }, + { + type_name: "SelectOption", + name: "2002", + value: "2002" + }, + { + type_name: "SelectOption", + name: "2001", + value: "2001" + }, + { + type_name: "SelectOption", + name: "2000", + value: "2000" + }, + { + type_name: "SelectOption", + name: "1999", + value: "1999" + }, + { + type_name: "SelectOption", + name: "1998", + value: "1998" + }, + { + type_name: "SelectOption", + name: "1997", + value: "1997" + }, + { + type_name: "SelectOption", + name: "1996", + value: "1996" + }, + { + type_name: "SelectOption", + name: "1995", + value: "1995" + }, + { + type_name: "SelectOption", + name: "1994", + value: "1994" + }, + { + type_name: "SelectOption", + name: "1993", + value: "1993" + }, + { + type_name: "SelectOption", + name: "1992", + value: "1992" + }, + { + type_name: "SelectOption", + name: "1991", + value: "1991" + }, + { + type_name: "SelectOption", + name: "1990", + value: "1990" + }, + { + type_name: "SelectOption", + name: "1989", + value: "1989" + }, + { + type_name: "SelectOption", + name: "1988", + value: "1988" + }, + { + type_name: "SelectOption", + name: "1987", + value: "1987" + }, + { + type_name: "SelectOption", + name: "1986", + value: "1986" + }, + { + type_name: "SelectOption", + name: "1985", + value: "1985" + }, + { + type_name: "SelectOption", + name: "1984", + value: "1984" + }, + { + type_name: "SelectOption", + name: "1983", + value: "1983" + }, + { + type_name: "SelectOption", + name: "1982", + value: "1982" + }, + { + type_name: "SelectOption", + name: "1981", + value: "1981" + } + ] + }, + { + type_name: "SelectFilter", + type: "temporada", + name: "Temporada", + state: 0, + values: [ + { + type_name: "SelectOption", + name: "Temporada", + value: "" + }, + { + type_name: "SelectOption", + name: "Invierno", + value: "invierno" + }, + { + type_name: "SelectOption", + name: "Primavera", + value: "primavera" + }, + { + type_name: "SelectOption", + name: "Verano", + value: "verano" + }, + { + type_name: "SelectOption", + name: "Otoño", + value: "otoño" + } + ] + } + ]; + } + getSourcePreferences() { + return [ + { + key: 'lang', + listPreference: { + title: 'Preferred Language', + summary: 'If available, this language will be chosen by default. Priority = 0 (lower is better)', + valueIndex: 0, + entries: [ + 'Español' + ], + entryValues: [ + 'Español' + ] + } + }, + { + key: 'type', + listPreference: { + title: 'Preferred Type', + summary: 'If available, this type will be chosen by default. Priority = 1 (lower is better)', + valueIndex: 0, + entries: [ + 'Sub' + ], + entryValues: [ + 'Sub' + ] + } + }, + { + key: 'res', + listPreference: { + title: 'Preferred Resolution', + summary: 'If available, this resolution will be chosen by default. Priority = 2 (lower is better)', + valueIndex: 0, + entries: [ + '1080p', + '720p', + '480p' + ], + entryValues: [ + '1080p', + '720p', + '480p' + ] + } + }, + { + key: 'host', + listPreference: { + title: 'Preferred Hoster', + summary: 'If available, this hoster will be chosen by default. Priority = 3 (lower is better)', + valueIndex: 0, + entries: [ + 'Desu', + 'Filemoon', + 'Mixdrop', + 'Mp4Upload', + 'Streamtape', + 'Streamwish', + 'Vidhide', + 'Voe' + ], + entryValues: [ + 'Desu', + 'Filemoon', + 'Mixdrop', + 'Mp4Upload', + 'Streamtape', + 'Streamwish', + 'Vidhide', + 'Voe' + ] + } + } + ]; + } +} + +/*************************************************************************************************** +* +* mangayomi-js-helpers v1.0 +* +* # Video Extractors +* - vidGuardExtractor +* - doodExtractor +* - vidozaExtractor +* - okruExtractor +* - amazonExtractor +* - vidHideExtractor +* - filemoonExtractor +* - mixdropExtractor +* - burstcloudExtractor (not working, see description) +* +* # Video Extractor Format Wrappers +* - streamWishExtractor +* - voeExtractor +* - mp4UploadExtractor +* - yourUploadExtractor +* - streamTapeExtractor +* - sendVidExtractor +* +* # Video Extractor helpers +* - extractAny +* +* # Playlist Extractors +* - m3u8Extractor +* - jwplayerExtractor +* +* # Extension +* - sortVideos() +* +* # Encoding/Decoding +* - Uint8Array.fromBase64() +* - Uint8Array.prototype.toBase64() +* - Uint8Array.prototype.decode() +* - String.prototype.encode() +* - String.prototype.decode() +* +* # Random string +* - getRandomString() +* +* # URL +* - absUrl() +* +***************************************************************************************************/ + +async function vidGuardExtractor(url) { + // get html + const res = await new Client().get(url); + const doc = new Document(res.body); + const script = doc.selectFirst('script:contains(eval)'); + + // eval code + const code = script.text; + eval?.('var window = {};'); + eval?.(code); + const playlistUrl = globalThis.window.svg.stream; + + // decode sig + const encoded = playlistUrl.match(/sig=(.*?)&/)[1]; + const charCodes = []; + + for (let i = 0; i < encoded.length; i += 2) { + charCodes.push(parseInt(encoded.slice(i, i + 2), 16) ^ 2); + } + + let decoded = Uint8Array.fromBase64( + String.fromCharCode(...charCodes)) + .slice(5, -5) + .reverse(); + + for (let i = 0; i < decoded.length; i += 2) { + let tmp = decoded[i]; + decoded[i] = decoded[i + 1]; + decoded[i + 1] = tmp; + } + + decoded = decoded.decode(); + return await m3u8Extractor(playlistUrl.replace(encoded, decoded), null); +} + +async function doodExtractor(url) { + const dartClient = new Client({ 'useDartHttpClient': true, "followRedirects": false }); + let response = await dartClient.get(url); + while ("location" in response.headers) { + response = await dartClient.get(response.headers.location); + } + const newUrl = response.request.url; + const doodhost = newUrl.match(/https:\/\/(.*?)\//, newUrl)[0].slice(8, -1); + const md5 = response.body.match(/'\/pass_md5\/(.*?)',/, newUrl)[0].slice(11, -2); + const token = md5.substring(md5.lastIndexOf("/") + 1); + const expiry = new Date().valueOf(); + const randomString = getRandomString(10); + + response = await new Client().get(`https://${doodhost}/pass_md5/${md5}`, { "Referer": newUrl }); + const videoUrl = `${response.body}${randomString}?token=${token}&expiry=${expiry}`; + const headers = { "User-Agent": "Mangayomi", "Referer": doodhost }; + return [{ url: videoUrl, originalUrl: videoUrl, headers: headers, quality: '' }]; +} + +async function vidozaExtractor(url) { + let response = await new Client({ 'useDartHttpClient': true, "followRedirects": true }).get(url); + const videoUrl = response.body.match(/https:\/\/\S*\.mp4/)[0]; + return [{ url: videoUrl, originalUrl: videoUrl, quality: '' }]; +} + +async function okruExtractor(url) { + const res = await new Client().get(url); + const doc = new Document(res.body); + const tag = doc.selectFirst('div[data-options]'); + const playlistUrl = tag.attr('data-options').match(/hlsManifestUrl.*?(h.*?id=\d+)/)[1].replaceAll('\\\\u0026', '&'); + return await m3u8Extractor(playlistUrl, null); +} + +async function amazonExtractor(url) { + const res = await new Client().get(url); + const doc = new Document(res.body); + const videoUrl = doc.selectFirst('video').getSrc; + return videoUrl ? [{ url: videoUrl, originalUrl: videoUrl, headers: null, quality: '' }] : []; +} + +async function vidHideExtractor(url) { + const res = await new Client().get(url); + return await jwplayerExtractor(res.body); +} + +async function filemoonExtractor(url) { + let res = await new Client().get(url); + const src = res.body.match(/iframe src="(.*?)"/)?.[1]; + if (src) { + res = await new Client().get(src, { + 'Referer': url, + 'Accept-Language': 'de,en-US;q=0.7,en;q=0.3' + }); + } + return await jwplayerExtractor(res.body); +} + +async function mixdropExtractor(url) { + headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36'}; + let res = await new Client({ 'useDartHttpClient': true, "followRedirects": false }).get(url, headers); + while ("location" in res.headers) { + res = await new Client({ 'useDartHttpClient': true, "followRedirects": false }).get(res.headers.location, headers); + } + const newUrl = res.request.url; + let doc = new Document(res.body); + + const code = doc.selectFirst('script:contains(MDCore):contains(eval)').text; + const unpacked = unpackJs(code); + let videoUrl = unpacked.match(/wurl="(.*?)"/)?.[1]; + + if (!videoUrl) return []; + + videoUrl = 'https:' + videoUrl; + headers.referer = newUrl; + + return [{url: videoUrl, originalUrl: videoUrl, quality: '', headers: headers}]; +} + +/** Does not work: Client always sets 'charset=utf-8' in Content-Type. */ +async function burstcloudExtractor(url) { + let client = new Client(); + let res = await client.get(url); + + const id = res.body.match(/data-file-id="(.*?)"/)[1]; + const headers = { + "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8", + 'Referer': url, + }; + const data = { + 'fileId': id + }; + + res = await client.post(`https://www.burstcloud.co/file/play-request/`, headers, data); + const videoUrl = res.body.match(/cdnUrl":"(.*?)"/)[1]; + return [{ + url: videoUrl, + originalUrl: videoUrl, + headers: { 'Referer': url.match(/.*?:\/\/.*?\//) }, + quality: '' + }]; +} + +_streamWishExtractor = streamWishExtractor; +streamWishExtractor = async (url) => { + return (await _streamWishExtractor(url, '')).map(v => { + v.quality = v.quality.slice(3, -1); + return v; + }); +} + +_voeExtractor = voeExtractor; +voeExtractor = async (url) => { + return (await _voeExtractor(url, '')).map(v => { + v.quality = v.quality.replace(/Voe: (\d+p?)/i, '$1'); + return v; + }); +} + +_mp4UploadExtractor = mp4UploadExtractor; +mp4UploadExtractor = async (url) => { + return (await _mp4UploadExtractor(url)).map(v => { + v.quality = v.quality.match(/\d+p/)?.[0] ?? ''; + return v; + }); +} + +_yourUploadExtractor = yourUploadExtractor; +yourUploadExtractor = async (url) => { + return (await _yourUploadExtractor(url)) + .filter(v => !v.url.includes('/novideo')) + .map(v => { + v.quality = ''; + return v; + }); +} + +_streamTapeExtractor = streamTapeExtractor; +streamTapeExtractor = async (url) => { + return await _streamTapeExtractor(url, ''); +} + +_sendVidExtractor = sendVidExtractor; +sendVidExtractor = async (url) => { + let res = await new Client().get(url); + var videoUrl, quality; + try { + videoUrl = res.body.match(/og:video" content="(.*?\.mp4.*?)"/)[1]; + quality = res.body.match(/og:video:height" content="(.*?)"/)?.[1]; + quality = quality ? quality + 'p' : ''; + } catch (error) { + + } + if (!videoUrl) { + return _sendVidExtractor(url, null, ''); + } + return [{url: videoUrl, originalUrl: videoUrl, quality: quality, headers: null}]; +} + +async function extractAny(url, method, lang, type, host) { + const m = extractAny.methods[method]; + return (!m) ? [] : (await m(url)).map(v => { + v.quality = v.quality ? `${lang} ${type} ${v.quality} ${host}` : `${lang} ${type} ${host}`; + return v; + }); +}; + +extractAny.methods = { + 'amazon': amazonExtractor, + 'burstcloud': burstcloudExtractor, + 'doodstream': doodExtractor, + 'filemoon': filemoonExtractor, + 'mixdrop': mixdropExtractor, + 'mp4upload': mp4UploadExtractor, + 'okru': okruExtractor, + 'sendvid': sendVidExtractor, + 'streamtape': streamTapeExtractor, + 'streamwish': vidHideExtractor, + 'vidguard': vidGuardExtractor, + 'vidhide': vidHideExtractor, + 'vidoza': vidozaExtractor, + 'voe': voeExtractor, + 'yourupload': yourUploadExtractor +}; + +async function m3u8Extractor(url, headers = null) { + // https://developer.apple.com/documentation/http-live-streaming/creating-a-multivariant-playlist + // https://developer.apple.com/documentation/http-live-streaming/adding-alternate-media-to-a-playlist + // define attribute lists + const streamAttributes = [ + ['avg_bandwidth', /AVERAGE-BANDWIDTH=(\d+)/], + ['bandwidth', /\bBANDWIDTH=(\d+)/], + ['resolution', /\bRESOLUTION=([\dx]+)/], + ['framerate', /\bFRAME-RATE=([\d\.]+)/], + ['codecs', /\bCODECS="(.*?)"/], + ['video', /\bVIDEO="(.*?)"/], + ['audio', /\bAUDIO="(.*?)"/], + ['subtitles', /\bSUBTITLES="(.*?)"/], + ['captions', /\bCLOSED-CAPTIONS="(.*?)"/] + ]; + const mediaAttributes = [ + ['type', /\bTYPE=([\w-]*)/], + ['group', /\bGROUP-ID="(.*?)"/], + ['lang', /\bLANGUAGE="(.*?)"/], + ['name', /\bNAME="(.*?)"/], + ['autoselect', /\bAUTOSELECT=(\w*)/], + ['default', /\bDEFAULT=(\w*)/], + ['instream-id', /\bINSTREAM-ID="(.*?)"/], + ['assoc-lang', /\bASSOC-LANGUAGE="(.*?)"/], + ['channels', /\bCHANNELS="(.*?)"/], + ['uri', /\bURI="(.*?)"/] + ]; + const streams = [], videos = {}, audios = {}, subtitles = {}, captions = {}; + const dict = { 'VIDEO': videos, 'AUDIO': audios, 'SUBTITLES': subtitles, 'CLOSED-CAPTIONS': captions }; + + const res = await new Client().get(url, headers); + const text = res.body; + + // collect media + for (const match of text.matchAll(/#EXT-X-MEDIA:(.*)/g)) { + const info = match[1], medium = {}; + for (const attr of mediaAttributes) { + const m = info.match(attr[1]); + medium[attr[0]] = m ? m[1] : null; + } + + const type = medium.type; + delete medium.type; + const group = medium.group; + delete medium.group; + + const typedict = dict[type]; + if (typedict[group] == undefined) + typedict[group] = []; + typedict[group].push(medium); + } + + // collect streams + for (const match of text.matchAll(/#EXT-X-STREAM-INF:(.*)\s*(.*)/g)) { + const info = match[1], stream = { 'url': absUrl(match[2], url) }; + for (const attr of streamAttributes) { + const m = info.match(attr[1]); + stream[attr[0]] = m ? m[1] : null; + } + + stream['video'] = videos[stream.video] ?? null; + stream['audio'] = audios[stream.audio] ?? null; + stream['subtitles'] = subtitles[stream.subtitles] ?? null; + stream['captions'] = captions[stream.captions] ?? null; + + // format resolution or bandwidth + let quality; + if (stream.resolution) { + quality = stream.resolution.match(/x(\d+)/)[1] + 'p'; + } else { + quality = (parseInt(stream.avg_bandwidth ?? stream.bandwidth) / 1000000) + 'Mb/s' + } + + // add stream to list + const subs = stream.subtitles?.map((s) => { + return { file: s.uri, label: s.name }; + }); + const auds = stream.audio?.map((a) => { + return { file: a.uri, label: a.name }; + }); + streams.push({ + url: stream.url, + quality: quality, + originalUrl: stream.url, + headers: headers, + subtitles: subs ?? null, + audios: auds ?? null + }); + } + return streams.length ? streams : [{ + url: url, + quality: '', + originalUrl: url, + headers: headers, + subtitles: null, + audios: null + }]; +} + +async function jwplayerExtractor(text, headers) { + // https://docs.jwplayer.com/players/reference/playlists + const getsetup = /setup\(({[\s\S]*?})\)/; + const getsources = /sources:\s*(\[[\s\S]*?\])/; + const gettracks = /tracks:\s*(\[[\s\S]*?\])/; + const unpacked = unpackJs(text); + + const videos = [], subtitles = []; + + const data = eval('(' + (getsetup.exec(text) || getsetup.exec(unpacked))?.[1] + ')'); + + if (data){ + var sources = data.sources; + var tracks = data.tracks; + } else { + var sources = eval('(' + (getsources.exec(text) || getsources.exec(unpacked))?.[1] + ')'); + var tracks = eval('(' + (gettracks.exec(text) || gettracks.exec(unpacked))?.[1] + ')'); + } + for (t of tracks) { + if (t.type == "captions") { + subtitles.push({file: t.file, label: t.label}); + } + } + for (s of sources) { + if (s.file.includes('master.m3u8')) { + videos.push(...(await m3u8Extractor(s.file, headers))); + } else if (s.file.includes('.mpd')) { + + } else { + videos.push({url: s.file, originalUrl: s.file, quality: '', headers: headers}); + } + } + return videos.map(v => { + v.subtitles = subtitles; + return v; + }); +} + +function sortVideos(videos) { + const pref = new SharedPreferences(); + const getres = RegExp('(\\d+)p?', 'i'); + const lang = RegExp(pref.get('lang'), 'i'); + const type = RegExp(pref.get('type'), 'i'); + const res = RegExp(getres.exec(pref.get('res'))[1], 'i'); + const host = RegExp(pref.get('host'), 'i'); + + let getScore = (q, hasRes) => { + const bLang = lang.test(q), bType = type.test(q), bRes = res.test(q), bHost = host.test(q); + if (hasRes) { + return bLang * (8 + bType * (4 + bRes * (2 + bHost * 1))); + } else { + return bLang * (8 + bType * (4 + (bHost * 3))); + } + } + + return videos.sort((a, b) => { + const resA = getres.exec(a.quality)?.[1]; + const resB = getres.exec(b.quality)?.[1]; + const score = getScore(b.quality, resB) - getScore(a.quality, resA); + + if (score) return score; + + const qA = resA ? a.quality.replace(resA, (9999 - parseInt(resA)).toString()) : a.quality; + const qB = resA ? b.quality.replace(resB, (9999 - parseInt(resB)).toString()) : b.quality; + + return qA.localeCompare(qB); + }); +} + +Uint8Array.fromBase64 = function (b64) { + // [00,01,02,03,04,05,06,07,08,\t,\n,0b,0c,\r,0e,0f,10,11,12,13,14,15,16,17,18,19,1a,1b,1c,1d,1e,1f,' ', !, ", #, $, %, &, ', (, ), *, +,',', -, ., /, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, :, ;, <,'=', >, ?, @,A,B,C,D,E,F,G,H,I,J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z, [, \, ], ^, _, `, a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, {, |, }, ~,7f] + const m = [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 62, -1, 62, -1, 63, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, -1, -1, -1, -1, -1, -1, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, -1, -1, -1, -1, 63, -1, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, -1, -1, -1, -1, -1] + let data = [], val = 0, bits = -8 + for (const c of b64) { + let n = m[c.charCodeAt(0)]; + if (n == -1) break; + val = (val << 6) + n; + bits += 6; + for (; bits >= 0; bits -= 8) + data.push((val >> bits) & 0xFF); + } + return new Uint8Array(data); +} + +Uint8Array.prototype.toBase64 = function () { + const m = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/' + let b64 = '', val = 0, bits = -6; + for (const b of this) { + val = (val << 8) + b; + bits += 8; + while (bits >= 0) { + b64 += m[(val >> bits) & 0x3F]; + bits -= 6; + } + } + if (bits > -6) + b64 += m[(val << -bits) & 0x3F]; + return b64 + ['', '', '==', '='][b64.length % 4]; +} + +Uint8Array.prototype.decode = function (encoding = 'utf-8') { + encoding = encoding.toLowerCase(); + if (encoding == 'utf-8') { + return decodeUTF8(this); + } + return null; +} + +String.prototype.encode = function (encoding = 'utf-8') { + encoding = encoding.toLowerCase(); + if (encoding == 'utf-8') { + return encodeUTF8(this); + } + return null; +} + +String.decode = function (data, encoding = 'utf-8') { + encoding = encoding.toLowerCase(); + if (encoding == 'utf-8') { + return decodeUTF8(data); + } + return null; +} + +function decodeUTF8(data) { + const codes = []; + for (let i = 0; i < data.length;) { + const c = data[i++]; + const len = (c > 0xBF) + (c > 0xDF) + (c > 0xEF); + let val = c & (0xFF >> (len + 1)); + for (const end = i + len; i < end; i++) { + val = (val << 6) + (data[i] & 0x3F); + } + codes.push(val); + } + return String.fromCharCode(...codes); +} + +function encodeUTF8(string) { + const data = []; + for (const c of string) { + const code = c.charCodeAt(0); + const len = (code > 0x7F) + (code > 0x7FF) + (code > 0xFFFF); + let bits = len * 6; + + data.push((len ? ~(0xFF >> len + 1) : (0)) + (code >> bits)); + while (bits > 0) { + data.push(0x80 + ((code >> (bits -= 6)) & 0x3F)) + } + } + return new Uint8Array(data); +} + +function getRandomString(length) { + const chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890"; + let result = ""; + for (let i = 0; i < length; i++) { + const random = Math.floor(Math.random() * 61); + result += chars[random]; + } + return result; +} + +function absUrl(url, base) { + if (url.search(/^\w+:\/\//) == 0) { + return url; + } else if (url.startsWith('/')) { + return base.slice(0, base.lastIndexOf('/')) + url; + } else { + return base.slice(0, base.lastIndexOf('/') + 1) + url; + } +} \ No newline at end of file diff --git a/javascript/anime/src/es/tioanime.js b/javascript/anime/src/es/tioanime.js new file mode 100644 index 00000000..729e30a2 --- /dev/null +++ b/javascript/anime/src/es/tioanime.js @@ -0,0 +1,717 @@ +const mangayomiSources = [{ + "name": "TioAnime", + "lang": "es", + "baseUrl": "https://tioanime.com", + "apiUrl": "", + "iconUrl": "https://tioanime.com/assets/img/tio_fb.jpg", + "typeSource": "single", + "isManga": false, + "version": "0.1.0", + "dateFormat": "", + "dateFormatLocale": "", + "pkgPath": "anime/src/es/tioanime.js" +}]; + +class DefaultExtension extends MProvider { + constructor () { + super(); + this.client = new Client(); + } + getHeaders(url) { + throw new Error("getHeaders not implemented"); + } + async parseAnimeList(url) { + const res = await this.client.get(url); + const doc = new Document(res.body); + const elements = doc.select("ul.animes > li"); + const list = []; + + for (const element of elements) { + const name = element.selectFirst(".title").text; + const imageUrl = this.source.baseUrl + element.selectFirst("img").getSrc; + const link = element.selectFirst("a").getHref; + list.push({ name, imageUrl, link }); + } + const hasNextPage = doc.selectFirst("li.page-item.active + li").text == "»"; + return { "list": list, "hasNextPage": hasNextPage }; + } + statusFromString(status) { + return { + "En emision": 0, + "Finalizado": 1 + }[status] ?? 5; + } + async getPopular(page) { + return this.parseAnimeList(`${this.source.baseUrl}/directorio?p=${page}`); + } + async getLatestUpdates(page) { + return this.parseAnimeList(`${this.source.baseUrl}/directorio?p=${page}`); + } + async search(query, page, filters) { + query = query.trim().replaceAll(/\ +/g, "+"); + let url = `${this.source.baseUrl}/directorio?q=${query}&p=${page}`; + return this.parseAnimeList(url); + } + async getDetail(url) { + const res = await this.client.get(this.source.baseUrl + url); + const doc = new Document(res.body); + const detail = {}; + + const info = doc.selectFirst("article.anime-single"); + const episodeCount = parseInt(/episodes = \[(\d+)/.exec(doc.select("script").pop().innerHtml)[1]); + const episodeUrl = url.replace("/anime", "/ver") + "-"; + + detail.name = info.selectFirst("h1").text; + detail.status = this.statusFromString(info.selectFirst("a").text); + detail.imageUrl = this.source.baseUrl + info.selectFirst("img").getSrc; + detail.description = info.selectFirst("p.sinopsis").text.trim(); + detail.genre = info.select("p.genres a").map(e => e.text.trim()); + detail.episodes = []; + for (let i = 0; i < episodeCount; i++) { + const name = `Episodio ${i + 1}`; + const url = episodeUrl + (i + 1); + detail.episodes.push({ name, url }); + } + detail.episodes.reverse(); + return detail; + } + // For anime episode video list + async getVideoList(url) { + const res = await this.client.get(this.source.baseUrl + url); + const doc = new Document(res.body); + let promises = []; + const videos = []; + + // get type + const type = /\blatino\b/i.test(url) ? 'Dub' : 'Sub'; + + // get links + const raws = [...doc.select("script").pop().innerHtml.matchAll(/\[".*?\]/g)]; + + // extract videos + for (const raw of raws) { + const data = JSON.parse(raw[0]); + const host = data[0]; + const link = data[1]; + promises.push(extractAny(link, host.toLowerCase(), 'Español', type, host)); + } + for (const p of (await Promise.allSettled(promises))) { + if (p.status == 'fulfilled') { + videos.push.apply(videos, p.value); + } + } + return sortVideos(videos); + } + getFilterList() { + throw new Error("getFilterList not implemented"); + } + getSourcePreferences() { + return [ + { + key: 'lang', + listPreference: { + title: 'Preferred Language', + summary: 'If available, this language will be chosen by default. Priority = 0 (lower is better)', + valueIndex: 0, + entries: [ + 'Español' + ], + entryValues: [ + 'Español' + ] + } + }, + { + key: 'type', + listPreference: { + title: 'Preferred Type', + summary: 'If available, this type will be chosen by default. Priority = 1 (lower is better)', + valueIndex: 0, + entries: [ + 'Sub' + ], + entryValues: [ + 'Sub' + ] + } + }, + { + key: 'res', + listPreference: { + title: 'Preferred Resolution', + summary: 'If available, this resolution will be chosen by default. Priority = 2 (lower is better)', + valueIndex: 0, + entries: [ + '1080p', + '720p', + '480p' + ], + entryValues: [ + '1080p', + '720p', + '480p' + ] + } + }, + { + key: 'host', + listPreference: { + title: 'Preferred Hoster', + summary: 'If available, this hoster will be chosen by default. Priority = 3 (lower is better)', + valueIndex: 0, + entries: [ + 'Okru', + 'VidGuard', + 'Voe', + 'YourUpload' + ], + entryValues: [ + 'Okru', + 'VidGuard', + 'Voe', + 'YourUpload' + ] + } + } + ]; + } +} + +/*************************************************************************************************** +* +* mangayomi-js-helpers v1.0 +* +* # Video Extractors +* - vidGuardExtractor +* - doodExtractor +* - vidozaExtractor +* - okruExtractor +* - amazonExtractor +* - vidHideExtractor +* - filemoonExtractor +* - mixdropExtractor +* - burstcloudExtractor (not working, see description) +* +* # Video Extractor Format Wrappers +* - streamWishExtractor +* - voeExtractor +* - mp4UploadExtractor +* - yourUploadExtractor +* - streamTapeExtractor +* - sendVidExtractor +* +* # Video Extractor helpers +* - extractAny +* +* # Playlist Extractors +* - m3u8Extractor +* - jwplayerExtractor +* +* # Extension +* - sortVideos() +* +* # Encoding/Decoding +* - Uint8Array.fromBase64() +* - Uint8Array.prototype.toBase64() +* - Uint8Array.prototype.decode() +* - String.prototype.encode() +* - String.prototype.decode() +* +* # Random string +* - getRandomString() +* +* # URL +* - absUrl() +* +***************************************************************************************************/ + +async function vidGuardExtractor(url) { + // get html + const res = await new Client().get(url); + const doc = new Document(res.body); + const script = doc.selectFirst('script:contains(eval)'); + + // eval code + const code = script.text; + eval?.('var window = {};'); + eval?.(code); + const playlistUrl = globalThis.window.svg.stream; + + // decode sig + const encoded = playlistUrl.match(/sig=(.*?)&/)[1]; + const charCodes = []; + + for (let i = 0; i < encoded.length; i += 2) { + charCodes.push(parseInt(encoded.slice(i, i + 2), 16) ^ 2); + } + + let decoded = Uint8Array.fromBase64( + String.fromCharCode(...charCodes)) + .slice(5, -5) + .reverse(); + + for (let i = 0; i < decoded.length; i += 2) { + let tmp = decoded[i]; + decoded[i] = decoded[i + 1]; + decoded[i + 1] = tmp; + } + + decoded = decoded.decode(); + return await m3u8Extractor(playlistUrl.replace(encoded, decoded), null); +} + +async function doodExtractor(url) { + const dartClient = new Client({ 'useDartHttpClient': true, "followRedirects": false }); + let response = await dartClient.get(url); + while ("location" in response.headers) { + response = await dartClient.get(response.headers.location); + } + const newUrl = response.request.url; + const doodhost = newUrl.match(/https:\/\/(.*?)\//, newUrl)[0].slice(8, -1); + const md5 = response.body.match(/'\/pass_md5\/(.*?)',/, newUrl)[0].slice(11, -2); + const token = md5.substring(md5.lastIndexOf("/") + 1); + const expiry = new Date().valueOf(); + const randomString = getRandomString(10); + + response = await new Client().get(`https://${doodhost}/pass_md5/${md5}`, { "Referer": newUrl }); + const videoUrl = `${response.body}${randomString}?token=${token}&expiry=${expiry}`; + const headers = { "User-Agent": "Mangayomi", "Referer": doodhost }; + return [{ url: videoUrl, originalUrl: videoUrl, headers: headers, quality: '' }]; +} + +async function vidozaExtractor(url) { + let response = await new Client({ 'useDartHttpClient': true, "followRedirects": true }).get(url); + const videoUrl = response.body.match(/https:\/\/\S*\.mp4/)[0]; + return [{ url: videoUrl, originalUrl: videoUrl, quality: '' }]; +} + +async function okruExtractor(url) { + const res = await new Client().get(url); + const doc = new Document(res.body); + const tag = doc.selectFirst('div[data-options]'); + const playlistUrl = tag.attr('data-options').match(/hlsManifestUrl.*?(h.*?id=\d+)/)[1].replaceAll('\\\\u0026', '&'); + return await m3u8Extractor(playlistUrl, null); +} + +async function amazonExtractor(url) { + const res = await new Client().get(url); + const doc = new Document(res.body); + const videoUrl = doc.selectFirst('video').getSrc; + return videoUrl ? [{ url: videoUrl, originalUrl: videoUrl, headers: null, quality: '' }] : []; +} + +async function vidHideExtractor(url) { + const res = await new Client().get(url); + return await jwplayerExtractor(res.body); +} + +async function filemoonExtractor(url) { + let res = await new Client().get(url); + const src = res.body.match(/iframe src="(.*?)"/)?.[1]; + if (src) { + res = await new Client().get(src, { + 'Referer': url, + 'Accept-Language': 'de,en-US;q=0.7,en;q=0.3' + }); + } + return await jwplayerExtractor(res.body); +} + +async function mixdropExtractor(url) { + headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36'}; + let res = await new Client({ 'useDartHttpClient': true, "followRedirects": false }).get(url, headers); + while ("location" in res.headers) { + res = await new Client({ 'useDartHttpClient': true, "followRedirects": false }).get(res.headers.location, headers); + } + const newUrl = res.request.url; + let doc = new Document(res.body); + + const code = doc.selectFirst('script:contains(MDCore):contains(eval)').text; + const unpacked = unpackJs(code); + let videoUrl = unpacked.match(/wurl="(.*?)"/)?.[1]; + + if (!videoUrl) return []; + + videoUrl = 'https:' + videoUrl; + headers.referer = newUrl; + + return [{url: videoUrl, originalUrl: videoUrl, quality: '', headers: headers}]; +} + +/** Does not work: Client always sets 'charset=utf-8' in Content-Type. */ +async function burstcloudExtractor(url) { + let client = new Client(); + let res = await client.get(url); + + const id = res.body.match(/data-file-id="(.*?)"/)[1]; + const headers = { + "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8", + 'Referer': url, + }; + const data = { + 'fileId': id + }; + + res = await client.post(`https://www.burstcloud.co/file/play-request/`, headers, data); + const videoUrl = res.body.match(/cdnUrl":"(.*?)"/)[1]; + return [{ + url: videoUrl, + originalUrl: videoUrl, + headers: { 'Referer': url.match(/.*?:\/\/.*?\//) }, + quality: '' + }]; +} + +_streamWishExtractor = streamWishExtractor; +streamWishExtractor = async (url) => { + return (await _streamWishExtractor(url, '')).map(v => { + v.quality = v.quality.slice(3, -1); + return v; + }); +} + +_voeExtractor = voeExtractor; +voeExtractor = async (url) => { + return (await _voeExtractor(url, '')).map(v => { + v.quality = v.quality.replace(/Voe: (\d+p?)/i, '$1'); + return v; + }); +} + +_mp4UploadExtractor = mp4UploadExtractor; +mp4UploadExtractor = async (url) => { + return (await _mp4UploadExtractor(url)).map(v => { + v.quality = v.quality.match(/\d+p/)?.[0] ?? ''; + return v; + }); +} + +_yourUploadExtractor = yourUploadExtractor; +yourUploadExtractor = async (url) => { + return (await _yourUploadExtractor(url)) + .filter(v => !v.url.includes('/novideo')) + .map(v => { + v.quality = ''; + return v; + }); +} + +_streamTapeExtractor = streamTapeExtractor; +streamTapeExtractor = async (url) => { + return await _streamTapeExtractor(url, ''); +} + +_sendVidExtractor = sendVidExtractor; +sendVidExtractor = async (url) => { + let res = await new Client().get(url); + var videoUrl, quality; + try { + videoUrl = res.body.match(/og:video" content="(.*?\.mp4.*?)"/)[1]; + quality = res.body.match(/og:video:height" content="(.*?)"/)?.[1]; + quality = quality ? quality + 'p' : ''; + } catch (error) { + + } + if (!videoUrl) { + return _sendVidExtractor(url, null, ''); + } + return [{url: videoUrl, originalUrl: videoUrl, quality: quality, headers: null}]; +} + +async function extractAny(url, method, lang, type, host) { + const m = extractAny.methods[method]; + return (!m) ? [] : (await m(url)).map(v => { + v.quality = v.quality ? `${lang} ${type} ${v.quality} ${host}` : `${lang} ${type} ${host}`; + return v; + }); +}; + +extractAny.methods = { + 'amazon': amazonExtractor, + 'burstcloud': burstcloudExtractor, + 'doodstream': doodExtractor, + 'filemoon': filemoonExtractor, + 'mixdrop': mixdropExtractor, + 'mp4upload': mp4UploadExtractor, + 'okru': okruExtractor, + 'sendvid': sendVidExtractor, + 'streamtape': streamTapeExtractor, + 'streamwish': vidHideExtractor, + 'vidguard': vidGuardExtractor, + 'vidhide': vidHideExtractor, + 'vidoza': vidozaExtractor, + 'voe': voeExtractor, + 'yourupload': yourUploadExtractor +}; + +async function m3u8Extractor(url, headers = null) { + // https://developer.apple.com/documentation/http-live-streaming/creating-a-multivariant-playlist + // https://developer.apple.com/documentation/http-live-streaming/adding-alternate-media-to-a-playlist + // define attribute lists + const streamAttributes = [ + ['avg_bandwidth', /AVERAGE-BANDWIDTH=(\d+)/], + ['bandwidth', /\bBANDWIDTH=(\d+)/], + ['resolution', /\bRESOLUTION=([\dx]+)/], + ['framerate', /\bFRAME-RATE=([\d\.]+)/], + ['codecs', /\bCODECS="(.*?)"/], + ['video', /\bVIDEO="(.*?)"/], + ['audio', /\bAUDIO="(.*?)"/], + ['subtitles', /\bSUBTITLES="(.*?)"/], + ['captions', /\bCLOSED-CAPTIONS="(.*?)"/] + ]; + const mediaAttributes = [ + ['type', /\bTYPE=([\w-]*)/], + ['group', /\bGROUP-ID="(.*?)"/], + ['lang', /\bLANGUAGE="(.*?)"/], + ['name', /\bNAME="(.*?)"/], + ['autoselect', /\bAUTOSELECT=(\w*)/], + ['default', /\bDEFAULT=(\w*)/], + ['instream-id', /\bINSTREAM-ID="(.*?)"/], + ['assoc-lang', /\bASSOC-LANGUAGE="(.*?)"/], + ['channels', /\bCHANNELS="(.*?)"/], + ['uri', /\bURI="(.*?)"/] + ]; + const streams = [], videos = {}, audios = {}, subtitles = {}, captions = {}; + const dict = { 'VIDEO': videos, 'AUDIO': audios, 'SUBTITLES': subtitles, 'CLOSED-CAPTIONS': captions }; + + const res = await new Client().get(url, headers); + const text = res.body; + + // collect media + for (const match of text.matchAll(/#EXT-X-MEDIA:(.*)/g)) { + const info = match[1], medium = {}; + for (const attr of mediaAttributes) { + const m = info.match(attr[1]); + medium[attr[0]] = m ? m[1] : null; + } + + const type = medium.type; + delete medium.type; + const group = medium.group; + delete medium.group; + + const typedict = dict[type]; + if (typedict[group] == undefined) + typedict[group] = []; + typedict[group].push(medium); + } + + // collect streams + for (const match of text.matchAll(/#EXT-X-STREAM-INF:(.*)\s*(.*)/g)) { + const info = match[1], stream = { 'url': absUrl(match[2], url) }; + for (const attr of streamAttributes) { + const m = info.match(attr[1]); + stream[attr[0]] = m ? m[1] : null; + } + + stream['video'] = videos[stream.video] ?? null; + stream['audio'] = audios[stream.audio] ?? null; + stream['subtitles'] = subtitles[stream.subtitles] ?? null; + stream['captions'] = captions[stream.captions] ?? null; + + // format resolution or bandwidth + let quality; + if (stream.resolution) { + quality = stream.resolution.match(/x(\d+)/)[1] + 'p'; + } else { + quality = (parseInt(stream.avg_bandwidth ?? stream.bandwidth) / 1000000) + 'Mb/s' + } + + // add stream to list + const subs = stream.subtitles?.map((s) => { + return { file: s.uri, label: s.name }; + }); + const auds = stream.audio?.map((a) => { + return { file: a.uri, label: a.name }; + }); + streams.push({ + url: stream.url, + quality: quality, + originalUrl: stream.url, + headers: headers, + subtitles: subs ?? null, + audios: auds ?? null + }); + } + return streams.length ? streams : [{ + url: url, + quality: '', + originalUrl: url, + headers: headers, + subtitles: null, + audios: null + }]; +} + +async function jwplayerExtractor(text, headers) { + // https://docs.jwplayer.com/players/reference/playlists + const getsetup = /setup\(({[\s\S]*?})\)/; + const getsources = /sources:\s*(\[[\s\S]*?\])/; + const gettracks = /tracks:\s*(\[[\s\S]*?\])/; + const unpacked = unpackJs(text); + + const videos = [], subtitles = []; + + const data = eval('(' + (getsetup.exec(text) || getsetup.exec(unpacked))?.[1] + ')'); + + if (data){ + var sources = data.sources; + var tracks = data.tracks; + } else { + var sources = eval('(' + (getsources.exec(text) || getsources.exec(unpacked))?.[1] + ')'); + var tracks = eval('(' + (gettracks.exec(text) || gettracks.exec(unpacked))?.[1] + ')'); + } + for (t of tracks) { + if (t.type == "captions") { + subtitles.push({file: t.file, label: t.label}); + } + } + for (s of sources) { + if (s.file.includes('master.m3u8')) { + videos.push(...(await m3u8Extractor(s.file, headers))); + } else if (s.file.includes('.mpd')) { + + } else { + videos.push({url: s.file, originalUrl: s.file, quality: '', headers: headers}); + } + } + return videos.map(v => { + v.subtitles = subtitles; + return v; + }); +} + +function sortVideos(videos) { + const pref = new SharedPreferences(); + const getres = RegExp('(\\d+)p?', 'i'); + const lang = RegExp(pref.get('lang'), 'i'); + const type = RegExp(pref.get('type'), 'i'); + const res = RegExp(getres.exec(pref.get('res'))[1], 'i'); + const host = RegExp(pref.get('host'), 'i'); + + let getScore = (q, hasRes) => { + const bLang = lang.test(q), bType = type.test(q), bRes = res.test(q), bHost = host.test(q); + if (hasRes) { + return bLang * (8 + bType * (4 + bRes * (2 + bHost * 1))); + } else { + return bLang * (8 + bType * (4 + (bHost * 3))); + } + } + + return videos.sort((a, b) => { + const resA = getres.exec(a.quality)?.[1]; + const resB = getres.exec(b.quality)?.[1]; + const score = getScore(b.quality, resB) - getScore(a.quality, resA); + + if (score) return score; + + const qA = resA ? a.quality.replace(resA, (9999 - parseInt(resA)).toString()) : a.quality; + const qB = resA ? b.quality.replace(resB, (9999 - parseInt(resB)).toString()) : b.quality; + + return qA.localeCompare(qB); + }); +} + +Uint8Array.fromBase64 = function (b64) { + // [00,01,02,03,04,05,06,07,08,\t,\n,0b,0c,\r,0e,0f,10,11,12,13,14,15,16,17,18,19,1a,1b,1c,1d,1e,1f,' ', !, ", #, $, %, &, ', (, ), *, +,',', -, ., /, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, :, ;, <,'=', >, ?, @,A,B,C,D,E,F,G,H,I,J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z, [, \, ], ^, _, `, a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, {, |, }, ~,7f] + const m = [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 62, -1, 62, -1, 63, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, -1, -1, -1, -1, -1, -1, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, -1, -1, -1, -1, 63, -1, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, -1, -1, -1, -1, -1] + let data = [], val = 0, bits = -8 + for (const c of b64) { + let n = m[c.charCodeAt(0)]; + if (n == -1) break; + val = (val << 6) + n; + bits += 6; + for (; bits >= 0; bits -= 8) + data.push((val >> bits) & 0xFF); + } + return new Uint8Array(data); +} + +Uint8Array.prototype.toBase64 = function () { + const m = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/' + let b64 = '', val = 0, bits = -6; + for (const b of this) { + val = (val << 8) + b; + bits += 8; + while (bits >= 0) { + b64 += m[(val >> bits) & 0x3F]; + bits -= 6; + } + } + if (bits > -6) + b64 += m[(val << -bits) & 0x3F]; + return b64 + ['', '', '==', '='][b64.length % 4]; +} + +Uint8Array.prototype.decode = function (encoding = 'utf-8') { + encoding = encoding.toLowerCase(); + if (encoding == 'utf-8') { + return decodeUTF8(this); + } + return null; +} + +String.prototype.encode = function (encoding = 'utf-8') { + encoding = encoding.toLowerCase(); + if (encoding == 'utf-8') { + return encodeUTF8(this); + } + return null; +} + +String.decode = function (data, encoding = 'utf-8') { + encoding = encoding.toLowerCase(); + if (encoding == 'utf-8') { + return decodeUTF8(data); + } + return null; +} + +function decodeUTF8(data) { + const codes = []; + for (let i = 0; i < data.length;) { + const c = data[i++]; + const len = (c > 0xBF) + (c > 0xDF) + (c > 0xEF); + let val = c & (0xFF >> (len + 1)); + for (const end = i + len; i < end; i++) { + val = (val << 6) + (data[i] & 0x3F); + } + codes.push(val); + } + return String.fromCharCode(...codes); +} + +function encodeUTF8(string) { + const data = []; + for (const c of string) { + const code = c.charCodeAt(0); + const len = (code > 0x7F) + (code > 0x7FF) + (code > 0xFFFF); + let bits = len * 6; + + data.push((len ? ~(0xFF >> len + 1) : (0)) + (code >> bits)); + while (bits > 0) { + data.push(0x80 + ((code >> (bits -= 6)) & 0x3F)) + } + } + return new Uint8Array(data); +} + +function getRandomString(length) { + const chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890"; + let result = ""; + for (let i = 0; i < length; i++) { + const random = Math.floor(Math.random() * 61); + result += chars[random]; + } + return result; +} + +function absUrl(url, base) { + if (url.search(/^\w+:\/\//) == 0) { + return url; + } else if (url.startsWith('/')) { + return base.slice(0, base.lastIndexOf('/')) + url; + } else { + return base.slice(0, base.lastIndexOf('/') + 1) + url; + } +} \ No newline at end of file diff --git a/javascript/anime/src/zh/wogg.js b/javascript/anime/src/zh/wogg.js new file mode 100644 index 00000000..20112134 --- /dev/null +++ b/javascript/anime/src/zh/wogg.js @@ -0,0 +1,218 @@ +const mangayomiSources = [{ + "name": "玩偶哥哥", + "lang": "zh", + "baseUrl": "https://www.wogg.net", + "apiUrl": "", + "iconUrl": "https://imgsrc.baidu.com/forum/pic/item/4b90f603738da977d5da660af651f8198618e31f.jpg", + "typeSource": "single", + "isManga": false, + "isNsfw": false, + "version": "0.0.2", + "dateFormat": "", + "dateFormatLocale": "", + "pkgPath": "anime/src/zh/wogg.js" +}]; +class DefaultExtension extends MProvider { + patternQuark = /(https:\/\/pan\.quark\.cn\/s\/[^"]+)/; + patternUc = /(https:\/\/drive\.uc\.cn\/s\/[^"]+)/; + getHeaders(url) { + throw new Error("getHeaders not implemented"); + } + async getPopular(page) { + const baseUrl = new SharedPreferences().get("url"); + const response = await new Client({ 'useDartHttpClient': true }).get(baseUrl, { "Referer": baseUrl }); + const elements = new Document(response.body).select("div.module-item"); + const list = []; + for (const element of elements) { + let oneA = element.selectFirst('.module-item-cover .module-item-pic a'); + const name = oneA.attr("title"); + const imageUrl = element.selectFirst(".module-item-cover .module-item-pic img").attr("data-src"); + const link = oneA.attr("href"); + list.push({ name, imageUrl, link }); + } + return { + list: list, + hasNextPage: false + } + } + async getLatestUpdates(page) { + const baseUrl = new SharedPreferences().get("url"); + const response = await new Client({ 'useDartHttpClient': true }).get(baseUrl + `/vodshow/1--------${page}---.html`, { "Referer": baseUrl }); + const elements = new Document(response.body).select("div.module-item"); + const list = []; + for (const element of elements) { + let oneA = element.selectFirst('.module-item-cover .module-item-pic a'); + const name = oneA.attr("title"); + const imageUrl = element.selectFirst(".module-item-cover .module-item-pic img").attr("data-src"); + const link = oneA.attr("href"); + list.push({ name, imageUrl, link }); + } + return { + list: list, + hasNextPage: true + } + } + async search(query, page, filters) { + const baseUrl = new SharedPreferences().get("url"); + if (query == "") { + var categories; + for (const filter of filters) { + if (filter["type"] == "categories") { + categories = filter["values"][filter["state"]]["value"]; + } + } + const response = await new Client({ 'useDartHttpClient': true }).get(baseUrl + `/vodshow/${categories}--------${page}---.html`, { "Referer": baseUrl }); + const elements = new Document(response.body).select("div.module-item"); + const list = []; + for (const element of elements) { + let oneA = element.selectFirst('.module-item-cover .module-item-pic a'); + const name = oneA.attr("title"); + const imageUrl = element.selectFirst(".module-item-cover .module-item-pic img").attr("data-src"); + const link = oneA.attr("href"); + list.push({ name, imageUrl, link }); + } + return { + list: list, + hasNextPage: true + } + } else { + const response = await new Client({ 'useDartHttpClient': true }).get(baseUrl + `/vodsearch/${query}----------${page}---.html`, { "Referer": baseUrl }); + const elements = new Document(response.body).select(".module-search-item"); + const list = []; + for (const element of elements) { + let oneA = element.selectFirst('.video-info .video-info-header a'); + const name = oneA.attr("title"); + const imageUrl = element.selectFirst(".video-cover .module-item-cover .module-item-pic img").attr("data-src"); + const link = oneA.attr("href"); + list.push({ name, imageUrl, link }); + } + return { + list: list, + hasNextPage: true + } + } + } + async getDetail(url) { + const baseUrl = new SharedPreferences().get("url"); + const response = await new Client({ 'useDartHttpClient': true }).get(baseUrl + url, { "Referer": baseUrl }); + const document = new Document(response.body); + const imageUrl = document.selectFirst("div.video-cover .module-item-cover .module-item-pic img").attr("data-src"); + const name = document.selectFirst("div.video-info .video-info-header h1").text; + const description = document.selectFirst("div.video-info .video-info-content").text.replace("[收起部分]", "").replace("[展开全部]", ""); + const type_name = "电影"; + let quark_share_url_list = [], uc_share_url_list = [] + const share_url_list = document.select("div.module-row-one .module-row-info") + .map(e => { + const url = e.selectFirst(".module-row-title p").text; + const quarkMatches = url.match(this.patternQuark); + + if (quarkMatches && quarkMatches[1]) { + quark_share_url_list.push(quarkMatches[1]); + } + const ucMatches = url.match(this.patternUc); + if (ucMatches && ucMatches[1]) { + uc_share_url_list.push(ucMatches[1]); + } + return null; + }) + .filter(url => url !== null); + let quark_episodes = await quarkFilesExtractor(quark_share_url_list, new SharedPreferences().get("quarkCookie")); + let uc_episodes = await ucFilesExtractor(uc_share_url_list, new SharedPreferences().get("ucCookie")); + let episodes = [...quark_episodes, ...uc_episodes]; + return { + name, imageUrl, description, episodes + }; + } + // For anime episode video list + async getVideoList(url) { + const videos = []; + const parts = url.split('++'); + const type = parts[0].toLowerCase(); + + let vids; + if (type === 'quark') { + let cookie = new SharedPreferences().get("quarkCookie"); + if (cookie == "") { + throw new Error("请先在本扩展设置中填写夸克Cookies, 需要夸克VIP账号 \n Please fill in the Quark Cookies in this extension settings first, you need a Quark VIP account"); + } else { + vids = await quarkVideosExtractor(url, cookie); + } + } else if (type === 'uc') { + let cookie = new SharedPreferences().get("ucCookie"); + if (cookie == "") { + throw new Error("请先在本扩展设置中填写UC云盘Cookies \n Please fill in the UC Cloud Cookies in this extension settings first"); + } else { + vids = await ucVideosExtractor(url, cookie); + } + } else { + throw new Error("不支持的链接类型"); + } + + for (const vid of vids) { + videos.push(vid); + } + return videos; + } + getFilterList() { + return [{ + type: "categories", + name: "影片類型", + type_name: "SelectFilter", + values: [ + { type_name: "SelectOption", value: "1", name: "电影" }, + { type_name: "SelectOption", value: "2", name: "剧集" }, + { type_name: "SelectOption", value: "3", name: "动漫" }, + { type_name: "SelectOption", value: "4", name: "综艺" }, + { type_name: "SelectOption", value: "5", name: "音乐" }, + { type_name: "SelectOption", value: "6", name: "短剧" }, + { type_name: "SelectOption", value: "44", name: "臻彩视界" } + ] + }]; + } + getSourcePreferences() { + return [ + { + "key": "quarkCookie", + "editTextPreference": { + "title": "夸克Cookies", + "summary": "填写获取到的夸克Cookies", + "value": "", + "dialogTitle": "Cookies", + "dialogMessage": "", + } + }, + { + "key": "ucCookie", + "editTextPreference": { + "title": "UC云盘Cookies", + "summary": "填写获取到的UC云盘Cookies", + "value": "", + "dialogTitle": "Cookies", + "dialogMessage": "", + } + }, + { + "key": "url", + "listPreference": { + "title": "Website Url", + "summary": "", + "valueIndex": 0, + "entries": [ + "wogg.net", + "wogg.xxooo.cf", + "wogg.888484.xyz", + "wogg.bf", + "wogg.333232.xyz" + ], + "entryValues": [ + "https://www.wogg.net", + "https://wogg.xxooo.cf", + "https://wogg.888484.xyz", + "https://www.wogg.bf", + "https://wogg.333232.xyz" + ], + } + } + ]; + } +} diff --git a/javascript/anime/src/zh/yydsys.js b/javascript/anime/src/zh/yydsys.js new file mode 100644 index 00000000..bcfc74f7 --- /dev/null +++ b/javascript/anime/src/zh/yydsys.js @@ -0,0 +1,211 @@ +const mangayomiSources = [{ + "name": "多多影音", + "lang": "zh", + "baseUrl": "https://tv.yydsys.top", + "apiUrl": "", + "iconUrl": "https://tv.yydsys.top/template/DYXS2/static/picture/logo.png", + "typeSource": "single", + "isManga": false, + "isNsfw": false, + "version": "0.0.2", + "dateFormat": "", + "dateFormatLocale": "", + "pkgPath": "anime/src/zh/yydsys.js" +}]; +class DefaultExtension extends MProvider { + patternQuark = /(https:\/\/pan\.quark\.cn\/s\/[^"]+)/; + patternUc = /(https:\/\/drive\.uc\.cn\/s\/[^"]+)/; + getHeaders(url) { + throw new Error("getHeaders not implemented"); + } + async getPopular(page) { + const baseUrl = new SharedPreferences().get("url"); + const response = await new Client({ 'useDartHttpClient': true }).get(baseUrl, { "Referer": baseUrl }); + const elements = new Document(response.body).select("div.module-item"); + const list = []; + for (const element of elements) { + let oneA = element.selectFirst('.module-item-cover .module-item-pic a'); + const name = oneA.attr("title"); + const imageUrl = element.selectFirst(".module-item-cover .module-item-pic img").attr("data-src"); + const link = oneA.attr("href"); + list.push({ name, imageUrl, link }); + } + return { + list: list, + hasNextPage: false + } + } + async getLatestUpdates(page) { + const baseUrl = new SharedPreferences().get("url"); + const response = await new Client({ 'useDartHttpClient': true }).get(baseUrl + `/index.php/vod/show/id/1/page/${page}.html`, { "Referer": baseUrl }); + const elements = new Document(response.body).select("div.module-item"); + const list = []; + for (const element of elements) { + let oneA = element.selectFirst('.module-item-cover .module-item-pic a'); + const name = oneA.attr("title"); + const imageUrl = element.selectFirst(".module-item-cover .module-item-pic img").attr("data-src"); + const link = oneA.attr("href"); + list.push({ name, imageUrl, link }); + } + return { + list: list, + hasNextPage: true + } + } + async search(query, page, filters) { + const baseUrl = new SharedPreferences().get("url"); + if (query == "") { + var categories; + for (const filter of filters) { + if (filter["type"] == "categories") { + categories = filter["values"][filter["state"]]["value"]; + } + } + const response = await new Client({ 'useDartHttpClient': true }).get(baseUrl + `/index.php/vod/show/id/${categories}/page/${page}.html`, { "Referer": baseUrl }); + const elements = new Document(response.body).select("div.module-item"); + const list = []; + for (const element of elements) { + let oneA = element.selectFirst('.module-item-cover .module-item-pic a'); + const name = oneA.attr("title"); + const imageUrl = element.selectFirst(".module-item-cover .module-item-pic img").attr("data-src"); + const link = oneA.attr("href"); + list.push({ name, imageUrl, link }); + } + return { + list: list, + hasNextPage: true + } + } else { + const response = await new Client({ 'useDartHttpClient': true }).get(baseUrl + `/index.php/vod/search/page/${page}/wd/${query}.html`, { "Referer": baseUrl }); + const elements = new Document(response.body).select(".module-search-item"); + const list = []; + for (const element of elements) { + let oneA = element.selectFirst('.video-info .video-info-header a'); + const name = oneA.attr("title"); + const imageUrl = element.selectFirst(".video-cover .module-item-cover .module-item-pic img").attr("data-src"); + const link = oneA.attr("href"); + list.push({ name, imageUrl, link }); + } + return { + list: list, + hasNextPage: true + } + } + } + async getDetail(url) { + const baseUrl = new SharedPreferences().get("url"); + const response = await new Client({ 'useDartHttpClient': true }).get(baseUrl + url, { "Referer": baseUrl }); + const document = new Document(response.body); + const imageUrl = document.selectFirst("div.video-cover .module-item-cover .module-item-pic img").attr("data-src"); + const name = document.selectFirst("div.video-info .video-info-header h1").text; + const description = document.selectFirst("div.video-info .video-info-content").text.replace("[收起部分]", "").replace("[展开全部]", ""); + const type_name = "电影"; + let quark_share_url_list = [], uc_share_url_list = [] + const share_url_list = document.select("div.module-row-one .module-row-info") + .map(e => { + const url = e.selectFirst(".module-row-title p").text; + const quarkMatches = url.match(this.patternQuark); + + if (quarkMatches && quarkMatches[1]) { + quark_share_url_list.push(quarkMatches[1]); + } + const ucMatches = url.match(this.patternUc); + if (ucMatches && ucMatches[1]) { + uc_share_url_list.push(ucMatches[1]); + } + return null; + }) + .filter(url => url !== null); + let quark_episodes = await quarkFilesExtractor(quark_share_url_list, new SharedPreferences().get("quarkCookie")); + let uc_episodes = await ucFilesExtractor(uc_share_url_list, new SharedPreferences().get("ucCookie")); + let episodes = [...quark_episodes, ...uc_episodes]; + return { + name, imageUrl, description, episodes + }; + } + // For anime episode video list + async getVideoList(url) { + const videos = []; + const parts = url.split('++'); + const type = parts[0].toLowerCase(); + + let vids; + if (type === 'quark') { + let cookie = new SharedPreferences().get("quarkCookie"); + if (cookie == "") { + throw new Error("请先在本扩展设置中填写夸克Cookies, 需要夸克VIP账号 \n Please fill in the Quark Cookies in this extension settings first, you need a Quark VIP account"); + } else { + vids = await quarkVideosExtractor(url, cookie); + } + } else if (type === 'uc') { + let cookie = new SharedPreferences().get("ucCookie"); + if (cookie == "") { + throw new Error("请先在本扩展设置中填写UC云盘Cookies \n Please fill in the UC Cloud Cookies in this extension settings first"); + } else { + vids = await ucVideosExtractor(url, cookie); + } + } else { + throw new Error("不支持的链接类型"); + } + + for (const vid of vids) { + videos.push(vid); + } + return videos; + } + getFilterList() { + return [{ + type: "categories", + name: "影片類型", + type_name: "SelectFilter", + values: [ + { type_name: "SelectOption", value: "1", name: "电影" }, + { type_name: "SelectOption", value: "2", name: "剧集" }, + { type_name: "SelectOption", value: "4", name: "动漫" }, + { type_name: "SelectOption", value: "3", name: "综艺" }, + { type_name: "SelectOption", value: "5", name: "短剧" }, + { type_name: "SelectOption", value: "20", name: "纪录片" } + ] + }]; + } + getSourcePreferences() { + return [ + { + "key": "quarkCookie", + "editTextPreference": { + "title": "夸克Cookies", + "summary": "填写获取到的夸克Cookies", + "value": "", + "dialogTitle": "Cookies", + "dialogMessage": "", + } + }, + { + "key": "ucCookie", + "editTextPreference": { + "title": "UC云盘Cookies", + "summary": "填写获取到的UC云盘Cookies", + "value": "", + "dialogTitle": "Cookies", + "dialogMessage": "", + } + }, + { + "key": "url", + "listPreference": { + "title": "Website Url", + "summary": "", + "valueIndex": 0, + "entries": [ + "tv.yydsys.top", + "tv.yydsys.cc", + ], + "entryValues": [ + "https://tv.yydsys.top", + "https://tv.yydsys.cc", + ], + } + } + ]; + } +} diff --git a/javascript/icon/all.netflixmirror.png b/javascript/icon/all.netflixmirror.png new file mode 100644 index 0000000000000000000000000000000000000000..8731c37da0f58dafa70f2da194b6176b9911a467 GIT binary patch literal 13305 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 DfJv_& literal 0 HcmV?d00001 diff --git a/dart/manga/multisrc/mangareader/src/asurascans/icon.png b/javascript/icon/en.asurascans.png similarity index 100% rename from dart/manga/multisrc/mangareader/src/asurascans/icon.png rename to javascript/icon/en.asurascans.png diff --git a/javascript/manga/src/all/mangafire.js b/javascript/manga/src/all/mangafire.js new file mode 100644 index 00000000..c3befa4d --- /dev/null +++ b/javascript/manga/src/all/mangafire.js @@ -0,0 +1,526 @@ +const mangayomiSources = [{ + "name": "Mangafire", + "langs": ["en", "ja", "fr", "es", "es-la", "pt", "pt-br"], + "baseUrl": "https://mangafire.to", + "apiUrl": "", + "iconUrl": "https://mangafire.to/assets/sites/mangafire/favicon.png?v3", + "typeSource": "single", + "isManga": true, + "version": "0.1.2", + "dateFormat": "", + "dateFormatLocale": "", + "pkgPath": "manga/src/all/mangafire.js" +}]; + +class DefaultExtension extends MProvider { + mangaListFromPage(res) { + const doc = new Document(res.body); + const elements = doc.select("div.unit"); + const list = []; + + for (const element of elements){ + const name = element.selectFirst("div.info > a").text; + const imageUrl = element.selectFirst("img").getSrc; + const link = element.selectFirst("a").getHref; + list.push({name, imageUrl, link}); + } + + const hasNextPage = doc.selectFirst("li.page-item.active + li").text != ""; + return { "list": list, "hasNextPage": hasNextPage }; + } + + statusFromString(status){ + return { + "Releasing": 0, + "Completed": 1, + "On_Hiatus": 2, + "Discontinued": 3, + "Unrealeased": 4, + }[status] ?? 5; + } + + parseDate(date) { + const months = { + "jan": "01", "feb": "02", "mar": "03", "apr": "04", "may": "05", "jun": "06", "jul": "07", "aug": "08", "sep": "09", "oct": "10", "nov": "11", "dec": "12" + }; + date = date.toLowerCase().replace(",", "").split(" "); + + if (!(date[0] in months)) { + return String(new Date().valueOf()) + } + + date[0] = months[date[0]]; + date = [date[2], date[0], date[1]]; + date = date.join("-"); + return String(new Date(date).valueOf()); + } + + async getPopular(page) { + console.log(`${this.source.baseUrl}/filter?keyword=&language=${this.source.lang}&sort=trending&page=${page}`); + const res = await new Client().get(`${this.source.baseUrl}/filter?keyword=&language=${this.source.lang}&sort=trending&page=${page}`); + return this.mangaListFromPage(res); + } + + async getLatestUpdates(page) { + const res = await new Client().get(`${this.source.baseUrl}/filter?keyword=&language=${this.source.lang}&sort=recently_updated&page=${page}`); + return this.mangaListFromPage(res); + } + + async search(query, page, filters) { + query = query.trim().replaceAll(/\ +/g, "+"); + let url = `${this.source.baseUrl}/filter?keyword=${query}`; + + // Search sometimes failed because filters were empty. I experienced this mostly on android... + if (!filters || filters.length == 0) { + const res = await new Client().get(`${url}&language=${this.source.lang}&page=${page}`); + return this.mangaListFromPage(res); + } + + for (const filter of filters[0].state) { + if (filter.state == true) + url += `&type%5B%5D=${filter.value}`; + } + + for (const filter of filters[1].state) { + if (filter.state == 1) + url += `&genre%5B%5D=${filter.value}`; + else if (filter.state == 2) + url += `&genre%5B%5D=-${filter.value}`; + } + + // &genre_mode=and + + for (const filter of filters[2].state) { + if (filter.state == true) + url += `&status%5B%5D=${filter.value}`; + } + + url += `&language=${this.source.lang}`; + url += `&minchap=${filters[3].values[filters[3].state].value}`; + url += `&sort=${filters[4].values[filters[4].state].value}`; + + const res = await new Client().get(`${url}&page=${page}`); + return this.mangaListFromPage(res); + } + + async getDetail(url) { + // get urls + const id = url.split(".").pop(); + const infoUrl = this.source.baseUrl + url; + const chapterUrl = this.source.baseUrl + `/ajax/read/${id}/chapter/${this.source.lang}`; + const detail = {}; + + // request + const idRes = await new Client().get(chapterUrl); + const idDoc = new Document(JSON.parse(idRes.body).result.html); + const infoRes = await new Client().get(infoUrl); + const infoDoc = new Document(infoRes.body); + + // extract info + const info = infoDoc.selectFirst("div.info"); + const sidebar = infoDoc.select("aside.sidebar div.meta div"); + detail.name = info.selectFirst("h1").text; + detail.status = this.statusFromString(info.selectFirst("p").text); + detail.imageUrl = infoDoc.selectFirst("div.poster img").getSrc; + detail.author = sidebar[0].selectFirst("a").text; + detail.description = infoDoc.selectFirst("div#synopsis").text.trim(); + detail.genre = sidebar[2].select("a"); + detail.genre.forEach((e, i) => { + detail.genre[i] = e.text; + }); + + // get chapter + const ids = idDoc.select("a"); + const chapRes = await new Client().get(this.source.baseUrl + `/ajax/manga/${id}/chapter/${this.source.lang}`); + const chapDoc = new Document(JSON.parse(chapRes.body).result); + const chapElements = chapDoc.selectFirst(".scroll-sm").children; + detail.chapters = []; + for (let i = 0; i < ids.length; i++) { + const name = ids[i].text; + const id = ids[i].attr("data-id"); + const url = this.source.baseUrl + `/ajax/read/chapter/${id}`; + let dateUpload; + try { + dateUpload = this.parseDate(chapElements[i].selectFirst("span + span").text); + } catch (_) { + dateUpload = null + } + + detail.chapters.push({ name, url, dateUpload }); + } + return detail; + } + + // For manga chapter pages + async getPageList(url) { + const res = await new Client().get(url); + const data = JSON.parse(res.body); + const pages = []; + data.result.images.forEach(img => { + pages.push(img[0]); + }); + return pages; + } + + getFilterList() { + return [ + { + type_name: "GroupFilter", + name: "Type", + state: [ + { + type_name: "CheckBox", + name: "Manga", + value: "manga" + }, + { + type_name: "CheckBox", + name: "One-Shot", + value: "one_shot" + }, + { + type_name: "CheckBox", + name: "Doujinshi", + value: "doujinshi" + }, + { + type_name: "CheckBox", + name: "Novel", + value: "novel" + }, + { + type_name: "CheckBox", + name: "Manhwa", + value: "manhwa" + }, + { + type_name: "CheckBox", + name: "Manhua", + value: "manhua" + } + ] + }, + { + type_name: "GroupFilter", + name: "Genre", + state: [ + { + type_name: "TriState", + name: "Action", + value: "1" + }, + { + type_name: "TriState", + name: "Adventure", + value: "78" + }, + { + type_name: "TriState", + name: "Avant Garde", + value: "3" + }, + { + type_name: "TriState", + name: "Boys Love", + value: "4" + }, + { + type_name: "TriState", + name: "Comedy", + value: "5" + }, + { + type_name: "TriState", + name: "Demons", + value: "77" + }, + { + type_name: "TriState", + name: "Drama", + value: "6" + }, + { + type_name: "TriState", + name: "Ecchi", + value: "7" + }, + { + type_name: "TriState", + name: "Fantasy", + value: "79" + }, + { + type_name: "TriState", + name: "Girls Love", + value: "9" + }, + { + type_name: "TriState", + name: "Gourmet", + value: "10" + }, + { + type_name: "TriState", + name: "Harem", + value: "11" + }, + { + type_name: "TriState", + name: "Horror", + value: "530" + }, + { + type_name: "TriState", + name: "Isekai", + value: "13" + }, + { + type_name: "TriState", + name: "Iyashikei", + value: "531" + }, + { + type_name: "TriState", + name: "Josei", + value: "15" + }, + { + type_name: "TriState", + name: "Kids", + value: "532" + }, + { + type_name: "TriState", + name: "Magic", + value: "539" + }, + { + type_name: "TriState", + name: "Mahou Shoujo", + value: "533" + }, + { + type_name: "TriState", + name: "Martial Arts", + value: "534" + }, + { + type_name: "TriState", + name: "Mecha", + value: "19" + }, + { + type_name: "TriState", + name: "Military", + value: "535" + }, + { + type_name: "TriState", + name: "Music", + value: "21" + }, + { + type_name: "TriState", + name: "Mystery", + value: "22" + }, + { + type_name: "TriState", + name: "Parody", + value: "23" + }, + { + type_name: "TriState", + name: "Psychological", + value: "536" + }, + { + type_name: "TriState", + name: "Reverse Harem", + value: "25" + }, + { + type_name: "TriState", + name: "Romance", + value: "26" + }, + { + type_name: "TriState", + name: "School", + value: "73" + }, + { + type_name: "TriState", + name: "Sci-Fi", + value: "28" + }, + { + type_name: "TriState", + name: "Seinen", + value: "537" + }, + { + type_name: "TriState", + name: "Shoujo", + value: "30" + }, + { + type_name: "TriState", + name: "Shounen", + value: "31" + }, + { + type_name: "TriState", + name: "Slice of Life", + value: "538" + }, + { + type_name: "TriState", + name: "Space", + value: "33" + }, + { + type_name: "TriState", + name: "Sports", + value: "34" + }, + { + type_name: "TriState", + name: "SuperPower", + value: "75" + }, + { + type_name: "TriState", + name: "Supernatural", + value: "76" + }, + { + type_name: "TriState", + name: "Suspense", + value: "37" + }, + { + type_name: "TriState", + name: "Thriller", + value: "38" + }, + { + type_name: "TriState", + name: "Vampire", + value: "39" + } + ] + }, + { + type_name: "GroupFilter", + name: "Status", + state: [ + { + type_name: "CheckBox", + name: "Releasing", + value: "releasing" + }, + { + type_name: "CheckBox", + name: "Completed", + value: "completed" + }, + { + type_name: "CheckBox", + name: "Hiatus", + value: "on_hiatus" + }, + { + type_name: "CheckBox", + name: "Discontinued", + value: "discontinued" + }, + { + type_name: "CheckBox", + name: "Not Yet Published", + value: "info" + } + ] + }, + { + type_name: "SelectFilter", + type: "length", + name: "Length", + values: [ + { + type_name: "SelectOption", + name: ">= 1 chapters", + value: "1" + }, + { + type_name: "SelectOption", + name: ">= 3 chapters", + value: "3" + }, + { + type_name: "SelectOption", + name: ">= 5 chapters", + value: "5" + }, + { + type_name: "SelectOption", + name: ">= 10 chapters", + value: "10" + }, + { + type_name: "SelectOption", + name: ">= 20 chapters", + value: "20" + }, + { + type_name: "SelectOption", + name: ">= 30 chapters", + value: "30" + }, + { + type_name: "SelectOption", + name: ">= 50 chapters", + value: "50" + } + ], + }, + { + type_name: "SelectFilter", + type: "sort", + name: "Sort", + state: 3, + values: [ + { + type_name: "SelectOption", + name: "Added", + value: "recently_added" + }, + { + type_name: "SelectOption", + name: "Updated", + value: "recently_updated" + }, + { + type_name: "SelectOption", + name: "Trending", + value: "trending" + }, + { + type_name: "SelectOption", + name: "Most Relevance", + value: "most_relevance" + }, + { + type_name: "SelectOption", + name: "Name", + value: "title_az" + } + ], + } + ]; + } + + getSourcePreferences() { + throw new Error("getSourcePreferences not implemented"); + } +} diff --git a/javascript/manga/src/en/asurascans.js b/javascript/manga/src/en/asurascans.js new file mode 100644 index 00000000..a95af2d5 --- /dev/null +++ b/javascript/manga/src/en/asurascans.js @@ -0,0 +1,149 @@ +const mangayomiSources = [{ + "id": 524070078, + "name": "Asura Scans", + "lang": "en", + "baseUrl": "https://asuracomic.net", + "apiUrl": "", + "iconUrl": "https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/javascript/icon/en.asurascans.png", + "typeSource": "single", + "isManga": true, + "version": "0.1.65", + "dateFormat": "", + "dateFormatLocale": "", + "pkgPath": "manga/src/en/asurascans.js" +}]; + +class DefaultExtension extends MProvider { + getHeaders(url) { + return { + Referer: this.source.baseUrl + }; + } + mangaListFromPage(res) { + const doc = new Document(res.body); + const mangaElements = doc.select("div.grid > a[href]"); + const list = []; + for (const element of mangaElements) { + const name = element.selectFirst("span.block").text; + const imageUrl = element.selectFirst("img").getSrc; + const link = element.getHref; + list.push({ name, imageUrl, link }); + } + const hasNextPage = doc.selectFirst("a.flex.bg-themecolor:contains(Next)").text != ""; + return { "list": list, hasNextPage }; + } + toStatus(status) { + if (status == "Ongoing") + return 0; + else if (status == "Completed") + return 1; + else if (status == "Hiatus") + return 2; + else if (status == "Dropped") + return 3; + else + return 5; + } + parseDate(date) { + const months = { + "january": "01", "february": "02", "march": "03", "april": "04", + "may": "05", "june": "06", "july": "07", "august": "08", + "september": "09", "october": "10", "november": "11", "december": "12" + }; + date = date.toLowerCase().replace(/(st|nd|rd|th)/g, "").split(" "); + if (!(date[0] in months)) { + return String(new Date().valueOf()); + } + date[0] = months[date[0]]; + const formattedDate = `${date[2]}-${date[0]}-${date[1].padStart(2, "0")}`; // Format YYYY-MM-DD + return String(new Date(formattedDate).valueOf()); + } + + async getPopular(page) { + const baseUrl = new SharedPreferences().get("overrideBaseUrl1"); + const res = await new Client().get(`${baseUrl}/series?name=&status=-1&types=-1&order=rating&page=${page}`); + return this.mangaListFromPage(res); + } + + async getLatestUpdates(page) { + const baseUrl = new SharedPreferences().get("overrideBaseUrl1"); + const res = await new Client().get(`${baseUrl}/series?genres=&status=-1&types=-1&order=update&page=${page}`); + return this.mangaListFromPage(res); + } + async search(query, page, filters) { + const baseUrl = new SharedPreferences().get("overrideBaseUrl1"); + const res = await new Client().get(`${baseUrl}/series?name=${query}&page=${page}`); + return this.mangaListFromPage(res); + } + + async getDetail(url) { + const baseUrl = new SharedPreferences().get("overrideBaseUrl1"); + const res = await new Client().get(baseUrl + "/" + url); + const doc = new Document(res.body); + const imageUrl = doc.selectFirst("img[alt=poster]")?.getSrc; + const description = doc.selectFirst("span.font-medium.text-sm")?.text.trim(); + const author = doc.selectFirst("h3:contains('Author')").nextElementSibling.text.trim(); + const artist = doc.selectFirst("h3:contains('Artist')").nextElementSibling.text.trim(); + const status = this.toStatus(doc.selectFirst("h3:contains('Status')").nextElementSibling.text.trim()); + const genre = doc.select("div[class^=space] > div.flex > button.text-white") + .map((el) => el.text.trim()); + const chapters = []; + const chapterElements = doc.select("div.scrollbar-thumb-themecolor > div.group"); + for (const element of chapterElements) { + const url = element.selectFirst("a").getHref; + const chNumber = element.selectFirst("h3 > a").text; + const chTitle = element.select("h3 > a > span").map((span) => span.text.trim()).join(" ").trim(); + const name = chTitle == "" ? chNumber : `${chNumber} - ${chTitle}`; + + let dateUpload; + try { + const dateText = element.selectFirst("h3 + h3").text.trim(); + const cleanDateText = dateText.replace(/(\d+)(st|nd|rd|th)/, "$1"); + dateUpload = this.parseDate(cleanDateText); + } catch (_) { + dateUpload = null + } + chapters.push({ name, url, dateUpload }); + } + return { + imageUrl, + description, + genre, + author, + artist, + status, + chapters + }; + } + + + async getPageList(url) { + const baseUrl = new SharedPreferences().get("overrideBaseUrl1"); + const res = await new Client().get(baseUrl + "/series/" + url); + const scriptData = new Document(res.body).select("script:contains(self.__next_f.push)").map((e) => e.text.substringAfter("\"").substringBeforeLast("\"")).join(""); + console.log(scriptData); + const match = scriptData.match(/\\"pages\\":(\[.*?])/); + if (!match) { + throw new Error("Failed to find chapter pages"); + } + const pagesData = match[1]; + + const pageList = JSON.parse(pagesData.replace(/\\(.)/g, "$1")) + .sort((a, b) => a.order - b.order); + return pageList; + } + + getSourcePreferences() { + return [{ + "key": "overrideBaseUrl1", + "editTextPreference": { + "title": "Override BaseUrl", + "summary": "https://asuracomic.net", + "value": "https://asuracomic.net", + "dialogTitle": "Override BaseUrl", + "dialogMessage": "", + } + }]; + } + +} \ No newline at end of file diff --git a/model/source.dart b/model/source.dart index 84d3a218..666469fa 100644 --- a/model/source.dart +++ b/model/source.dart @@ -63,9 +63,10 @@ class Source { dateFormatLocale = json['dateFormatLocale'] ?? ""; hasCloudflare = json['hasCloudflare'] ?? false; iconUrl = json['iconUrl'] ?? ""; - id = (json['id'] ?? sourceCodeLang == 0 - ? 'mangayomi-"${json['lang'] ?? ""}"."${json['name'] ?? ""}"' - : 'mangayomi-js-"${json['lang'] ?? ""}"."${json['name'] ?? ""}"') + id = (json['id'] ?? + (sourceCodeLang == 0 + ? 'mangayomi-"${json['lang'] ?? ""}"."${json['name'] ?? ""}"' + : 'mangayomi-js-"${json['lang'] ?? ""}"."${json['name'] ?? ""}"')) .hashCode; isFullData = json['isFullData'] ?? false; itemType = json['itemType'] ?? ItemType.manga; diff --git a/source_generator.dart b/source_generator.dart index 1ee65660..21944e78 100644 --- a/source_generator.dart +++ b/source_generator.dart @@ -65,19 +65,31 @@ List _searchJsSources(Directory dir) { if (entity is Directory) { sourceList.addAll(_searchJsSources(entity)); } else if (entity is File && entity.path.endsWith('.js')) { - final RegExp regex = RegExp( - r'const\s+mangayomiSources\s*=\s*(\[.*?\]);', + final regex = RegExp(r'const\s+mangayomiSources\s*=\s*(\[.*?\]);', dotAll: true); final defaultSource = Source(); - Match? match = regex.firstMatch(entity.readAsStringSync()); + final match = regex.firstMatch(entity.readAsStringSync()); if (match != null) { - sourceList.addAll((jsonDecode(match.group(1)!) as List) - .map((e) => Source.fromJson(e) - ..sourceCodeLanguage = 1 - ..appMinVerReq = defaultSource.appMinVerReq - ..sourceCodeUrl = - "https://raw.githubusercontent.com/Schnitzel5/mangayomi-extensions/$branchName/javascript/${e["pkgPath"] ?? e["pkgName"]}") - .toList()); + for (var sourceJson in jsonDecode(match.group(1)!) as List) { + final langs = sourceJson["langs"] as List?; + Source source = Source.fromJson(sourceJson) + ..sourceCodeLanguage = 1 + ..appMinVerReq = defaultSource.appMinVerReq + ..sourceCodeUrl = + "https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/$branchName/javascript/${sourceJson["pkgPath"] ?? sourceJson["pkgName"]}"; + if (sourceJson["id"] != null) { + source = source..id = int.tryParse("${sourceJson["id"]}"); + } + if (langs?.isNotEmpty ?? false) { + for (var lang in langs!) { + sourceList.add(Source.fromJson(source.toJson()) + ..lang = lang + ..id = 'mangayomi-js-"$lang"."${source.name}"'.hashCode); + } + } else { + sourceList.add(source); + } + } } } } From 01a08177e151afb5459fb42a7de9c541d2feae0b Mon Sep 17 00:00:00 2001 From: Schnitzel5 Date: Mon, 25 Nov 2024 23:00:07 +0100 Subject: [PATCH 03/19] add novel support --- dart/anime/src/es/animeonlineninja/source.dart | 2 +- dart/anime/src/fr/anizone/source.dart | 2 +- javascript/anime/src/all/netflixmirror.js | 2 +- javascript/anime/src/de/serienstream.js | 2 +- javascript/anime/src/es/animefenix.js | 2 +- javascript/anime/src/es/jkanime.js | 2 +- javascript/anime/src/es/tioanime.js | 2 +- javascript/anime/src/zh/wogg.js | 2 +- javascript/anime/src/zh/yydsys.js | 2 +- javascript/manga/src/all/mangafire.js | 2 +- javascript/manga/src/en/asurascans.js | 2 +- 11 files changed, 11 insertions(+), 11 deletions(-) diff --git a/dart/anime/src/es/animeonlineninja/source.dart b/dart/anime/src/es/animeonlineninja/source.dart index edc46c89..a71f0972 100644 --- a/dart/anime/src/es/animeonlineninja/source.dart +++ b/dart/anime/src/es/animeonlineninja/source.dart @@ -13,4 +13,4 @@ Source _animeonlineninjaSource = Source( "https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/$branchName/dart/anime/src/es/animeonlineninja/icon.png", sourceCodeUrl: _animeonlineninjaSourceCodeUrl, version: _animeonlineninjaVersion, - isManga: false); + itemType: ItemType.anime); diff --git a/dart/anime/src/fr/anizone/source.dart b/dart/anime/src/fr/anizone/source.dart index 4caf9537..3c1fa693 100644 --- a/dart/anime/src/fr/anizone/source.dart +++ b/dart/anime/src/fr/anizone/source.dart @@ -13,4 +13,4 @@ Source _aniZoneSource = Source( "https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/$branchName/dart/anime/src/fr/anizone/icon.png", sourceCodeUrl: _aniZoneSourceCodeUrl, version: _aniZoneVersion, - isManga: false); + itemType: ItemType.anime); diff --git a/javascript/anime/src/all/netflixmirror.js b/javascript/anime/src/all/netflixmirror.js index 3fa88c48..3682a89e 100644 --- a/javascript/anime/src/all/netflixmirror.js +++ b/javascript/anime/src/all/netflixmirror.js @@ -5,7 +5,7 @@ const mangayomiSources = [{ "apiUrl": "", "iconUrl": "https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/javascript/icon/all.netflixmirror.png", "typeSource": "single", - "isManga": false, + "itemType": "anime", "version": "0.0.45", "dateFormat": "", "dateFormatLocale": "", diff --git a/javascript/anime/src/de/serienstream.js b/javascript/anime/src/de/serienstream.js index 64dca94c..dadf7804 100644 --- a/javascript/anime/src/de/serienstream.js +++ b/javascript/anime/src/de/serienstream.js @@ -5,7 +5,7 @@ const mangayomiSources = [{ "apiUrl": "", "iconUrl": "https://s.to/favicon.ico", "typeSource": "single", - "isManga": false, + "itemType": "anime", "isNsfw": false, "version": "0.0.2", "dateFormat": "", diff --git a/javascript/anime/src/es/animefenix.js b/javascript/anime/src/es/animefenix.js index df82d147..f1271867 100644 --- a/javascript/anime/src/es/animefenix.js +++ b/javascript/anime/src/es/animefenix.js @@ -5,7 +5,7 @@ const mangayomiSources = [{ "apiUrl": "", "iconUrl": "https://www3.animefenix.tv/themes/fenix-neo/images/AveFenix.png", "typeSource": "single", - "isManga": false, + "itemType": "anime", "version": "0.1.0", "dateFormat": "", "dateFormatLocale": "", diff --git a/javascript/anime/src/es/jkanime.js b/javascript/anime/src/es/jkanime.js index a1ab1bf9..d2a104c4 100644 --- a/javascript/anime/src/es/jkanime.js +++ b/javascript/anime/src/es/jkanime.js @@ -5,7 +5,7 @@ const mangayomiSources = [{ "apiUrl": "", "iconUrl": "https://cdn.jkdesu.com/assets2/css/img/favicon.ico", "typeSource": "single", - "isManga": false, + "itemType": "anime", "version": "0.1.0", "dateFormat": "", "dateFormatLocale": "", diff --git a/javascript/anime/src/es/tioanime.js b/javascript/anime/src/es/tioanime.js index 729e30a2..438ba219 100644 --- a/javascript/anime/src/es/tioanime.js +++ b/javascript/anime/src/es/tioanime.js @@ -5,7 +5,7 @@ const mangayomiSources = [{ "apiUrl": "", "iconUrl": "https://tioanime.com/assets/img/tio_fb.jpg", "typeSource": "single", - "isManga": false, + "itemType": "anime", "version": "0.1.0", "dateFormat": "", "dateFormatLocale": "", diff --git a/javascript/anime/src/zh/wogg.js b/javascript/anime/src/zh/wogg.js index 20112134..c9498854 100644 --- a/javascript/anime/src/zh/wogg.js +++ b/javascript/anime/src/zh/wogg.js @@ -5,7 +5,7 @@ const mangayomiSources = [{ "apiUrl": "", "iconUrl": "https://imgsrc.baidu.com/forum/pic/item/4b90f603738da977d5da660af651f8198618e31f.jpg", "typeSource": "single", - "isManga": false, + "itemType": "anime", "isNsfw": false, "version": "0.0.2", "dateFormat": "", diff --git a/javascript/anime/src/zh/yydsys.js b/javascript/anime/src/zh/yydsys.js index bcfc74f7..37f8f812 100644 --- a/javascript/anime/src/zh/yydsys.js +++ b/javascript/anime/src/zh/yydsys.js @@ -5,7 +5,7 @@ const mangayomiSources = [{ "apiUrl": "", "iconUrl": "https://tv.yydsys.top/template/DYXS2/static/picture/logo.png", "typeSource": "single", - "isManga": false, + "itemType": "anime", "isNsfw": false, "version": "0.0.2", "dateFormat": "", diff --git a/javascript/manga/src/all/mangafire.js b/javascript/manga/src/all/mangafire.js index c3befa4d..2ddaaf92 100644 --- a/javascript/manga/src/all/mangafire.js +++ b/javascript/manga/src/all/mangafire.js @@ -5,7 +5,7 @@ const mangayomiSources = [{ "apiUrl": "", "iconUrl": "https://mangafire.to/assets/sites/mangafire/favicon.png?v3", "typeSource": "single", - "isManga": true, + "itemType": "anime", "version": "0.1.2", "dateFormat": "", "dateFormatLocale": "", diff --git a/javascript/manga/src/en/asurascans.js b/javascript/manga/src/en/asurascans.js index a95af2d5..e9a7c4c3 100644 --- a/javascript/manga/src/en/asurascans.js +++ b/javascript/manga/src/en/asurascans.js @@ -6,7 +6,7 @@ const mangayomiSources = [{ "apiUrl": "", "iconUrl": "https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/javascript/icon/en.asurascans.png", "typeSource": "single", - "isManga": true, + "itemType": "anime", "version": "0.1.65", "dateFormat": "", "dateFormatLocale": "", From 6ce207c3751af3b91c36e84cae5353d2dd39de8f Mon Sep 17 00:00:00 2001 From: Schnitzel5 Date: Mon, 25 Nov 2024 23:03:39 +0100 Subject: [PATCH 04/19] fix --- model/source.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/model/source.dart b/model/source.dart index 666469fa..deffb84f 100644 --- a/model/source.dart +++ b/model/source.dart @@ -69,7 +69,7 @@ class Source { : 'mangayomi-js-"${json['lang'] ?? ""}"."${json['name'] ?? ""}"')) .hashCode; isFullData = json['isFullData'] ?? false; - itemType = json['itemType'] ?? ItemType.manga; + itemType = ItemType.values[json['itemType'] ?? 0]; isNsfw = json['isNsfw'] ?? false; lang = json['lang'] ?? ""; name = json['name'] ?? ""; From aa7cca7162567d9db05555520ac342fe35dcdbc0 Mon Sep 17 00:00:00 2001 From: Schnitzel5 Date: Mon, 25 Nov 2024 23:06:37 +0100 Subject: [PATCH 05/19] fix --- model/source.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/model/source.dart b/model/source.dart index deffb84f..94b2b4c6 100644 --- a/model/source.dart +++ b/model/source.dart @@ -95,7 +95,7 @@ class Source { "sourceCodeUrl": sourceCodeUrl, "apiUrl": apiUrl, "version": version, - "itemType": itemType, + "itemType": itemType?.index ?? 0, "isFullData": isFullData, "appMinVerReq": appMinVerReq, "additionalParams": additionalParams, From f69fd3695e9fa2873b3d6eb7cdb74f3d2b1540a6 Mon Sep 17 00:00:00 2001 From: Schnitzel5 Date: Wed, 27 Nov 2024 15:11:25 +0100 Subject: [PATCH 06/19] fixed error --- javascript/anime/src/all/netflixmirror.js | 2 +- javascript/anime/src/de/aniworld.js | 2 +- javascript/anime/src/de/serienstream.js | 2 +- javascript/anime/src/en/allanime.js | 2 +- javascript/anime/src/es/animefenix.js | 2 +- javascript/anime/src/es/animeflv.js | 2 +- javascript/anime/src/es/jkanime.js | 2 +- javascript/anime/src/es/tioanime.js | 2 +- javascript/anime/src/zh/360zy.js | 2 +- javascript/anime/src/zh/ffzy.js | 2 +- javascript/anime/src/zh/huaweiba.js | 2 +- javascript/anime/src/zh/jisuzy.js | 2 +- javascript/anime/src/zh/mikan.js | 2 +- javascript/anime/src/zh/tiankongzy.js | 2 +- javascript/anime/src/zh/wogg.js | 2 +- javascript/anime/src/zh/yhdm.js | 2 +- javascript/anime/src/zh/yydsys.js | 2 +- javascript/manga/src/all/mangafire.js | 2 +- javascript/manga/src/en/asurascans.js | 2 +- javascript/manga/src/zh/77mh.js | 2 +- javascript/manga/src/zh/copymanga.js | 2 +- javascript/manga/src/zh/dmzj.js | 2 +- javascript/manga/src/zh/manhuadb.js | 2 +- javascript/manga/src/zh/manhuagui.js | 2 +- 24 files changed, 24 insertions(+), 24 deletions(-) diff --git a/javascript/anime/src/all/netflixmirror.js b/javascript/anime/src/all/netflixmirror.js index 3682a89e..732f902d 100644 --- a/javascript/anime/src/all/netflixmirror.js +++ b/javascript/anime/src/all/netflixmirror.js @@ -5,7 +5,7 @@ const mangayomiSources = [{ "apiUrl": "", "iconUrl": "https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/javascript/icon/all.netflixmirror.png", "typeSource": "single", - "itemType": "anime", + "itemType": 1, "version": "0.0.45", "dateFormat": "", "dateFormatLocale": "", diff --git a/javascript/anime/src/de/aniworld.js b/javascript/anime/src/de/aniworld.js index 09a63c7c..4b1d1dd6 100644 --- a/javascript/anime/src/de/aniworld.js +++ b/javascript/anime/src/de/aniworld.js @@ -5,7 +5,7 @@ const mangayomiSources = [{ "apiUrl": "", "iconUrl": "https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/javascript/icon/de.aniworld.png", "typeSource": "single", - "itemType": "anime", + "itemType": 1, "isNsfw": false, "version": "0.0.28", "dateFormat": "", diff --git a/javascript/anime/src/de/serienstream.js b/javascript/anime/src/de/serienstream.js index dadf7804..8ec23f50 100644 --- a/javascript/anime/src/de/serienstream.js +++ b/javascript/anime/src/de/serienstream.js @@ -5,7 +5,7 @@ const mangayomiSources = [{ "apiUrl": "", "iconUrl": "https://s.to/favicon.ico", "typeSource": "single", - "itemType": "anime", + "itemType": 1, "isNsfw": false, "version": "0.0.2", "dateFormat": "", diff --git a/javascript/anime/src/en/allanime.js b/javascript/anime/src/en/allanime.js index a69deb4b..f1af692d 100644 --- a/javascript/anime/src/en/allanime.js +++ b/javascript/anime/src/en/allanime.js @@ -5,7 +5,7 @@ const mangayomiSources = [{ "apiUrl": "https://api.allanime.day/api", "iconUrl": "https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/javascript/icon/en.allanime.png", "typeSource": "single", - "itemType": "anime", + "itemType": 1, "isNsfw": false, "version": "0.0.35", "dateFormat": "", diff --git a/javascript/anime/src/es/animefenix.js b/javascript/anime/src/es/animefenix.js index f1271867..c0694628 100644 --- a/javascript/anime/src/es/animefenix.js +++ b/javascript/anime/src/es/animefenix.js @@ -5,7 +5,7 @@ const mangayomiSources = [{ "apiUrl": "", "iconUrl": "https://www3.animefenix.tv/themes/fenix-neo/images/AveFenix.png", "typeSource": "single", - "itemType": "anime", + "itemType": 1, "version": "0.1.0", "dateFormat": "", "dateFormatLocale": "", diff --git a/javascript/anime/src/es/animeflv.js b/javascript/anime/src/es/animeflv.js index cd59da2f..0a3a7eda 100644 --- a/javascript/anime/src/es/animeflv.js +++ b/javascript/anime/src/es/animeflv.js @@ -5,7 +5,7 @@ const mangayomiSources = [{ "apiUrl": "", "iconUrl": "https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/javascript/icon/es.animeflv.png", "typeSource": "single", - "itemType": "anime", + "itemType": 1, "isNsfw": false, "version": "0.0.1", "dateFormat": "", diff --git a/javascript/anime/src/es/jkanime.js b/javascript/anime/src/es/jkanime.js index d2a104c4..f09ba708 100644 --- a/javascript/anime/src/es/jkanime.js +++ b/javascript/anime/src/es/jkanime.js @@ -5,7 +5,7 @@ const mangayomiSources = [{ "apiUrl": "", "iconUrl": "https://cdn.jkdesu.com/assets2/css/img/favicon.ico", "typeSource": "single", - "itemType": "anime", + "itemType": 1, "version": "0.1.0", "dateFormat": "", "dateFormatLocale": "", diff --git a/javascript/anime/src/es/tioanime.js b/javascript/anime/src/es/tioanime.js index 438ba219..d1a0dfcf 100644 --- a/javascript/anime/src/es/tioanime.js +++ b/javascript/anime/src/es/tioanime.js @@ -5,7 +5,7 @@ const mangayomiSources = [{ "apiUrl": "", "iconUrl": "https://tioanime.com/assets/img/tio_fb.jpg", "typeSource": "single", - "itemType": "anime", + "itemType": 1, "version": "0.1.0", "dateFormat": "", "dateFormatLocale": "", diff --git a/javascript/anime/src/zh/360zy.js b/javascript/anime/src/zh/360zy.js index 0ecceaeb..4ee378f5 100644 --- a/javascript/anime/src/zh/360zy.js +++ b/javascript/anime/src/zh/360zy.js @@ -5,7 +5,7 @@ const mangayomiSources = [{ "apiUrl": "", "iconUrl": "https://360zy.com/favicon.ico", "typeSource": "single", - "itemType": "anime", + "itemType": 1, "isNsfw": false, "version": "0.0.1", "dateFormat": "", diff --git a/javascript/anime/src/zh/ffzy.js b/javascript/anime/src/zh/ffzy.js index 65ab73d1..dbd79752 100644 --- a/javascript/anime/src/zh/ffzy.js +++ b/javascript/anime/src/zh/ffzy.js @@ -5,7 +5,7 @@ const mangayomiSources = [{ "apiUrl": "", "iconUrl": "http://ffzy.tv/template/default/img/favicon.png", "typeSource": "single", - "itemType": "anime", + "itemType": 1, "isNsfw": false, "version": "0.0.1", "dateFormat": "", diff --git a/javascript/anime/src/zh/huaweiba.js b/javascript/anime/src/zh/huaweiba.js index 56ea0744..3f109ba3 100644 --- a/javascript/anime/src/zh/huaweiba.js +++ b/javascript/anime/src/zh/huaweiba.js @@ -5,7 +5,7 @@ const mangayomiSources = [{ "apiUrl": "", "iconUrl": "https://huaweiba.live/template/ziyuan/images/logo2.png", "typeSource": "single", - "itemType": "anime", + "itemType": 1, "isNsfw": false, "version": "0.0.1", "dateFormat": "", diff --git a/javascript/anime/src/zh/jisuzy.js b/javascript/anime/src/zh/jisuzy.js index e3ce912b..0c4f0fb8 100644 --- a/javascript/anime/src/zh/jisuzy.js +++ b/javascript/anime/src/zh/jisuzy.js @@ -5,7 +5,7 @@ const mangayomiSources = [{ "apiUrl": "", "iconUrl": "https://www.jisuzy.com/template/default/images/site_logo.png", "typeSource": "single", - "itemType": "anime", + "itemType": 1, "isNsfw": false, "version": "0.0.1", "dateFormat": "", diff --git a/javascript/anime/src/zh/mikan.js b/javascript/anime/src/zh/mikan.js index fc5d122e..e7e65b51 100644 --- a/javascript/anime/src/zh/mikan.js +++ b/javascript/anime/src/zh/mikan.js @@ -5,7 +5,7 @@ const mangayomiSources = [{ "apiUrl": "", "iconUrl": "https://mikanime.tv/images/mikan-pic.png", "typeSource": "torrent", - "itemType": "anime", + "itemType": 1, "isNsfw": false, "version": "0.0.15", "dateFormat": "", diff --git a/javascript/anime/src/zh/tiankongzy.js b/javascript/anime/src/zh/tiankongzy.js index eb23c9a4..06d0906d 100644 --- a/javascript/anime/src/zh/tiankongzy.js +++ b/javascript/anime/src/zh/tiankongzy.js @@ -5,7 +5,7 @@ const mangayomiSources = [{ "apiUrl": "", "iconUrl": "https://api.tiankongapi.com/template/v10012/images/logo.jpg", "typeSource": "single", - "itemType": "anime", + "itemType": 1, "isNsfw": false, "version": "0.0.1", "dateFormat": "", diff --git a/javascript/anime/src/zh/wogg.js b/javascript/anime/src/zh/wogg.js index c9498854..ab606811 100644 --- a/javascript/anime/src/zh/wogg.js +++ b/javascript/anime/src/zh/wogg.js @@ -5,7 +5,7 @@ const mangayomiSources = [{ "apiUrl": "", "iconUrl": "https://imgsrc.baidu.com/forum/pic/item/4b90f603738da977d5da660af651f8198618e31f.jpg", "typeSource": "single", - "itemType": "anime", + "itemType": 1, "isNsfw": false, "version": "0.0.2", "dateFormat": "", diff --git a/javascript/anime/src/zh/yhdm.js b/javascript/anime/src/zh/yhdm.js index d8c615db..e720af67 100644 --- a/javascript/anime/src/zh/yhdm.js +++ b/javascript/anime/src/zh/yhdm.js @@ -5,7 +5,7 @@ const mangayomiSources = [{ "apiUrl": "", "iconUrl": "http://www.iyinghua.io/js/20180601/favicon.ico", "typeSource": "single", - "itemType": "anime", + "itemType": 1, "isNsfw": false, "version": "0.0.15", "dateFormat": "", diff --git a/javascript/anime/src/zh/yydsys.js b/javascript/anime/src/zh/yydsys.js index 37f8f812..40787d71 100644 --- a/javascript/anime/src/zh/yydsys.js +++ b/javascript/anime/src/zh/yydsys.js @@ -5,7 +5,7 @@ const mangayomiSources = [{ "apiUrl": "", "iconUrl": "https://tv.yydsys.top/template/DYXS2/static/picture/logo.png", "typeSource": "single", - "itemType": "anime", + "itemType": 1, "isNsfw": false, "version": "0.0.2", "dateFormat": "", diff --git a/javascript/manga/src/all/mangafire.js b/javascript/manga/src/all/mangafire.js index 2ddaaf92..5dda18ea 100644 --- a/javascript/manga/src/all/mangafire.js +++ b/javascript/manga/src/all/mangafire.js @@ -5,7 +5,7 @@ const mangayomiSources = [{ "apiUrl": "", "iconUrl": "https://mangafire.to/assets/sites/mangafire/favicon.png?v3", "typeSource": "single", - "itemType": "anime", + "itemType": 0, "version": "0.1.2", "dateFormat": "", "dateFormatLocale": "", diff --git a/javascript/manga/src/en/asurascans.js b/javascript/manga/src/en/asurascans.js index e9a7c4c3..357aa80d 100644 --- a/javascript/manga/src/en/asurascans.js +++ b/javascript/manga/src/en/asurascans.js @@ -6,7 +6,7 @@ const mangayomiSources = [{ "apiUrl": "", "iconUrl": "https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/javascript/icon/en.asurascans.png", "typeSource": "single", - "itemType": "anime", + "itemType": 0, "version": "0.1.65", "dateFormat": "", "dateFormatLocale": "", diff --git a/javascript/manga/src/zh/77mh.js b/javascript/manga/src/zh/77mh.js index 6f6fbda4..2030e666 100644 --- a/javascript/manga/src/zh/77mh.js +++ b/javascript/manga/src/zh/77mh.js @@ -5,7 +5,7 @@ const mangayomiSources = [{ "apiUrl": "", "iconUrl": "https://www.77mh.nl/favicon.ico", "typeSource": "single", - "itemType": "manga", + "itemType": 0, "isNsfw": false, "version": "0.0.25", "apiUrl": "", diff --git a/javascript/manga/src/zh/copymanga.js b/javascript/manga/src/zh/copymanga.js index aa11dd73..0393af8b 100644 --- a/javascript/manga/src/zh/copymanga.js +++ b/javascript/manga/src/zh/copymanga.js @@ -5,7 +5,7 @@ const mangayomiSources = [{ "apiUrl": "https://api.mangacopy.com", "iconUrl": "https://hi77-overseas.mangafuna.xyz/static/free.ico", "typeSource": "single", - "itemType": "manga", + "itemType": 0, "isNsfw": false, "version": "0.0.2", "dateFormat": "", diff --git a/javascript/manga/src/zh/dmzj.js b/javascript/manga/src/zh/dmzj.js index 064c7934..da76ad2c 100644 --- a/javascript/manga/src/zh/dmzj.js +++ b/javascript/manga/src/zh/dmzj.js @@ -5,7 +5,7 @@ const mangayomiSources = [{ "apiUrl": "", "iconUrl": "https://www.dmzj.com/_nuxt/logo_dmzj.1c94014a.png", "typeSource": "single", - "itemType": "manga", + "itemType": 0, "isNsfw": false, "version": "0.0.25", "dateFormat": "", diff --git a/javascript/manga/src/zh/manhuadb.js b/javascript/manga/src/zh/manhuadb.js index ad52caf7..b66cf33d 100644 --- a/javascript/manga/src/zh/manhuadb.js +++ b/javascript/manga/src/zh/manhuadb.js @@ -5,7 +5,7 @@ const mangayomiSources = [{ "apiUrl": "", "iconUrl": "https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/javascript/icon/zh.manhuadb.png", "typeSource": "single", - "itemType": "manga", + "itemType": 0, "isNsfw": false, "version": "0.0.25", "dateFormat": "", diff --git a/javascript/manga/src/zh/manhuagui.js b/javascript/manga/src/zh/manhuagui.js index 44bb2e73..94e30518 100644 --- a/javascript/manga/src/zh/manhuagui.js +++ b/javascript/manga/src/zh/manhuagui.js @@ -5,7 +5,7 @@ const mangayomiSources = [{ "apiUrl": "", "iconUrl": "https://www.manhuagui.com/favicon.ico", "typeSource": "single", - "itemType": "manga", + "itemType": 0, "isNsfw": false, "version": "0.0.25", "dateFormat": "", From 3c21983c6ec7e97c2cc93d01dd04db630477f9b3 Mon Sep 17 00:00:00 2001 From: Schnitzel5 Date: Thu, 28 Nov 2024 15:47:22 +0100 Subject: [PATCH 07/19] added novel template --- javascript/icon/en.novelupdates.png | Bin 0 -> 18696 bytes javascript/novel/src/en/novelupdates.js | 148 ++++++++++++++++++++++++ 2 files changed, 148 insertions(+) create mode 100644 javascript/icon/en.novelupdates.png create mode 100644 javascript/novel/src/en/novelupdates.js diff --git a/javascript/icon/en.novelupdates.png b/javascript/icon/en.novelupdates.png new file mode 100644 index 0000000000000000000000000000000000000000..92ee0b7532a3e76e4716b81070bd0730d709c472 GIT binary patch literal 18696 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 a[href]"); + const list = []; + for (const element of mangaElements) { + const name = element.selectFirst("span.block").text; + const imageUrl = element.selectFirst("img").getSrc; + const link = element.getHref; + list.push({ name, imageUrl, link }); + } + const hasNextPage = doc.selectFirst("a.flex.bg-themecolor:contains(Next)").text != ""; + return { "list": list, hasNextPage }; + } + toStatus(status) { + if (status == "Ongoing") + return 0; + else if (status == "Completed") + return 1; + else if (status == "Hiatus") + return 2; + else if (status == "Dropped") + return 3; + else + return 5; + } + parseDate(date) { + const months = { + "january": "01", "february": "02", "march": "03", "april": "04", + "may": "05", "june": "06", "july": "07", "august": "08", + "september": "09", "october": "10", "november": "11", "december": "12" + }; + date = date.toLowerCase().replace(/(st|nd|rd|th)/g, "").split(" "); + if (!(date[0] in months)) { + return String(new Date().valueOf()); + } + date[0] = months[date[0]]; + const formattedDate = `${date[2]}-${date[0]}-${date[1].padStart(2, "0")}`; // Format YYYY-MM-DD + return String(new Date(formattedDate).valueOf()); + } + + async getPopular(page) { + const baseUrl = new SharedPreferences().get("overrideBaseUrl1"); + const res = await new Client().get(`${baseUrl}/series?name=&status=-1&types=-1&order=rating&page=${page}`); + return this.mangaListFromPage(res); + } + + async getLatestUpdates(page) { + const baseUrl = new SharedPreferences().get("overrideBaseUrl1"); + const res = await new Client().get(`${baseUrl}/series?genres=&status=-1&types=-1&order=update&page=${page}`); + return this.mangaListFromPage(res); + } + async search(query, page, filters) { + const baseUrl = new SharedPreferences().get("overrideBaseUrl1"); + const res = await new Client().get(`${baseUrl}/series?name=${query}&page=${page}`); + return this.mangaListFromPage(res); + } + + async getDetail(url) { + const baseUrl = new SharedPreferences().get("overrideBaseUrl1"); + const res = await new Client().get(baseUrl + "/" + url); + const doc = new Document(res.body); + const imageUrl = doc.selectFirst("img[alt=poster]")?.getSrc; + const description = doc.selectFirst("span.font-medium.text-sm")?.text.trim(); + const author = doc.selectFirst("h3:contains('Author')").nextElementSibling.text.trim(); + const artist = doc.selectFirst("h3:contains('Artist')").nextElementSibling.text.trim(); + const status = this.toStatus(doc.selectFirst("h3:contains('Status')").nextElementSibling.text.trim()); + const genre = doc.select("div[class^=space] > div.flex > button.text-white") + .map((el) => el.text.trim()); + const chapters = []; + const chapterElements = doc.select("div.scrollbar-thumb-themecolor > div.group"); + for (const element of chapterElements) { + const url = element.selectFirst("a").getHref; + const chNumber = element.selectFirst("h3 > a").text; + const chTitle = element.select("h3 > a > span").map((span) => span.text.trim()).join(" ").trim(); + const name = chTitle == "" ? chNumber : `${chNumber} - ${chTitle}`; + + let dateUpload; + try { + const dateText = element.selectFirst("h3 + h3").text.trim(); + const cleanDateText = dateText.replace(/(\d+)(st|nd|rd|th)/, "$1"); + dateUpload = this.parseDate(cleanDateText); + } catch (_) { + dateUpload = null + } + chapters.push({ name, url, dateUpload }); + } + return { + imageUrl, + description, + genre, + author, + artist, + status, + chapters + }; + } + + + async getPageList(url) { + const baseUrl = new SharedPreferences().get("overrideBaseUrl1"); + const res = await new Client().get(baseUrl + "/series/" + url); + const scriptData = new Document(res.body).select("script:contains(self.__next_f.push)").map((e) => e.text.substringAfter("\"").substringBeforeLast("\"")).join(""); + console.log(scriptData); + const match = scriptData.match(/\\"pages\\":(\[.*?])/); + if (!match) { + throw new Error("Failed to find chapter pages"); + } + const pagesData = match[1]; + + const pageList = JSON.parse(pagesData.replace(/\\(.)/g, "$1")) + .sort((a, b) => a.order - b.order); + return pageList; + } + + getSourcePreferences() { + return [{ + "key": "overrideBaseUrl1", + "editTextPreference": { + "title": "Override BaseUrl", + "summary": "https://novelupdates.com", + "value": "https://novelupdates.com", + "dialogTitle": "Override BaseUrl", + "dialogMessage": "", + } + }]; + } + +} \ No newline at end of file From cd418a421416325a65d1a89e59b14ed84255c3e0 Mon Sep 17 00:00:00 2001 From: Schnitzel5 Date: Sun, 1 Dec 2024 00:52:42 +0100 Subject: [PATCH 08/19] fix --- javascript/novel/src/en/novelupdates.js | 3 ++- source_generator.dart | 6 +++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/javascript/novel/src/en/novelupdates.js b/javascript/novel/src/en/novelupdates.js index d7d42f6e..60523576 100644 --- a/javascript/novel/src/en/novelupdates.js +++ b/javascript/novel/src/en/novelupdates.js @@ -9,7 +9,8 @@ const mangayomiSources = [{ "version": "0.0.1", "dateFormat": "", "dateFormatLocale": "", - "pkgPath": "novel/src/en/novelupdates.js" + "pkgPath": "novel/src/en/novelupdates.js", + "appMinVerReq": "0.3.75" }]; class DefaultExtension extends MProvider { diff --git a/source_generator.dart b/source_generator.dart index 21944e78..7146c763 100644 --- a/source_generator.dart +++ b/source_generator.dart @@ -8,9 +8,9 @@ import 'model/source.dart'; void main() { final jsSources = _searchJsSources(Directory("javascript")); - genManga(jsSources.where((element) => element.itemType == "manga").toList()); - genAnime(jsSources.where((element) => element.itemType == "anime").toList()); - genNovel(jsSources.where((element) => element.itemType == "novel").toList()); + genManga(jsSources.where((element) => element.itemType!.name == "manga").toList()); + genAnime(jsSources.where((element) => element.itemType!.name == "anime").toList()); + genNovel(jsSources.where((element) => element.itemType!.name == "novel").toList()); } void genManga(List jsMangasourceList) { From 0b81e7a0aa48fb2211743014f4bebfc5a93ee9e9 Mon Sep 17 00:00:00 2001 From: Schnitzel5 Date: Sun, 1 Dec 2024 19:11:59 +0100 Subject: [PATCH 09/19] testing novel source --- javascript/icon/en.novelupdates.png | Bin 18696 -> 525 bytes javascript/novel/src/en/novelupdates.js | 90 ++++++++++++++---------- 2 files changed, 54 insertions(+), 36 deletions(-) diff --git a/javascript/icon/en.novelupdates.png b/javascript/icon/en.novelupdates.png index 92ee0b7532a3e76e4716b81070bd0730d709c472..a58a766671dbdc3c64d5f3cd8aa99e54caee3285 100644 GIT binary patch literal 525 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 a[href]"); + const mangaElements = doc.select("div.grid > div.search_main_box_nu"); const list = []; for (const element of mangaElements) { - const name = element.selectFirst("span.block").text; + const name = element.selectFirst(".search_title > a").text; const imageUrl = element.selectFirst("img").getSrc; - const link = element.getHref; + const link = element.selectFirst(".search_title > a").getHref.replace("https://novelupdates.com/", ""); list.push({ name, imageUrl, link }); } - const hasNextPage = doc.selectFirst("a.flex.bg-themecolor:contains(Next)").text != ""; + const hasNextPage = doc.selectFirst("div.digg_pagination > a.next_page").text == " →"; return { "list": list, hasNextPage }; } toStatus(status) { - if (status == "Ongoing") + if (status.includes("Ongoing")) return 0; - else if (status == "Completed") + else if (status.includes("Completed")) return 1; - else if (status == "Hiatus") + else if (status.includes("Hiatus")) return 2; - else if (status == "Dropped") + else if (status.includes("Dropped")) return 3; else return 5; @@ -61,18 +61,18 @@ class DefaultExtension extends MProvider { async getPopular(page) { const baseUrl = new SharedPreferences().get("overrideBaseUrl1"); - const res = await new Client().get(`${baseUrl}/series?name=&status=-1&types=-1&order=rating&page=${page}`); + const res = await new Client().get(`${baseUrl}/series-ranking/?rank=popmonth&pg=${page}`); return this.mangaListFromPage(res); } async getLatestUpdates(page) { const baseUrl = new SharedPreferences().get("overrideBaseUrl1"); - const res = await new Client().get(`${baseUrl}/series?genres=&status=-1&types=-1&order=update&page=${page}`); + const res = await new Client().get(`${baseUrl}/series-finder/?sf=1&sh=&sort=sdate&order=desc&pg=${page}`); return this.mangaListFromPage(res); } async search(query, page, filters) { const baseUrl = new SharedPreferences().get("overrideBaseUrl1"); - const res = await new Client().get(`${baseUrl}/series?name=${query}&page=${page}`); + const res = await new Client().get(`${baseUrl}/series-finder/?sf=1&sh=${query}&sort=sdate&order=desc&pg=${page}`); return this.mangaListFromPage(res); } @@ -80,31 +80,50 @@ class DefaultExtension extends MProvider { const baseUrl = new SharedPreferences().get("overrideBaseUrl1"); const res = await new Client().get(baseUrl + "/" + url); const doc = new Document(res.body); - const imageUrl = doc.selectFirst("img[alt=poster]")?.getSrc; - const description = doc.selectFirst("span.font-medium.text-sm")?.text.trim(); - const author = doc.selectFirst("h3:contains('Author')").nextElementSibling.text.trim(); - const artist = doc.selectFirst("h3:contains('Artist')").nextElementSibling.text.trim(); - const status = this.toStatus(doc.selectFirst("h3:contains('Status')").nextElementSibling.text.trim()); - const genre = doc.select("div[class^=space] > div.flex > button.text-white") - .map((el) => el.text.trim()); - const chapters = []; - const chapterElements = doc.select("div.scrollbar-thumb-themecolor > div.group"); - for (const element of chapterElements) { - const url = element.selectFirst("a").getHref; - const chNumber = element.selectFirst("h3 > a").text; - const chTitle = element.select("h3 > a > span").map((span) => span.text.trim()).join(" ").trim(); - const name = chTitle == "" ? chNumber : `${chNumber} - ${chTitle}`; + const imageUrl = doc.selectFirst(".wpb_wrapper img")?.getSrc; + const type = doc.selectFirst("#showtype")?.text.trim(); + const description = doc.selectFirst("#editdescription")?.text.trim() + `\n\nType: ${type}`; + const author = doc.select("#authtag").map((el) => el.text.trim()).join(", "); + const artist = doc.select("#artiststag").map((el) => el.text.trim()).join(", "); + const status = this.toStatus(doc.selectFirst("#editstatus").text.trim()); + const genre = doc.select("#seriesgenre > a") + .map((el) => el.text.trim()); - let dateUpload; - try { - const dateText = element.selectFirst("h3 + h3").text.trim(); - const cleanDateText = dateText.replace(/(\d+)(st|nd|rd|th)/, "$1"); - dateUpload = this.parseDate(cleanDateText); - } catch (_) { - dateUpload = null + const novelId = doc.selectFirst("input#mypostid")?.attr("value"); + const formData = new FormData(); + formData.append('action', 'nd_getchapters'); + formData.append('mygrr', '0'); + formData.append('mypostid', novelId); + + const link = `${baseUrl}/wp-admin/admin-ajax.php`; + + const headers = { + "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8", + 'Referer': baseUrl + "/" + url, + }; + + const chapters = []; + const chapterRes = await client.post(link, headers, formData); + const chapterDoc = new Document(chapterRes.body); + + const nameReplacements = { + 'v': 'volume ', + 'c': ' chapter ', + 'part': 'part ', + 'ss': 'SS', + }; + + chapterDoc.select("li.sp_li_chp").forEach((el) => { + let chapterName = el.text; + for (const name in nameReplacements) { + chapterName = chapterName.replace(name, nameReplacements[name]); } - chapters.push({ name, url, dateUpload }); - } + chapterName = chapterName.replace(/\b\w/g, l => l.toUpperCase()).trim(); + const chapterUrl = `https:${el.select("a")[1].attr("href")}`; + const dateUpload = String(Date.now()); + chapters.push({ chapterName, chapterUrl, dateUpload }); + }); + return { imageUrl, description, @@ -116,7 +135,6 @@ class DefaultExtension extends MProvider { }; } - async getPageList(url) { const baseUrl = new SharedPreferences().get("overrideBaseUrl1"); const res = await new Client().get(baseUrl + "/series/" + url); From 4f554eff52977bf2bc009f81fe960296071b5b33 Mon Sep 17 00:00:00 2001 From: Schnitzel5 Date: Sun, 1 Dec 2024 19:33:47 +0100 Subject: [PATCH 10/19] temp redirect --- source_generator.dart | 3 +++ 1 file changed, 3 insertions(+) diff --git a/source_generator.dart b/source_generator.dart index 7146c763..251c4e48 100644 --- a/source_generator.dart +++ b/source_generator.dart @@ -77,6 +77,9 @@ List _searchJsSources(Directory dir) { ..appMinVerReq = defaultSource.appMinVerReq ..sourceCodeUrl = "https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/$branchName/javascript/${sourceJson["pkgPath"] ?? sourceJson["pkgName"]}"; + if (source.itemType == ItemType.novel) { + source.sourceCodeUrl = source.sourceCodeUrl?.replaceAll("kodjodevf", "Schnitzel5"); + } if (sourceJson["id"] != null) { source = source..id = int.tryParse("${sourceJson["id"]}"); } From 209f5d883a68646ef2af567f342adf2670f0df2c Mon Sep 17 00:00:00 2001 From: Schnitzel5 Date: Sun, 8 Dec 2024 22:53:12 +0100 Subject: [PATCH 11/19] fix NovelUpdates --- javascript/novel/src/en/novelupdates.js | 74 +++++++++++++++---------- 1 file changed, 46 insertions(+), 28 deletions(-) diff --git a/javascript/novel/src/en/novelupdates.js b/javascript/novel/src/en/novelupdates.js index 8f37414b..5d4ff8fc 100644 --- a/javascript/novel/src/en/novelupdates.js +++ b/javascript/novel/src/en/novelupdates.js @@ -1,7 +1,7 @@ const mangayomiSources = [{ "name": "Novel Updates", "lang": "en", - "baseUrl": "https://novelupdates.com", + "baseUrl": "https://www.novelupdates.com", "apiUrl": "", "iconUrl": "https://raw.githubusercontent.com/Schnitzel5/mangayomi-extensions/main/javascript/icon/en.novelupdates.png", "typeSource": "single", @@ -14,19 +14,29 @@ const mangayomiSources = [{ }]; class DefaultExtension extends MProvider { + headers = { + "Referer": this.source.baseUrl, + "Origin": this.source.baseUrl, + "Connection": "keep-alive", + "Accept": "*/*", + "Accept-Language": "*", + "Sec-Fetch-Mode": "cors", + "Accept-Encoding": "gzip, deflate", + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.0.0 Safari/537.36", + "Cookie": `` + } + getHeaders(url) { - return { - Referer: this.source.baseUrl - }; + throw new Error("getHeaders not implemented"); } mangaListFromPage(res) { const doc = new Document(res.body); - const mangaElements = doc.select("div.grid > div.search_main_box_nu"); + const mangaElements = doc.select("div.search_main_box_nu"); const list = []; for (const element of mangaElements) { const name = element.selectFirst(".search_title > a").text; const imageUrl = element.selectFirst("img").getSrc; - const link = element.selectFirst(".search_title > a").getHref.replace("https://novelupdates.com/", ""); + const link = element.selectFirst(".search_title > a").getHref; list.push({ name, imageUrl, link }); } const hasNextPage = doc.selectFirst("div.digg_pagination > a.next_page").text == " →"; @@ -61,24 +71,24 @@ class DefaultExtension extends MProvider { async getPopular(page) { const baseUrl = new SharedPreferences().get("overrideBaseUrl1"); - const res = await new Client().get(`${baseUrl}/series-ranking/?rank=popmonth&pg=${page}`); + const res = await new Client().get(`${baseUrl}/series-ranking/?rank=popmonth&pg=${page}`, this.headers); return this.mangaListFromPage(res); } async getLatestUpdates(page) { const baseUrl = new SharedPreferences().get("overrideBaseUrl1"); - const res = await new Client().get(`${baseUrl}/series-finder/?sf=1&sh=&sort=sdate&order=desc&pg=${page}`); + const res = await new Client().get(`${baseUrl}/series-finder/?sf=1&sh=&sort=sdate&order=desc&pg=${page}`, this.headers); return this.mangaListFromPage(res); } async search(query, page, filters) { const baseUrl = new SharedPreferences().get("overrideBaseUrl1"); - const res = await new Client().get(`${baseUrl}/series-finder/?sf=1&sh=${query}&sort=sdate&order=desc&pg=${page}`); + const res = await new Client().get(`${baseUrl}/series-finder/?sf=1&sh=${query}&sort=sdate&order=desc&pg=${page}`, this.headers); return this.mangaListFromPage(res); } async getDetail(url) { const baseUrl = new SharedPreferences().get("overrideBaseUrl1"); - const res = await new Client().get(baseUrl + "/" + url); + const res = await new Client().get(url, this.headers); const doc = new Document(res.body); const imageUrl = doc.selectFirst(".wpb_wrapper img")?.getSrc; const type = doc.selectFirst("#showtype")?.text.trim(); @@ -90,39 +100,47 @@ class DefaultExtension extends MProvider { .map((el) => el.text.trim()); const novelId = doc.selectFirst("input#mypostid")?.attr("value"); - const formData = new FormData(); - formData.append('action', 'nd_getchapters'); - formData.append('mygrr', '0'); - formData.append('mypostid', novelId); const link = `${baseUrl}/wp-admin/admin-ajax.php`; const headers = { "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8", - 'Referer': baseUrl + "/" + url, + ...this.headers }; const chapters = []; - const chapterRes = await client.post(link, headers, formData); + const chapterRes = await new Client().post(link, headers, { + "action": "nd_getchapters", + "mygrr": "0", + "mypostid": novelId + }); const chapterDoc = new Document(chapterRes.body); const nameReplacements = { - 'v': 'volume ', - 'c': ' chapter ', - 'part': 'part ', + 'v': 'Volume ', + 'c': ' Chapter ', + 'part': 'Part ', 'ss': 'SS', - }; + }; - chapterDoc.select("li.sp_li_chp").forEach((el) => { - let chapterName = el.text; + const chapterElements = chapterDoc.select("li.sp_li_chp"); + for (const el of chapterElements) { + let chapterName = el.selectFirst("span").text; for (const name in nameReplacements) { chapterName = chapterName.replace(name, nameReplacements[name]); } chapterName = chapterName.replace(/\b\w/g, l => l.toUpperCase()).trim(); - const chapterUrl = `https:${el.select("a")[1].attr("href")}`; + const chapterUrl = `https:${el.select("a")[1].getHref}`; const dateUpload = String(Date.now()); - chapters.push({ chapterName, chapterUrl, dateUpload }); - }); + chapters.push({ + name: chapterName, + url: chapterUrl, + dateUpload: dateUpload, + scanlator: null + }); + } + + chapters.reverse(); return { imageUrl, @@ -137,7 +155,7 @@ class DefaultExtension extends MProvider { async getPageList(url) { const baseUrl = new SharedPreferences().get("overrideBaseUrl1"); - const res = await new Client().get(baseUrl + "/series/" + url); + const res = await new Client().get(baseUrl + "/series/" + url, this.headers); const scriptData = new Document(res.body).select("script:contains(self.__next_f.push)").map((e) => e.text.substringAfter("\"").substringBeforeLast("\"")).join(""); console.log(scriptData); const match = scriptData.match(/\\"pages\\":(\[.*?])/); @@ -156,8 +174,8 @@ class DefaultExtension extends MProvider { "key": "overrideBaseUrl1", "editTextPreference": { "title": "Override BaseUrl", - "summary": "https://novelupdates.com", - "value": "https://novelupdates.com", + "summary": "https://www.novelupdates.com", + "value": "https://www.novelupdates.com", "dialogTitle": "Override BaseUrl", "dialogMessage": "", } From f69f9a366923cdf18b75b0c8e4c5e895453cdb6d Mon Sep 17 00:00:00 2001 From: Schnitzel5 Date: Mon, 9 Dec 2024 23:39:43 +0100 Subject: [PATCH 12/19] fix NovelUpdates --- javascript/novel/src/en/novelupdates.js | 37 ++++++++----------------- 1 file changed, 12 insertions(+), 25 deletions(-) diff --git a/javascript/novel/src/en/novelupdates.js b/javascript/novel/src/en/novelupdates.js index 5d4ff8fc..05092425 100644 --- a/javascript/novel/src/en/novelupdates.js +++ b/javascript/novel/src/en/novelupdates.js @@ -10,7 +10,9 @@ const mangayomiSources = [{ "dateFormat": "", "dateFormatLocale": "", "pkgPath": "novel/src/en/novelupdates.js", - "appMinVerReq": "0.3.75" + "appMinVerReq": "0.3.75", + "isNsfw": false, + "hasCloudflare": true }]; class DefaultExtension extends MProvider { @@ -23,7 +25,6 @@ class DefaultExtension extends MProvider { "Sec-Fetch-Mode": "cors", "Accept-Encoding": "gzip, deflate", "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.0.0 Safari/537.36", - "Cookie": `` } getHeaders(url) { @@ -70,25 +71,22 @@ class DefaultExtension extends MProvider { } async getPopular(page) { - const baseUrl = new SharedPreferences().get("overrideBaseUrl1"); - const res = await new Client().get(`${baseUrl}/series-ranking/?rank=popmonth&pg=${page}`, this.headers); + const res = await new Client().get(`${this.source.baseUrl}/series-ranking/?rank=popmonth&pg=${page}`, this.headers); return this.mangaListFromPage(res); } async getLatestUpdates(page) { - const baseUrl = new SharedPreferences().get("overrideBaseUrl1"); - const res = await new Client().get(`${baseUrl}/series-finder/?sf=1&sh=&sort=sdate&order=desc&pg=${page}`, this.headers); + const res = await new Client().get(`${this.source.baseUrl}/series-finder/?sf=1&sh=&sort=sdate&order=desc&pg=${page}`, this.headers); return this.mangaListFromPage(res); } async search(query, page, filters) { - const baseUrl = new SharedPreferences().get("overrideBaseUrl1"); - const res = await new Client().get(`${baseUrl}/series-finder/?sf=1&sh=${query}&sort=sdate&order=desc&pg=${page}`, this.headers); + const res = await new Client().get(`${this.source.baseUrl}/series-finder/?sf=1&sh=${query}&sort=sdate&order=desc&pg=${page}`, this.headers); return this.mangaListFromPage(res); } async getDetail(url) { - const baseUrl = new SharedPreferences().get("overrideBaseUrl1"); - const res = await new Client().get(url, this.headers); + const client = new Client(); + const res = await client.get(url, this.headers); const doc = new Document(res.body); const imageUrl = doc.selectFirst(".wpb_wrapper img")?.getSrc; const type = doc.selectFirst("#showtype")?.text.trim(); @@ -101,15 +99,14 @@ class DefaultExtension extends MProvider { const novelId = doc.selectFirst("input#mypostid")?.attr("value"); - const link = `${baseUrl}/wp-admin/admin-ajax.php`; - + const link = `https://www.novelupdates.com/wp-admin/admin-ajax.php`; const headers = { "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8", ...this.headers }; const chapters = []; - const chapterRes = await new Client().post(link, headers, { + const chapterRes = await client.post(link, headers, { "action": "nd_getchapters", "mygrr": "0", "mypostid": novelId @@ -154,8 +151,7 @@ class DefaultExtension extends MProvider { } async getPageList(url) { - const baseUrl = new SharedPreferences().get("overrideBaseUrl1"); - const res = await new Client().get(baseUrl + "/series/" + url, this.headers); + const res = await new Client().get(this.source.baseUrl + "/series/" + url, this.headers); const scriptData = new Document(res.body).select("script:contains(self.__next_f.push)").map((e) => e.text.substringAfter("\"").substringBeforeLast("\"")).join(""); console.log(scriptData); const match = scriptData.match(/\\"pages\\":(\[.*?])/); @@ -170,16 +166,7 @@ class DefaultExtension extends MProvider { } getSourcePreferences() { - return [{ - "key": "overrideBaseUrl1", - "editTextPreference": { - "title": "Override BaseUrl", - "summary": "https://www.novelupdates.com", - "value": "https://www.novelupdates.com", - "dialogTitle": "Override BaseUrl", - "dialogMessage": "", - } - }]; + throw new Error("getSourcePreferences not implemented"); } } \ No newline at end of file From bf628beca8c2ba48635f65d7c2aa396df0f69bd8 Mon Sep 17 00:00:00 2001 From: Schnitzel5 Date: Fri, 20 Dec 2024 00:23:42 +0100 Subject: [PATCH 13/19] added extension function --- javascript/novel/src/en/novelupdates.js | 365 +++++++++++++----------- 1 file changed, 199 insertions(+), 166 deletions(-) diff --git a/javascript/novel/src/en/novelupdates.js b/javascript/novel/src/en/novelupdates.js index 05092425..417a7f57 100644 --- a/javascript/novel/src/en/novelupdates.js +++ b/javascript/novel/src/en/novelupdates.js @@ -1,172 +1,205 @@ -const mangayomiSources = [{ - "name": "Novel Updates", - "lang": "en", - "baseUrl": "https://www.novelupdates.com", - "apiUrl": "", - "iconUrl": "https://raw.githubusercontent.com/Schnitzel5/mangayomi-extensions/main/javascript/icon/en.novelupdates.png", - "typeSource": "single", - "itemType": 2, - "version": "0.0.1", - "dateFormat": "", - "dateFormatLocale": "", - "pkgPath": "novel/src/en/novelupdates.js", - "appMinVerReq": "0.3.75", - "isNsfw": false, - "hasCloudflare": true -}]; +const mangayomiSources = [ + { + name: "Novel Updates", + lang: "en", + baseUrl: "https://www.novelupdates.com", + apiUrl: "", + iconUrl: + "https://raw.githubusercontent.com/Schnitzel5/mangayomi-extensions/main/javascript/icon/en.novelupdates.png", + typeSource: "single", + itemType: 2, + version: "0.0.1", + dateFormat: "", + dateFormatLocale: "", + pkgPath: "novel/src/en/novelupdates.js", + appMinVerReq: "0.3.75", + isNsfw: false, + hasCloudflare: true, + }, +]; class DefaultExtension extends MProvider { - headers = { - "Referer": this.source.baseUrl, - "Origin": this.source.baseUrl, - "Connection": "keep-alive", - "Accept": "*/*", - "Accept-Language": "*", - "Sec-Fetch-Mode": "cors", - "Accept-Encoding": "gzip, deflate", - "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.0.0 Safari/537.36", + headers = { + Referer: this.source.baseUrl, + Origin: this.source.baseUrl, + Connection: "keep-alive", + Accept: "*/*", + "Accept-Language": "*", + "Sec-Fetch-Mode": "cors", + "Accept-Encoding": "gzip, deflate", + "User-Agent": + "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.0.0 Safari/537.36", + }; + + getHeaders(url) { + throw new Error("getHeaders not implemented"); + } + mangaListFromPage(res) { + const doc = new Document(res.body); + const mangaElements = doc.select("div.search_main_box_nu"); + const list = []; + for (const element of mangaElements) { + const name = element.selectFirst(".search_title > a").text; + const imageUrl = element.selectFirst("img").getSrc; + const link = element.selectFirst(".search_title > a").getHref; + list.push({ name, imageUrl, link }); + } + const hasNextPage = + doc.selectFirst("div.digg_pagination > a.next_page").text == " →"; + return { list: list, hasNextPage }; + } + toStatus(status) { + if (status.includes("Ongoing")) return 0; + else if (status.includes("Completed")) return 1; + else if (status.includes("Hiatus")) return 2; + else if (status.includes("Dropped")) return 3; + else return 5; + } + parseDate(date) { + const months = { + january: "01", + february: "02", + march: "03", + april: "04", + may: "05", + june: "06", + july: "07", + august: "08", + september: "09", + october: "10", + november: "11", + december: "12", + }; + date = date + .toLowerCase() + .replace(/(st|nd|rd|th)/g, "") + .split(" "); + if (!(date[0] in months)) { + return String(new Date().valueOf()); + } + date[0] = months[date[0]]; + const formattedDate = `${date[2]}-${date[0]}-${date[1].padStart(2, "0")}`; // Format YYYY-MM-DD + return String(new Date(formattedDate).valueOf()); + } + + async getPopular(page) { + const res = await new Client().get( + `${this.source.baseUrl}/series-ranking/?rank=popmonth&pg=${page}`, + this.headers + ); + return this.mangaListFromPage(res); + } + + async getLatestUpdates(page) { + const res = await new Client().get( + `${this.source.baseUrl}/series-finder/?sf=1&sh=&sort=sdate&order=desc&pg=${page}`, + this.headers + ); + return this.mangaListFromPage(res); + } + async search(query, page, filters) { + const res = await new Client().get( + `${this.source.baseUrl}/series-finder/?sf=1&sh=${query}&sort=sdate&order=desc&pg=${page}`, + this.headers + ); + return this.mangaListFromPage(res); + } + + async getDetail(url) { + const client = new Client(); + const res = await client.get(url, this.headers); + const doc = new Document(res.body); + const imageUrl = doc.selectFirst(".wpb_wrapper img")?.getSrc; + const type = doc.selectFirst("#showtype")?.text.trim(); + const description = + doc.selectFirst("#editdescription")?.text.trim() + `\n\nType: ${type}`; + const author = doc + .select("#authtag") + .map((el) => el.text.trim()) + .join(", "); + const artist = doc + .select("#artiststag") + .map((el) => el.text.trim()) + .join(", "); + const status = this.toStatus(doc.selectFirst("#editstatus").text.trim()); + const genre = doc.select("#seriesgenre > a").map((el) => el.text.trim()); + + const novelId = doc.selectFirst("input#mypostid")?.attr("value"); + + const link = `https://www.novelupdates.com/wp-admin/admin-ajax.php`; + const headers = { + "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8", + ...this.headers, + }; + + const chapters = []; + const chapterRes = await client.post(link, headers, { + action: "nd_getchapters", + mygrr: "0", + mypostid: novelId, + }); + const chapterDoc = new Document(chapterRes.body); + + const nameReplacements = { + v: "Volume ", + c: " Chapter ", + part: "Part ", + ss: "SS", + }; + + const chapterElements = chapterDoc.select("li.sp_li_chp"); + for (const el of chapterElements) { + let chapterName = el.selectFirst("span").text; + for (const name in nameReplacements) { + chapterName = chapterName.replace(name, nameReplacements[name]); + } + chapterName = chapterName.replace(/\b\w/g, (l) => l.toUpperCase()).trim(); + const chapterUrl = `https:${el.select("a")[1].getHref}`; + const dateUpload = String(Date.now()); + chapters.push({ + name: chapterName, + url: chapterUrl, + dateUpload: dateUpload, + scanlator: null, + }); } - getHeaders(url) { - throw new Error("getHeaders not implemented"); - } - mangaListFromPage(res) { - const doc = new Document(res.body); - const mangaElements = doc.select("div.search_main_box_nu"); - const list = []; - for (const element of mangaElements) { - const name = element.selectFirst(".search_title > a").text; - const imageUrl = element.selectFirst("img").getSrc; - const link = element.selectFirst(".search_title > a").getHref; - list.push({ name, imageUrl, link }); - } - const hasNextPage = doc.selectFirst("div.digg_pagination > a.next_page").text == " →"; - return { "list": list, hasNextPage }; - } - toStatus(status) { - if (status.includes("Ongoing")) - return 0; - else if (status.includes("Completed")) - return 1; - else if (status.includes("Hiatus")) - return 2; - else if (status.includes("Dropped")) - return 3; - else - return 5; - } - parseDate(date) { - const months = { - "january": "01", "february": "02", "march": "03", "april": "04", - "may": "05", "june": "06", "july": "07", "august": "08", - "september": "09", "october": "10", "november": "11", "december": "12" - }; - date = date.toLowerCase().replace(/(st|nd|rd|th)/g, "").split(" "); - if (!(date[0] in months)) { - return String(new Date().valueOf()); - } - date[0] = months[date[0]]; - const formattedDate = `${date[2]}-${date[0]}-${date[1].padStart(2, "0")}`; // Format YYYY-MM-DD - return String(new Date(formattedDate).valueOf()); + chapters.reverse(); + + return { + imageUrl, + description, + genre, + author, + artist, + status, + chapters, + }; + } + + async getHtmlContent(url) { + const client = await new Client(); + const res = await client.get(url, { + Priority: "u=0, i", + "User-Agent": + "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.0.0 Safari/537.36", + }); + const doc = new Document(res.body); + if (res.body.includes("blogspot")) { + const title = + doc.selectFirst("h3.post-title")?.text.trim() || + doc.selectFirst("h3.entry-title")?.text.trim() || + ""; + const content = + doc.selectFirst("div.post-body")?.innerHtml || + doc.selectFirst("div.entry-content")?.innerHtml || + doc.selectFirst("div.content-post")?.innerHtml; + return `

    ${title}



    ${content}`; } + return "

    Domain not supported yet

    "; + } - async getPopular(page) { - const res = await new Client().get(`${this.source.baseUrl}/series-ranking/?rank=popmonth&pg=${page}`, this.headers); - return this.mangaListFromPage(res); - } - - async getLatestUpdates(page) { - const res = await new Client().get(`${this.source.baseUrl}/series-finder/?sf=1&sh=&sort=sdate&order=desc&pg=${page}`, this.headers); - return this.mangaListFromPage(res); - } - async search(query, page, filters) { - const res = await new Client().get(`${this.source.baseUrl}/series-finder/?sf=1&sh=${query}&sort=sdate&order=desc&pg=${page}`, this.headers); - return this.mangaListFromPage(res); - } - - async getDetail(url) { - const client = new Client(); - const res = await client.get(url, this.headers); - const doc = new Document(res.body); - const imageUrl = doc.selectFirst(".wpb_wrapper img")?.getSrc; - const type = doc.selectFirst("#showtype")?.text.trim(); - const description = doc.selectFirst("#editdescription")?.text.trim() + `\n\nType: ${type}`; - const author = doc.select("#authtag").map((el) => el.text.trim()).join(", "); - const artist = doc.select("#artiststag").map((el) => el.text.trim()).join(", "); - const status = this.toStatus(doc.selectFirst("#editstatus").text.trim()); - const genre = doc.select("#seriesgenre > a") - .map((el) => el.text.trim()); - - const novelId = doc.selectFirst("input#mypostid")?.attr("value"); - - const link = `https://www.novelupdates.com/wp-admin/admin-ajax.php`; - const headers = { - "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8", - ...this.headers - }; - - const chapters = []; - const chapterRes = await client.post(link, headers, { - "action": "nd_getchapters", - "mygrr": "0", - "mypostid": novelId - }); - const chapterDoc = new Document(chapterRes.body); - - const nameReplacements = { - 'v': 'Volume ', - 'c': ' Chapter ', - 'part': 'Part ', - 'ss': 'SS', - }; - - const chapterElements = chapterDoc.select("li.sp_li_chp"); - for (const el of chapterElements) { - let chapterName = el.selectFirst("span").text; - for (const name in nameReplacements) { - chapterName = chapterName.replace(name, nameReplacements[name]); - } - chapterName = chapterName.replace(/\b\w/g, l => l.toUpperCase()).trim(); - const chapterUrl = `https:${el.select("a")[1].getHref}`; - const dateUpload = String(Date.now()); - chapters.push({ - name: chapterName, - url: chapterUrl, - dateUpload: dateUpload, - scanlator: null - }); - } - - chapters.reverse(); - - return { - imageUrl, - description, - genre, - author, - artist, - status, - chapters - }; - } - - async getPageList(url) { - const res = await new Client().get(this.source.baseUrl + "/series/" + url, this.headers); - const scriptData = new Document(res.body).select("script:contains(self.__next_f.push)").map((e) => e.text.substringAfter("\"").substringBeforeLast("\"")).join(""); - console.log(scriptData); - const match = scriptData.match(/\\"pages\\":(\[.*?])/); - if (!match) { - throw new Error("Failed to find chapter pages"); - } - const pagesData = match[1]; - - const pageList = JSON.parse(pagesData.replace(/\\(.)/g, "$1")) - .sort((a, b) => a.order - b.order); - return pageList; - } - - getSourcePreferences() { - throw new Error("getSourcePreferences not implemented"); - } - -} \ No newline at end of file + getSourcePreferences() { + throw new Error("getSourcePreferences not implemented"); + } +} From 734a922c4e153bce786999a7b03a84b2d8852da3 Mon Sep 17 00:00:00 2001 From: Schnitzel5 Date: Sat, 21 Dec 2024 20:11:21 +0100 Subject: [PATCH 14/19] added filters --- javascript/novel/src/en/novelupdates.js | 657 ++++++++++++++++++++++-- 1 file changed, 626 insertions(+), 31 deletions(-) diff --git a/javascript/novel/src/en/novelupdates.js b/javascript/novel/src/en/novelupdates.js index 417a7f57..4ffa5999 100644 --- a/javascript/novel/src/en/novelupdates.js +++ b/javascript/novel/src/en/novelupdates.js @@ -34,6 +34,7 @@ class DefaultExtension extends MProvider { getHeaders(url) { throw new Error("getHeaders not implemented"); } + mangaListFromPage(res) { const doc = new Document(res.body); const mangaElements = doc.select("div.search_main_box_nu"); @@ -48,6 +49,7 @@ class DefaultExtension extends MProvider { doc.selectFirst("div.digg_pagination > a.next_page").text == " →"; return { list: list, hasNextPage }; } + toStatus(status) { if (status.includes("Ongoing")) return 0; else if (status.includes("Completed")) return 1; @@ -55,32 +57,6 @@ class DefaultExtension extends MProvider { else if (status.includes("Dropped")) return 3; else return 5; } - parseDate(date) { - const months = { - january: "01", - february: "02", - march: "03", - april: "04", - may: "05", - june: "06", - july: "07", - august: "08", - september: "09", - october: "10", - november: "11", - december: "12", - }; - date = date - .toLowerCase() - .replace(/(st|nd|rd|th)/g, "") - .split(" "); - if (!(date[0] in months)) { - return String(new Date().valueOf()); - } - date[0] = months[date[0]]; - const formattedDate = `${date[2]}-${date[0]}-${date[1].padStart(2, "0")}`; // Format YYYY-MM-DD - return String(new Date(formattedDate).valueOf()); - } async getPopular(page) { const res = await new Client().get( @@ -97,11 +73,41 @@ class DefaultExtension extends MProvider { ); return this.mangaListFromPage(res); } + async search(query, page, filters) { - const res = await new Client().get( - `${this.source.baseUrl}/series-finder/?sf=1&sh=${query}&sort=sdate&order=desc&pg=${page}`, - this.headers - ); + let url = `${this.source.baseUrl}/series-finder/?sf=1&sh=${query}&pg=${page}`; + + if (!filters || filters.length == 0) { + const res = await new Client().get(url, this.headers); + return this.mangaListFromPage(res); + } + + if (filters[0].state.filter(f => f.state == true).length > 0) { + const values = filters[0].state.filter(f => f.state == true).map(f => f.value).join(","); + url += `&nt=${values}`; + } + + if (filters[1].state.filter(f => f.state == true).length > 0) { + const values = filters[1].state.filter(f => f.state == true).map(f => f.value).join(","); + url += `&org=${values}`; + } + + if (filters[2].state.filter(f => f.state == 1 || f.state == 2).length > 0) { + const including = filters[2].state.filter(f => f.state == 1).map(f => f.value).join(","); + const excluding = filters[2].state.filter(f => f.state == 2).map(f => f.value).join(","); + if (including.length > 0) url += `&gi=${including}`; + if (excluding.length > 0) url += `&ge=${excluding}`; + } + + if (filters[3].state.filter(f => f.state == true).length > 0) { + const values = filters[3].state.filter(f => f.state == true).map(f => f.value).join(","); + url += `&ss=${values}`; + } + + url += `&sort=${filters[4].values[filters[4].state].value}`; + url += `&order=${filters[5].values[filters[5].state].value}`; + + const res = await new Client().get(url, this.headers); return this.mangaListFromPage(res); } @@ -185,7 +191,205 @@ class DefaultExtension extends MProvider { "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.0.0 Safari/537.36", }); const doc = new Document(res.body); - if (res.body.includes("blogspot")) { + const domain = res.body; + + if (domain.includes("anotivereads")) { + const title = + doc.selectFirst("#comic-nav-name")?.text.trim() || + ""; + const content = doc.selectFirst("#spliced-comic")?.innerHtml; + return `

    ${title}



    ${content}`; + } + + if (domain.includes("asuratls")) { + const title = + doc.selectFirst(".post-body > div > b")?.text.trim() || + ""; + const content = doc.selectFirst(".post-body")?.innerHtml?.replace(title, ""); + return `

    ${title}



    ${content}`; + } + + if (domain.includes("daoist")) { + const title = + doc.selectFirst(".chapter__title")?.text.trim() || + ""; + const content = doc.selectFirst(".chapter__content")?.innerHtml; + return `

    ${title}



    ${content}`; + } + + if (domain.includes("darkstartranslations")) { + const title = + doc.selectFirst("ol.breadcrumb > li")?.text.trim() || + ""; + const content = doc.selectFirst(".text-left")?.innerHtml?.replace("
    ", "

    "); + return `

    ${title}



    ${content}`; + } + + if (domain.includes("fictionread")) { + const title = + doc.selectFirst(".title-image > span")?.text.trim() || + ""; + const content = doc.selectFirst(".content")?.innerHtml; + return `

    ${title}



    ${content}`; + } + + if (domain.includes("helscans")) { + const title = + doc.selectFirst(".entry-title-main")?.text.trim() || + ""; + const content = doc.selectFirst("#readerarea.rdminimal")?.innerHtml; + return `

    ${title}



    ${content}`; + } + + if (domain.includes("hiraethtranslation")) { + const title = + doc.selectFirst("li.active")?.text.trim() || + ""; + const content = doc.selectFirst(".text-left")?.innerHtml; + return `

    ${title}



    ${content}`; + } + + if (domain.includes("hostednovel")) { + const title = + doc.selectFirst("#chapter-title")?.text.trim() || + ""; + const content = doc.selectFirst("#chapter-content")?.innerHtml; + return `

    ${title}



    ${content}`; + } + + if (domain.includes("inoveltranslation")) { + const content = doc.selectFirst(".styles_content__JHK8G")?.innerHtml; + return `${content}`; + } + + if (domain.includes("isotls")) { + const title = + doc.selectFirst("head > title")?.text.trim() || + ""; + const content = doc.selectFirst("main > article")?.innerHtml; + return `

    ${title}



    ${content}`; + } + + if (domain.includes("mirilu")) { + const title = + doc.selectFirst(".entry-content > p > strong")?.text.trim() || + ""; + const content = doc.selectFirst(".entry-content")?.innerHtml; + return `

    ${title}



    ${content}`; + } + + if (domain.includes("novelplex")) { + const title = + doc.selectFirst(".halChap--jud")?.text.trim() || + ""; + const content = doc.selectFirst(".halChap--kontenInner")?.innerHtml; + return `

    ${title}



    ${content}`; + } + + if (domain.includes("novelworldtranslations")) { + const title = + doc.selectFirst(".entry-title")?.text.trim() || + ""; + const content = doc.selectFirst(".entry-content")?.innerHtml?.replace(/ /g, '')?.replace(/\n/g, '
    '); + return `

    ${title}



    ${content}`; + } + + if (domain.includes("readingpia")) { + const content = doc.selectFirst(".chapter-body")?.innerHtml; + return `${content}`; + } + + if (domain.includes("sacredtexttranslations")) { + const title = + doc.selectFirst(".entry-title")?.text.trim() || + ""; + const content = doc.selectFirst(".entry-content")?.innerHtml; + return `

    ${title}



    ${content}`; + } + + if (domain.includes("scribblehub")) { + const title = + doc.selectFirst(".chapter-title")?.text.trim() || + ""; + const content = doc.selectFirst(".chp_raw")?.innerHtml; + return `

    ${title}



    ${content}`; + } + + if (domain.includes("tinytranslation")) { + const title = + doc.selectFirst(".title-content")?.text.trim() || + ""; + const content = doc.selectFirst(".content")?.innerHtml; + return `

    ${title}



    ${content}`; + } + + if (domain.includes("tumblr")) { + const content = doc.selectFirst(".post")?.innerHtml; + return `${content}`; + } + + if (domain.includes("wattpad")) { + const title = + doc.selectFirst(".h2")?.text.trim() || + ""; + const content = doc.selectFirst(".part-content > pre")?.innerHtml; + return `

    ${title}



    ${content}`; + } + + if (domain.includes("webnovel")) { + const title = + doc.selectFirst(".cha-tit > .pr > .dib")?.text.trim() || + ""; + const content = doc.selectFirst(".cha-words")?.innerHtml || doc.selectFirst("._content")?.innerHtml; + return `

    ${title}



    ${content}`; + } + + if (domain.includes("wetriedtls")) { + const content = doc.selectFirst("script:contains(\"p dir=\")")?.innerHtml || doc.selectFirst("script:contains(\"u003c\")")?.innerHtml; + if (content) { + const jsonString_wetried = content.slice( + content.indexOf('.push(') + '.push('.length, + content.lastIndexOf(')'), + ); + return `${JSON.parse(jsonString_wetried)[1]}`; + } + return "

    Failed to parse JSON content!

    "; + } + + if (domain.includes("wuxiaworld")) { + const title = + doc.selectFirst("h4 > span")?.text.trim() || + ""; + const content = doc.selectFirst(".chapter-content")?.innerHtml; + return `

    ${title}



    ${content}`; + } + + if (domain.includes("zetrotranslation")) { + const title = + doc.selectFirst(".text-left h2")?.text.trim() || + doc.selectFirst(".active")?.text.trim() || + ""; + const content = doc.selectFirst(".text-left")?.innerHtml; + return `

    ${title}



    ${content}`; + } + + if (domain.includes("webnovel")) { + const title = + doc.selectFirst("#page > .chapter_content > .cha-tit > div > div")?.text.trim() || + ""; + const content = doc.selectFirst("#page > .chapter_content > .cha-content > .cha-words")?.innerHtml.replaceAll(/.*?<\/i>/gm, ""); + return `

    ${title}



    ${content}`; + } + + const blogspotElements = [ + doc.selectFirst("meta[name=\"google-adsense-platform-domain\"]").attr("content"), + doc.selectFirst("meta[name=\"generator\"]").attr("content"), + ]; + const isBlogspot = blogspotElements.some(e => { + return e?.toLowerCase().includes("blogspot") || e?.toLowerCase().includes("blogger") + }); + + if (isBlogspot) { const title = doc.selectFirst("h3.post-title")?.text.trim() || doc.selectFirst("h3.entry-title")?.text.trim() || @@ -196,9 +400,400 @@ class DefaultExtension extends MProvider { doc.selectFirst("div.content-post")?.innerHtml; return `

    ${title}



    ${content}`; } + + const wordpressElements = [ + doc.selectFirst("#dcl_comments-js-extra")?.innerHtml, + doc.selectFirst("meta[name=\"generator\"]")?.attr("content"), + doc.selectFirst(".powered-by")?.text, + doc.selectFirst("footer")?.text, + ]; + let isWordpress = wordpressElements.some(e => { + return e?.toLowerCase().includes("wordpress") || e?.toLowerCase().includes("site kit by google") + }); + + if (isWordpress || domain.includes("etherreads") || domain.includes("soafp")) { + let title = + doc.selectFirst(".entry-title")?.text.trim() || + doc.selectFirst(".entry-title-main")?.text.trim() || + doc.selectFirst(".chapter__title")?.text.trim() || + doc.selectFirst(".sp-title")?.text.trim() || + doc.selectFirst(".title-content")?.text.trim() || + doc.selectFirst(".wp-block-post-title")?.text.trim() || + doc.selectFirst(".title_story")?.text.trim() || + doc.selectFirst(".active")?.text.trim() || + doc.selectFirst("head title")?.text.trim() || + doc.selectFirst("h1.leading-none ~ h2")?.text.trim() || + ""; + const subtitle = + doc.selectFirst(".cat-series")?.text.trim() || + doc.selectFirst("h1.leading-none ~ span")?.text.trim() || + ""; + if (subtitle && subtitle != "") { + title = subtitle; + } + const content = + doc.selectFirst(".rdminimal")?.innerHtml || + doc.selectFirst(".entry-content")?.innerHtml || + doc.selectFirst(".chapter__content")?.innerHtml || + doc.selectFirst(".prevent-select")?.innerHtml || + doc.selectFirst(".text_story")?.innerHtml || + doc.selectFirst(".contenta")?.innerHtml || + doc.selectFirst(".single_post")?.innerHtml || + doc.selectFirst(".post-entry")?.innerHtml || + doc.selectFirst(".main-content")?.innerHtml || + doc.selectFirst(".post-content")?.innerHtml || + doc.selectFirst(".content")?.innerHtml || + doc.selectFirst(".page-body")?.innerHtml || + doc.selectFirst(".td-page-content")?.innerHtml || + doc.selectFirst(".reader-content")?.innerHtml || + doc.selectFirst("#content")?.innerHtml || + doc.selectFirst("#the-content")?.innerHtml || + doc.selectFirst("article.post")?.innerHtml; + return `

    ${title}



    ${content}`; + } + return "

    Domain not supported yet

    "; } + getFilterList() { + return [ + { + type_name: "GroupFilter", + name: "Novel Type", + state: [ + { + type_name: "CheckBox", + name: "Web Novel", + value: "2444", + }, + { + type_name: "CheckBox", + name: "Light Novel", + value: "2443", + }, + { + type_name: "CheckBox", + name: "Published Novel", + value: "26874", + }, + ], + }, + { + type_name: "GroupFilter", + name: "Original Language", + state: [ + { + type_name: "CheckBox", + name: "Chinese", + value: "495", + }, + { + type_name: "CheckBox", + name: "Filipino", + value: "9181", + }, + { + type_name: "CheckBox", + name: "Indonesian", + value: "9179", + }, + { + type_name: "CheckBox", + name: "Japanese", + value: "496", + }, + { + type_name: "CheckBox", + name: "Khmer", + value: "18657", + }, + { + type_name: "CheckBox", + name: "Korean", + value: "497", + }, + { + type_name: "CheckBox", + name: "Malaysian", + value: "9183", + }, + { + type_name: "CheckBox", + name: "Thai", + value: "9954", + }, + { + type_name: "CheckBox", + name: "Vietnamese", + value: "9177", + }, + ], + }, + { + type_name: "GroupFilter", + name: "Genre", + state: [ + { + type_name: "TriState", + name: "Action", + value: "8", + }, + { + type_name: "TriState", + name: "Adventure", + value: "13", + }, + { + type_name: "TriState", + name: "Comedy", + value: "17", + }, + { + type_name: "TriState", + name: "Drama", + value: "9", + }, + { + type_name: "TriState", + name: "Ecchi", + value: "292", + }, + { + type_name: "TriState", + name: "Fantasy", + value: "5", + }, + { + type_name: "TriState", + name: "Gender Bender", + value: "168", + }, + { + type_name: "TriState", + name: "Harem", + value: "3", + }, + { + type_name: "TriState", + name: "Horror", + value: "343", + }, + { + type_name: "TriState", + name: "Josei", + value: "324", + }, + { + type_name: "TriState", + name: "Martial Arts", + value: "14", + }, + { + type_name: "TriState", + name: "Mature", + value: "4", + }, + { + type_name: "TriState", + name: "Mecha", + value: "10", + }, + { + type_name: "TriState", + name: "Mystery", + value: "245", + }, + { + type_name: "TriState", + name: "Psychological", + value: "486", + }, + { + type_name: "TriState", + name: "Romance", + value: "15", + }, + { + type_name: "TriState", + name: "School", + value: "6", + }, + { + type_name: "TriState", + name: "Sci-Fi", + value: "11", + }, + { + type_name: "TriState", + name: "Seinen", + value: "18", + }, + { + type_name: "TriState", + name: "Shoujo", + value: "157", + }, + { + type_name: "TriState", + name: "Shoujo Ai", + value: "851", + }, + { + type_name: "TriState", + name: "Shounen", + value: "12", + }, + { + type_name: "TriState", + name: "Shounen Ai", + value: "1692", + }, + { + type_name: "TriState", + name: "Slice of Life", + value: "7", + }, + { + type_name: "TriState", + name: "Smut", + value: "281", + }, + { + type_name: "TriState", + name: "Sports", + value: "1357", + }, + { + type_name: "TriState", + name: "Supernatural", + value: "16", + }, + { + type_name: "TriState", + name: "Tragedy", + value: "132", + }, + { + type_name: "TriState", + name: "Wuxia", + value: "479", + }, + { + type_name: "TriState", + name: "Xianxia", + value: "480", + }, + { + type_name: "TriState", + name: "Xuanhuan", + value: "3954", + }, + { + type_name: "TriState", + name: "Yaoi", + value: "560", + }, + { + type_name: "TriState", + name: "Yuri", + value: "922", + }, + ], + }, + { + type_name: "GroupFilter", + name: "Status", + state: [ + { + type_name: "CheckBox", + name: "All", + value: "", + }, + { + type_name: "CheckBox", + name: "Completed", + value: "2", + }, + { + type_name: "CheckBox", + name: "Ongoing", + value: "3", + }, + { + type_name: "CheckBox", + name: "Hiatus", + value: "4", + }, + ], + }, + { + type_name: "SelectFilter", + type: "sort", + name: "Sort", + state: 0, + values: [ + { + type_name: "SelectOption", + name: "Last Updated", + value: "sdate", + }, + { + type_name: "SelectOption", + name: "Rating", + value: "srate", + }, + { + type_name: "SelectOption", + name: "Rank", + value: "srank", + }, + { + type_name: "SelectOption", + name: "Reviews", + value: "sreview", + }, + { + type_name: "SelectOption", + name: "Chapters", + value: "srel", + }, + { + type_name: "SelectOption", + name: "Title", + value: "abc", + }, + { + type_name: "SelectOption", + name: "Readers", + value: "sread", + }, + { + type_name: "SelectOption", + name: "Frequency", + value: "sfrel", + }, + ], + }, + { + type_name: "SelectFilter", + name: "Order", + state: 0, + values: [ + { + type_name: "SelectOption", + name: "Descending", + value: "desc", + }, + { + type_name: "SelectOption", + name: "Ascending", + value: "asc", + }, + ], + } + ]; + } + getSourcePreferences() { throw new Error("getSourcePreferences not implemented"); } From d67dc1f6af496fbdcf72e591fe5105e2cd41fc4a Mon Sep 17 00:00:00 2001 From: Schnitzel5 Date: Sat, 21 Dec 2024 20:19:08 +0100 Subject: [PATCH 15/19] removed temp redirect --- dart/novel/src/en/source.dart | 4 ++-- javascript/novel/src/en/novelupdates.js | 2 +- source_generator.dart | 3 --- 3 files changed, 3 insertions(+), 6 deletions(-) diff --git a/dart/novel/src/en/source.dart b/dart/novel/src/en/source.dart index 475354c3..f00a9e03 100644 --- a/dart/novel/src/en/source.dart +++ b/dart/novel/src/en/source.dart @@ -3,14 +3,14 @@ import '../../../../model/source.dart'; Source get novelUpdatesSource => _novelUpdatesSource; const _novelUpdatesVersion = "0.0.1"; const _novelUpdatesSourceCodeUrl = - "https://raw.githubusercontent.com/Schnitzel5/mangayomi-extensions/$branchName/dart/novel/src/en/novelupdates.dart"; + "https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/$branchName/dart/novel/src/en/novelupdates.dart"; Source _novelUpdatesSource = Source( name: "NovelUpdates", baseUrl: "https://www.novelupdates.com", lang: "en", typeSource: "single", iconUrl: - "https://raw.githubusercontent.com/Schnitzel5/mangayomi-extensions/$branchName/dart/manga/src/en/icon.png", + "https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/$branchName/dart/manga/src/en/icon.png", sourceCodeUrl: _novelUpdatesSourceCodeUrl, itemType: ItemType.novel, version: _novelUpdatesVersion, diff --git a/javascript/novel/src/en/novelupdates.js b/javascript/novel/src/en/novelupdates.js index 4ffa5999..b187bca9 100644 --- a/javascript/novel/src/en/novelupdates.js +++ b/javascript/novel/src/en/novelupdates.js @@ -5,7 +5,7 @@ const mangayomiSources = [ baseUrl: "https://www.novelupdates.com", apiUrl: "", iconUrl: - "https://raw.githubusercontent.com/Schnitzel5/mangayomi-extensions/main/javascript/icon/en.novelupdates.png", + "https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/javascript/icon/en.novelupdates.png", typeSource: "single", itemType: 2, version: "0.0.1", diff --git a/source_generator.dart b/source_generator.dart index 22648a03..354e8056 100644 --- a/source_generator.dart +++ b/source_generator.dart @@ -78,9 +78,6 @@ List _searchJsSources(Directory dir) { sourceJson["appMinVerReq"] ?? defaultSource.appMinVerReq ..sourceCodeUrl = "https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/$branchName/javascript/${sourceJson["pkgPath"] ?? sourceJson["pkgName"]}"; - if (source.itemType == ItemType.novel) { - source.sourceCodeUrl = source.sourceCodeUrl?.replaceAll("kodjodevf", "Schnitzel5"); - } if (sourceJson["id"] != null) { source = source..id = int.tryParse("${sourceJson["id"]}"); } From a447c6eeadf2afe3ad5b15bfde8a4e0700b94b9c Mon Sep 17 00:00:00 2001 From: Schnitzel5 Date: Sat, 21 Dec 2024 21:16:05 +0100 Subject: [PATCH 16/19] fix --- dart/novel/src/en/icon.png | Bin 17418 -> 0 bytes dart/novel/src/en/novelupdates.dart | 0 dart/novel/src/en/source.dart | 19 ------------- javascript/novel/src/en/novelupdates.js | 36 +++++++++++------------- 4 files changed, 17 insertions(+), 38 deletions(-) delete mode 100644 dart/novel/src/en/icon.png delete mode 100644 dart/novel/src/en/novelupdates.dart delete mode 100644 dart/novel/src/en/source.dart diff --git a/dart/novel/src/en/icon.png b/dart/novel/src/en/icon.png deleted file mode 100644 index 544fef066fef894fe949acc8d5f38290d0daa6fd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17418 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
  • K)OIbRYVRio!^Gb14NZ2j1VWTxu6$pd}mXvj0H6Kdgvu)u!m*8BSvtdi?H&4{Wq?8Scc_xbV7n z>G?xGa=Gota1%BF5NjO2s{z1wh9NagU7nD8g@dPSi;lMfPjUF2W-b?-!w};x=_iMt zpd_pJ02kYtD3r+LzD$kTn7S8%q5N@+I^Q10#B%}C5wwW}wk+T*YXsenn3#O7RB@jY zrY+mae@(C8WKpEqA77l!F~gt!TLptb$gjzfg`)>ih|Li!9y$VE%CExatxT%82ZCld zvKc?fIE_oYd|@iYYB8T7N=VhR&7h*)Z{|lch2qtT)2i1%iadN>l%K|In~kK0kaZ^* zF9jd{lQERo#*DfkG%GCqMu^+_V#`aYBZZJI;*&Gs=+lMFjL+o&kdU(i`0TGcwE=KX zVJ->^Dc~f20bqszH8G2D9G8T#p=|{GVF`GXU(_wZHidRfEsR~Fr)a@G7FNKBj1X?Y zvA(k$-R}2Dd$R6X98N^bvRm1^r_Ko#WLyo-QX=23P0e!|$Q2JT$U5~x=A%h!xd0=) zpv7WHYR@XD4v3r5K;1L8^7*xx847q~De8qW_Fl6nF-l7_-7!Ub-?Iy&2Ft=;VL(^c zh*3l$2t!IX2ghtfI)I>Oe!)%5+VJQkWYVu2G%wU-qbHKO)hrDt;ARTM!NGIvg@1aX z1t3EGR(@uX+o&zke0|X~h?%sCgI8-otl~-$tP?>KZ!hq8kGq#@m{mf)bwby$8hA7^ zot#JeS!L1E5i@9i&A2#Zz-=@043+Z{RUbxp0&ZC1{S1Evk?D*Thr|SgPkuwBVDRGi z0a~nAZ_Js@+NQeeE!S93Q^TgiW(dB=xD)7*_x*%#;@1|vZC)TwhjBc9KCtrCrQ)s# zQ^`BTsYBX;-{`>TXMGsab2V!!7&eGIkV?sSo`(ka<;eb*r(DO`)F;l3mR*ZY-9a6b+fSUTWQc0I=A^x;i~Fmy{pNL1baMq2XN z`K#Od(Yb?#g$-ePMupOYf%|=JV4DF)%CF4~$^*31GQW9jUKVtqY|uIuun4_6nLom* z+K+5{gqQ3kJyUh`6f{1fG}KOkbYfm4R2TN*0?TcU%>r~;5{`%_^>rNzZ+hZ{DKqa~D@Q_tjr@YrRP0x`F(wao-6_4o z>TcJLX#9iGPS>h5^KOZt+7IccSefXJlsDRGgIFWq2axAtw7OJA!}QqByXG+8*=J*O zEV)Eh?d2k>eX(r(v*av#3orcdlG9#T&LMk;+x5XO!#Z+i^i$3#h3}o|BjgHC2XvsX_?JEVrM8a`$UP3dwM0t`k! z$@QYIScW4cty>?Ms_IGK>X=c7NC&jYZz=s?oiMGcCLcZI|9Y_(5 z+ing#9d(cTn}D|z<(_^ULG~lmeN`F8TqhxY@yFK48$e8sIQDo5zKFn!HTl%=EU>Igp171r6DP(S4m2oL<^Qy|p0v24Yb*U?lU8dJ?eC!K}W zGdkQ~ZLJ{LGjmEIj;Zdtx=9p8AE$9XV4n%e4&Ui;4nmJ%t1kqMMj@S%;0 zbA;uFJGt`e>fcW!IQK7(yYwwlfJsEt;egX1Vep!v9)AN_i76-PmOoY1v@a8VM|nK4 zSNFl`GCu$?$os>ADg{c@I>9`gg3Q6qU4DWxJ1*0}K@Tl|qZ#*v$!q-V*~G)bcCMuL zHp1xD@T3o(HhBaWakVf$Z=r6*mnRQDPnEQFHCcyx(YVb-7m;UU zcR%JsU}$8%2GZAX8NwO17=#pF@mG=uegv0FV)^bAXQbKjr&^bP4L5G+yK!b}=Td3e zok8RoM|J?Z+>i0Rcr6;T+`sMzC1^huT@YZKW$dNl z`$(7F5KtJ-K|cwz^z|IQr$zI~)Bon^D2Tbi`Fr3f1(+y^F^d4{{gOH8qFOH>@j zyaiKUiSHvI+lBx=6#I(uidwq5!4(F4luiWmmPd}LyvelPUjS#4yYTf9S}=_&geiNV z7Ws41o%^2uPJZn2czdw&?Av&xov@<` zmA4(>D)xNh=Bx|YtAMEnYd#>q_YpSF>5$)j_C0p0oV65&)Q6LM2}XH0NOlw7o|)WN zOgEh_mJelRpSR|ESj3WkGK(X-yZ&9G&$!CXHiw*4swu>E+}!Y*;?5t zN9756-gCp-#Wv~69S5>GehPhDQjkmBRwxK$K)WV#bg;EdHfRFjbYU|<31}FAd%E(d zeuw2Ts#tujS>tGN57E8ycbS00p=sMQN_0@RyIE}(#$?w;7!Ca!F3jcfygE|p`U*ZK= z!}0bDNVSlxl!cPl-2Ot06T$67<}N7X%%_Ap@*Rw$)%04z#{pJpKRx07GmXoB75ysG zTtknZFgI-G$Z!Sn3ixi+^Bxa$=IOOlm}gJZ6TPpZ2~)lH9f<}=Cu7728n;oOfd3a+ z8Y7{uNoa0O0V++zT>^gKBl${h9eb6rOr8HT&@!x{H=UUgY6i77bxS_`oo&qOIJMHd zB7Oo1TG3J$zD+JU|AU|-C$leVE$2BivbPTRv+ik#PKptb-%e`#P-H6%vG$>F*esAD z*`a(4G`yZ`SpH|-X#Vf|rC}n6>8q1MjNrl6u3m!g&%%Dxgf*2q4|w7)*W&hf<_KW; z+SRO@RpjS=ep;XtJ**yO@-N6u3bMXvlTGl73U=a4E>H)O@YyvmwdMjF?*lL1J+io! z=i|BQsV-O23M}9u#=&zs&2iHywQK8b^v@x8o#Xu~y8JdLSwsEQxN6{*BE75?+Gwu} zfu$r7kgs0hQA*^W*_j|xL4OvY4stIww`EJ0Z?N54O0C)Mug)v0GT5d_t9#y=_Ebl^ z3$oi>Ng=XCpL()3{fjjOn%<`^GXXbTu^hBCtOeZEK=5crg6imRT?dz8w84do=z$Hg z@43D&_ zt2-A_p}kiwUh&g1>9#fX`Csm!AIAbS@7UO!#~YBR%4JLX*mch9|>i)en~Mg>Iv zULuYKH%;DF5BhBuVUE&C62b!i`{}s0FBU?o#w21^^OJjcQ0KlYtlwYIfyvo?X~3-e ziZijW8X6f$?QC?&iO-%vA>d#8?CP|k?=q-!fKl?orjV~NX8N3&{@*5jmLc}TOHU5q-+DH zm4G!XKKarZ#yHs%O@^0m9{Oj&Z?Zqd=T1nhJu-V42;dek<1-v-cGGFy{mwTsI$n;+ z_c?QY@#sLHT?K}Q5vdYP9vo=^$%L6l>Dpy)rJMZ$H*5FLyV?)L8j^*DG{Wc^A;hBHWIa>LaN>uv*?!wgU zkEBW3*5_~8QHeW`YSLyOzPPfU>r9=n<>V>BK_02aNK3Ufry@a|bMHQ&(I}wiyn787 zaWFDh=V+)$g)fbyr=`CioIG2ti^pMP?4ZSuiS8%W^3$gG%9#oORX1|`L4Q4hWSH;X z5Fa{L?C_z$5DKU_K_6zidyp-;BLEN)4s`Y_oG)G0s3oM3Wbj05!jxb<{xzhYw6?oe zufP>fw2j}yVxR$^C46egvWY)DGv^5SrY7iR5Y8&mNJ@-Z+)+(1^B&O!XBt7^?x&-9 z_N_;tlQSHKNQNjzG7&7x>jP1s1WcFXR1D3i{b5&9{wgy9vD<0qn*5nNs9qo9`zYht z4P-`Z;Si!%9=TOX0vxWG359;#I&;pzab)wj&r>4TM&OwI=yxIr{@HGH-8K#hb3kc9 zj-CR6k&j=|r+qn2E2Zn7Qjn`0vywsc^KaMNyw=^Z)>9S>{(*qu=24B=+ zo}vT$tHKIR+kqXed!th8N{U{Bv-Zk_im@L*prMu~eM$6LNlLs^ zbEVaQuHG9BUd@Pr#&H}OqHE^k@8`~n9hwy~$fNj1K7WTgwlMPa@Zwl@9y{tlHAJ$- znb{2s$V3-K=B3CmK7!B`4F3RHt^a;!E5eQ<77)9H|NYelOdR_?#B+GNXfksOl~%QC)HJ9FVciTS1>qHcam*S)_$c3 z-Yf_+T6B@6t`pz2DhNGJs#~y79y1hNDz3}dl~bJkQS01$0Arclvx;H9&=&YxZqjG| zkBv8{Fo19wGF-UzT8@!dYITcVG9R zj>Aa^mgK;@4tQ4Mp9^<9x?WyG>UjAzp`Ku6AUNe$Y@eoMEyGw^`nQ<|nV(?yI*<5_ zgkxDd=+#DDBc{WU&4cu;4fI@ncQY8|8h=Fw?(-m=Hb2`+EsG3pdG&{Cm_F6X)`*yi z=*q47&w$a#J8oekvZ+=)kE^{n?yzfj_X zKJ(4-587ga8OBeYB&7}}lp*JUaIVn~|MVg4soz_G^M=WVw3P-F=!l4{Y*o$}&R?!f z%&uctE^&df6Ul}Bo*+vXWD;+I+rp@c^*WQT$n7WQM>G+TGI6&I(2=Ue=-_Go)XzK$ zGRj`xQ^Y(PI+$c_kcNq<;~One1}$0fxA9rqT02yJHA$-h|4=5jqghCA2hnML@^8jytbqiBrJofU2xx79X`Z$y)TJ3C@-~XA z)I?jE~#k0eQe)dt?P|t@6F0r)HO)6)2i=`o@|x9v?YYrt*t$Wbddh zh0P{BwZUCsn1`(9B5?YQyrqwylyQ}1%M*0ogE0kc=b|@jgK52-T|sB%oNcSkuOLHY zV#Jx6t#Akk^!C1<&{eNVpui?0P8TB2z1X=-fFA8dJaTH{BbiPjGzdR8-&YPMae(u} zWsx2O$*7Dl9(uF%4=s0UFn6G*DhN}{WGzMXMuJ+b90wy4#ZCcZc0wO<-PFT38Mi%< zeikE*3{jugX`wMriB$!q0FYt>ERdpRRcC#u0nF-{DJzhB*+ux>IQO3N3-TsL}lSD29`z*F1WwfdIL66d{%w%$|hQK&@ z4u0t_Y=OB=RuVgRjuT!rmS4kDXy$hO-byzI0g>9|O3hPgkI_ma0;l9}e2exVJYkhl zyqpMN!&brhy!*>YNYQJA%Y+&OWF7!7Sb{Cf?83%WM>vxP`nI-?qT*c0Aa7p&vUSpG zx~_l1P>0!yIO}%yMK5G2sQi`GDF=3^D6k;20u;la zobr>WO95E!9Jkj7EL#(CGSGmrWw&4?Noseh61T9mNWcIC7~(ve*PiP{lV>LLX#71?4CLO+ zlXs;p*2U-3DyIgeOZ;~)%PdXim59?rE%C9#%l0;xwny3)l8FpQBm<8wY8D`yhH2Vf zRF%_3YFc|~lAUS+Iv@#!$0l}A?_MikJj~V~bw$-~_w86HRYmF@<8L>Jt9ZyJ3guT! zLYR=%#J4(Sj-T7(c&HF^=deZG(1WxnhGK8%(YnkXJomi*vd11MH&+PC7gi?F*}ayf zw1~==ND?{em$qDQ3%+rSWtct-y1^doq#+iN z2`O%#qzFGgpmn0TgRHOSL?W<0k+U63kd45gGp|UXR~joV$os%6{RT!7mB7CPUp454 z7)r!dI4G0wMS7;k{JfiWjW}+e>N>T-rXdPHR(JhKoi9YQcAUV^~mQ!oN za^oLrwJZ_-?TpVL_145M}=q#)cq>W{P$1+ZuiCesicR?PP}Iq+b>>n*_>S#TNywpfzldK5F{X zK&S|F3xs2i^wXwzcL!hDvhP_#;;i2bx92Lgk|)zH2bebSwF0P$Xm!&|M&N>j(H1!Y zQpZBKA0jdU!HUv>1zr==AgO4~wfzraU>u3l)P>m2HX;SWf-OqQn&peX?fEKwX+&h% zp*2k$l#B#5z#oFS*Y=9p1O+)r4iC9tyuT1x08-1gH~W*0yu;wP1=6$zXIR=E)Fa`h zDv~&Ga&_<4q$cifmHQ*h2(zqYxUKX7pr9(wO)XZ+{&GoaR^taD*x1E*X)$zB%HN~U zbKGdN*C+M9NMML^I^U+S&Zi$xK2S*GU#E zoE?Kt48Kf)@gw500}R3^NH0TaZmjvisOe#sZpG4>+H|o`P5;!4#Pi8K{$!!La1^6L zNj5_52H9_pCy@fP5=FIAudl2coYC8R-ptcIhJldW#2cLf3Bn!JR>x=!R%^HTPAi48 z)MF2|_!i411!1Ky55)cU5hZYO7>OgZVszpJ`9o-MA5G4E+$Y%1KOm(y=yvDTT-c>= zzb_f@+pj0A;$NcUlZ4+}_4(_fN}){J-jiYfY`XB8a=!6SYe>_5>_pLKhyCC-T!~|X zPZE-JlMyk_25VYs7&D*jq3vqZ8_b|4(#LGr_PPjjh8#;=wQgvhgue1Fpf&S=o$B4l zKMPu5=VSz3II_Y_&a>^avV?gV=S2kT7}lP+M?jGGLtZ#$20GpJN>}mYKLKO{^Kc) zOgl``^YOQ2Fnb_z@{SZq?b-+EY%@{&u*%kVXmdP%qjI8e9lIc;tH@|H8eOJOitI6f zYs6AA)gBENJgGkri5#tTd?A-&_2=fIQzv{JSOiidqV@@Ooz_gdzt=}P4!H}hdc$Eh zSLMJ+e6NFK<_P5+hXp~Y@0AHL#b@$)PqVqH{F8sB&JOu(Z`~5B@XuEfU@BkHCwA^) zVc)0EOGn(y-ncX)APoHpzrSJsWi|CuFO+`HpO;X)jS^V+b@3%2=bPlRRwImY(@U4> zok~y&NrQU4hLx#?ypK81u?riAqk#^`H>=^ZTQTO--S`{;W52Uexr>4bwA4+T$4FH+ zsuNeE4rQEP1&5H`);b8z3vG?^Cj;s0A%=6KA9#cT>t!>5ygJjahDCT8yFy;3N6oh> z_QLA7IqsWKq+2)eEzIic&&ZWI>ZOQxQ%+UAOvR-=Lij9C*k+tt+%VCwZ#%PAA)}zi z8MQHX9d0XNIJ!kzygp%(lVXolES2BS?}f`f46V`Fe~^Y3dku*u<8l#ny}8CP29T|~ zGuJjs3Q}q=<<{vgn^b(e`Ekyq4YRQ#k&ik6#+(DA`bX|N)*?}s_)Z$ zzzGQOM9Q<^YlCVq-7c`!5PHwot3Vo^C(&d(e!r8o*)o8$?DIz>ys`7<=9^uO~(Zt!KH$LE2Y{e zBSa8%XcC_jCAW@4Wpd<|=;4<>eWmeHHfRKDan&igT#a6=*tJ(LzDs(B31o)wX^P`i z_3rG=BPNVTXagGJAO~T-pe7Lu#N671gd#_eP&By`9NW&{GamV<_MKAl6pCyS`-PgA9q`%M>Xc77X>!rOEWLeBhXZ zkU({zDjopsoTG~nbtb{k?^=4^ZgE@5@&|b9rPbD1733bW?CbRvSrzu5yn^37U0U^F zLO)rtY&Y8~pCUbsv^4uSs;(<}0%O~7#iVLBBA7)H7(By_7Yfr6bo#Ctx`T|Q_3p(E zZpI!-m|%haIP&7IQuhFeMfj!$cF_}5sF3m)JqVW^z~9RX%L^qvLr}c^VkFk~;L!I= zjOm0SsJ95)Hi|gpkzQkxnWqFiDraPbJ(J^x7`+qE_rG=BA>OU#;pSdSCUE50x1kUT zyQ-eQ2S+zrR65H5#43~Dq||`G!=}k|_PC_+koa7fUK+xNilUokwUs|FZUNVnD5C;F zUIE{Uhg$nqHi>}FQ15H3%4#|q0F~!jRj0$ICDi)H7A>Sce0CrmV4w{SK}mZ^Gn>ox z0^{Gfiw7(!s=3|a@tYuMY>1nb;M$X>ISbqNdOl&i*+I46De$XP9`#!?!C2m0ZMiO! z4|RO*{JafjiIAa(W79%uxxC{MG9hyom`@(&b6o;~c->zeH1{kYP1S^jG)yEcb}!%w z_Q>*_B>t!t{Vw;2xKGNd<|4p|y!ZalBXgrhh!hQ!WE{tuE>58{z^Yug2yOD5A>!{+hp$=!-NmHM+nGBPZ`S2a}?R@ln zc5$s+54vJ`UrwOcBtY=J&vfsb%TiJThBE~x_j|qfR)0$LN92!ak*{fqbn8zAqQyQ=%< zomw$=pVC^_Ty~k6U`~xVD%p4?Ej3)0AD6Ss%_pAnD^HC%F-rsd#}pw05__m91?6AQ zHL!_~1e4}X?e+M6xPpXY9Wb?1@@oTt%rKP1kLiC7AR*KpxA-B0tC4S(F)BT}<+^4} zcVY(isve2@hL&~-BaD;1~6_dY6?=W}NSR@45fWb_Gcd%>13*AZ+!pq?+D_amPpXa)B;26c(R ztZHZ$H!f^r0$4ZcoiVmJru}}ZbP)thP95#cp3Iua90Q>$i4Qvz2;0Hm@{`Ud>*lv# z6im+OJ`bhh2g?miG55v6z%IhCOO59TtX(E8A@KM|37()?UW$Pkd8Wp1E2C^-TVIc; z0sw?${&l>OT=O{cbI#qvMo(&0Q3x@E?)%VmFalOaQ4lQ723WsoUsL%29V6Ui36<2Y z0B9ZBV+GeOBpRybGLkc@RSAX%0Sk>YX*s9gUOC9=8{=Jw&_#~IyYMW;%mAoAWc!J& zA=|F~mhh*`h-(AO7FfTSH@Yc3NNPfeMjP5=l&6BTAt*gXgBz}v6?)9!cei;+ft|Bv zkluhP@!6%NCE(;mQ!=z-J9esiLZ0AF^=vU;G2(-QE8O0O?bqRYUgxVAVcLUPA~~@t-scaiJpwV5+g4%&v$L9l-I<4=u&?S!_&r-J#@n{WT>q0GvPj)<}Naa>m#}En%Uh zgvR9<+a||*sU-~4)ITVECf9Do97U_E98`r7rtcY_L4b`#ELy>3edo%zw8qi*D;5Ui z*i@h3iyBlIAIon*Sg}Ao1nR0=pulGupu?}^+w+7ZsRPRYjQtl z_Q95kEHBi;W7%B*NFh^OS-u~ZI{R}bNd4k;t7W}W<-qu6d6s-oXe01af`pe@N&eTI zURVZsCl={34nvm_rcUW#*!X>ZdGCK>{ikShsg$OBU~kU3ecEyWz(9nRg_Ip_6Av&80`-5?Pe_x;EwTXN*mf}Y`(=W7yx8SiGb2a`9+E_> z^Fj+f^y9Dd0El$lOB`>hrZj9aWQ4QvS|{8_8KVJ!L|z+y4!c9@ooA~PZ229s5FaFF zy#f$$1u0j?^J_@4U&Ng`opD?>dWyIu?;};ETw4sL_#<56#mg=y>j#AOyKjk=C7tft z@(?iqVjPju!wU;VH(MG`2+s(T@F{;ZKJTC~lqPbq?J>QR4XZW_wG_TK>NG7ZGiVuZ143^kca1y$^3^;oc zR#wa!V!L@J?%7=mf}P)4L2ifr27^a9UHU#>gtG6J9ckovJ{k>ETk#>9KS~w!$!$>Z z!X~gvka&Y3)DKYV`J=T9r2qg*zhr^wT$ zgKK1unL8MuY0JxXmV$iX_;DqtDdy{j9BxcvQ{= z^8+P6bW5akIQEVgcZ4nf$&J`zlyY2^J&Zp1ap@_Gf69SM^7}k2D&=lF|J6|A;BVV) zje4S?KQ1;z#))fL6Sqnr4)jZA(b12^a4r%KtM!~gxhOi9i94jwi+kX!hTR4L0O|pV z&Io=jNfv5fTf6xmp=>O(!nqOSubU1qm$#70nQ`c?ab^* zlK`?GgqYPC>bH%cdR(Hb-dd(XT3Kb&&KVdCr}nR93_|ctk6&!+9r<;>Di*hE-ii#*FIMJ=VhH~=bCycL^ zVGT-C$nlO;$_m^*m@E2HJ#U*T&{qI)&<@_e=9EKedj+(4K@S6jfvQZb{)EDoha?M~ z&?2hQ3pi$x=b zgY=JHCn>wTdPdeyTSEM!SoB|y%iv7VdQEy486<87j4_+|IsU}hb}U3@qpJbHG+N5m zYV*<9cAcr#0rUsjTClg3u|S-R-$bH*7zx;k*nd*?MGr5kL6@!PqKcvWPbUhrQ$QQB z^&q)#FtXGZ7vHm=&YXclQoV`p?!>J z1swt6{+RxI34KCD=z3IFDcTmp)dFPFg8zU_pl#MbC(z*XT&72ueYm^2vn^kz7{jz* z%3f|ZxOjncYH9ivm12$tx%`S>Q*Fh89;u1eV0000FM)vE4z1!3IAOj-n@vt-aPQW%+0y(z>vQq39Q000000056Fm2Ln4 diff --git a/dart/novel/src/en/novelupdates.dart b/dart/novel/src/en/novelupdates.dart deleted file mode 100644 index e69de29b..00000000 diff --git a/dart/novel/src/en/source.dart b/dart/novel/src/en/source.dart deleted file mode 100644 index f00a9e03..00000000 --- a/dart/novel/src/en/source.dart +++ /dev/null @@ -1,19 +0,0 @@ -import '../../../../model/source.dart'; - -Source get novelUpdatesSource => _novelUpdatesSource; -const _novelUpdatesVersion = "0.0.1"; -const _novelUpdatesSourceCodeUrl = - "https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/$branchName/dart/novel/src/en/novelupdates.dart"; -Source _novelUpdatesSource = Source( - name: "NovelUpdates", - baseUrl: "https://www.novelupdates.com", - lang: "en", - typeSource: "single", - iconUrl: - "https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/$branchName/dart/manga/src/en/icon.png", - sourceCodeUrl: _novelUpdatesSourceCodeUrl, - itemType: ItemType.novel, - version: _novelUpdatesVersion, - dateFormat: "MMM dd,yyyy", - dateFormatLocale: "en", -); diff --git a/javascript/novel/src/en/novelupdates.js b/javascript/novel/src/en/novelupdates.js index b187bca9..380f7e0f 100644 --- a/javascript/novel/src/en/novelupdates.js +++ b/javascript/novel/src/en/novelupdates.js @@ -1,22 +1,20 @@ -const mangayomiSources = [ - { - name: "Novel Updates", - lang: "en", - baseUrl: "https://www.novelupdates.com", - apiUrl: "", - iconUrl: - "https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/javascript/icon/en.novelupdates.png", - typeSource: "single", - itemType: 2, - version: "0.0.1", - dateFormat: "", - dateFormatLocale: "", - pkgPath: "novel/src/en/novelupdates.js", - appMinVerReq: "0.3.75", - isNsfw: false, - hasCloudflare: true, - }, -]; +const mangayomiSources = [{ + "name": "Novel Updates", + "lang": "en", + "baseUrl": "https://www.novelupdates.com", + "apiUrl": "", + "iconUrl": + "https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/javascript/icon/en.novelupdates.png", + "typeSource": "single", + "itemType": 2, + "version": "0.0.1", + "dateFormat": "", + "dateFormatLocale": "", + "pkgPath": "novel/src/en/novelupdates.js", + "appMinVerReq": "0.4.0", + "isNsfw": false, + "hasCloudflare": true +}]; class DefaultExtension extends MProvider { headers = { From ee6fb38efc53f6d1bd0841e017aa9f9b814e3ead Mon Sep 17 00:00:00 2001 From: Schnitzel5 Date: Sat, 21 Dec 2024 21:20:10 +0100 Subject: [PATCH 17/19] updated workflow --- .github/workflows/gen_index.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/gen_index.yml b/.github/workflows/gen_index.yml index b1a0709c..01c92b8b 100644 --- a/.github/workflows/gen_index.yml +++ b/.github/workflows/gen_index.yml @@ -27,5 +27,6 @@ jobs: git checkout main git add index.json git add anime_index.json + git add novel_index.json git commit -m "Update extensions" git push origin main --force \ No newline at end of file From 90c572fdae8e24a573342d6e32338cba9440b53e Mon Sep 17 00:00:00 2001 From: Schnitzel5 Date: Thu, 2 Jan 2025 22:13:40 +0100 Subject: [PATCH 18/19] added another domain --- javascript/novel/src/en/novelupdates.js | 96 +++++++++++++++---------- 1 file changed, 57 insertions(+), 39 deletions(-) diff --git a/javascript/novel/src/en/novelupdates.js b/javascript/novel/src/en/novelupdates.js index 380f7e0f..fb555f9a 100644 --- a/javascript/novel/src/en/novelupdates.js +++ b/javascript/novel/src/en/novelupdates.js @@ -7,7 +7,7 @@ const mangayomiSources = [{ "https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/javascript/icon/en.novelupdates.png", "typeSource": "single", "itemType": 2, - "version": "0.0.1", + "version": "0.0.2", "dateFormat": "", "dateFormatLocale": "", "pkgPath": "novel/src/en/novelupdates.js", @@ -378,6 +378,21 @@ class DefaultExtension extends MProvider { const content = doc.selectFirst("#page > .chapter_content > .cha-content > .cha-words")?.innerHtml.replaceAll(/.*?<\/i>/gm, ""); return `

    ${title}



    ${content}`; } + + if (domain.includes("re-library")) { + const redirectUrl = doc.selectFirst(".entry-content > div > div > p > a").getHref; + const redirectRes = await client.get(redirectUrl, { + Priority: "u=0, i", + "User-Agent": + "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.0.0 Safari/537.36", + }); + const redirectDoc = new Document(redirectRes.body); + const title = + redirectDoc.selectFirst(".entry-header > .entry-title")?.text.trim() || + ""; + const content = redirectDoc.selectFirst(".entry-content")?.innerHtml.replaceAll(/.*?<\/i>/gm, ""); + return `

    ${title}



    ${content}`; + } const blogspotElements = [ doc.selectFirst("meta[name=\"google-adsense-platform-domain\"]").attr("content"), @@ -408,49 +423,52 @@ class DefaultExtension extends MProvider { let isWordpress = wordpressElements.some(e => { return e?.toLowerCase().includes("wordpress") || e?.toLowerCase().includes("site kit by google") }); + + + let title = + doc.selectFirst(".entry-title")?.text.trim() || + doc.selectFirst(".entry-title-main")?.text.trim() || + doc.selectFirst(".chapter__title")?.text.trim() || + doc.selectFirst(".sp-title")?.text.trim() || + doc.selectFirst(".title-content")?.text.trim() || + doc.selectFirst(".wp-block-post-title")?.text.trim() || + doc.selectFirst(".title_story")?.text.trim() || + doc.selectFirst(".active")?.text.trim() || + doc.selectFirst("head title")?.text.trim() || + doc.selectFirst("h1.leading-none ~ h2")?.text.trim() || + ""; + const subtitle = + doc.selectFirst(".cat-series")?.text.trim() || + doc.selectFirst("h1.leading-none ~ span")?.text.trim() || + ""; + if (subtitle && subtitle != "") { + title = subtitle; + } + const content = + doc.selectFirst(".rdminimal")?.innerHtml || + doc.selectFirst(".entry-content")?.innerHtml || + doc.selectFirst(".chapter__content")?.innerHtml || + doc.selectFirst(".prevent-select")?.innerHtml || + doc.selectFirst(".text_story")?.innerHtml || + doc.selectFirst(".contenta")?.innerHtml || + doc.selectFirst(".single_post")?.innerHtml || + doc.selectFirst(".post-entry")?.innerHtml || + doc.selectFirst(".main-content")?.innerHtml || + doc.selectFirst(".post-content")?.innerHtml || + doc.selectFirst(".content")?.innerHtml || + doc.selectFirst(".page-body")?.innerHtml || + doc.selectFirst(".td-page-content")?.innerHtml || + doc.selectFirst(".reader-content")?.innerHtml || + doc.selectFirst("#content")?.innerHtml || + doc.selectFirst("#the-content")?.innerHtml || + doc.selectFirst("article.post")?.innerHtml; if (isWordpress || domain.includes("etherreads") || domain.includes("soafp")) { - let title = - doc.selectFirst(".entry-title")?.text.trim() || - doc.selectFirst(".entry-title-main")?.text.trim() || - doc.selectFirst(".chapter__title")?.text.trim() || - doc.selectFirst(".sp-title")?.text.trim() || - doc.selectFirst(".title-content")?.text.trim() || - doc.selectFirst(".wp-block-post-title")?.text.trim() || - doc.selectFirst(".title_story")?.text.trim() || - doc.selectFirst(".active")?.text.trim() || - doc.selectFirst("head title")?.text.trim() || - doc.selectFirst("h1.leading-none ~ h2")?.text.trim() || - ""; - const subtitle = - doc.selectFirst(".cat-series")?.text.trim() || - doc.selectFirst("h1.leading-none ~ span")?.text.trim() || - ""; - if (subtitle && subtitle != "") { - title = subtitle; - } - const content = - doc.selectFirst(".rdminimal")?.innerHtml || - doc.selectFirst(".entry-content")?.innerHtml || - doc.selectFirst(".chapter__content")?.innerHtml || - doc.selectFirst(".prevent-select")?.innerHtml || - doc.selectFirst(".text_story")?.innerHtml || - doc.selectFirst(".contenta")?.innerHtml || - doc.selectFirst(".single_post")?.innerHtml || - doc.selectFirst(".post-entry")?.innerHtml || - doc.selectFirst(".main-content")?.innerHtml || - doc.selectFirst(".post-content")?.innerHtml || - doc.selectFirst(".content")?.innerHtml || - doc.selectFirst(".page-body")?.innerHtml || - doc.selectFirst(".td-page-content")?.innerHtml || - doc.selectFirst(".reader-content")?.innerHtml || - doc.selectFirst("#content")?.innerHtml || - doc.selectFirst("#the-content")?.innerHtml || - doc.selectFirst("article.post")?.innerHtml; return `

    ${title}



    ${content}`; } - return "

    Domain not supported yet

    "; + return `

    Domain not supported yet. Content might not load properly!

    +

    ${title}



    ${content}`; } getFilterList() { From 451ec6a0400c0b56c8666d5ceb0594765aa6491d Mon Sep 17 00:00:00 2001 From: kodjomoustapha <107993382+kodjodevf@users.noreply.github.com> Date: Mon, 6 Jan 2025 15:36:05 +0100 Subject: [PATCH 19/19] + --- model/source.dart | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/model/source.dart b/model/source.dart index 94b2b4c6..f9bc6993 100644 --- a/model/source.dart +++ b/model/source.dart @@ -25,6 +25,8 @@ class Source { String? version; + bool? isManga; + ItemType? itemType; bool? isFullData; @@ -49,6 +51,7 @@ class Source { this.sourceCodeUrl = "", this.apiUrl = "", this.version = "", + this.isManga, this.itemType = ItemType.manga, this.isFullData = false, this.appMinVerReq = "0.2.0", @@ -73,6 +76,7 @@ class Source { isNsfw = json['isNsfw'] ?? false; lang = json['lang'] ?? ""; name = json['name'] ?? ""; + isManga = json['isManga'] ?? ((json['itemType'] as int?) ?? 0) == 0; sourceCodeUrl = json['sourceCodeUrl'] ?? ""; typeSource = json['typeSource'] ?? ""; version = json['version'] ?? ""; @@ -95,6 +99,7 @@ class Source { "sourceCodeUrl": sourceCodeUrl, "apiUrl": apiUrl, "version": version, + "isManga": isManga ?? (itemType?.index ?? 0) == 0, "itemType": itemType?.index ?? 0, "isFullData": isFullData, "appMinVerReq": appMinVerReq, @@ -106,8 +111,4 @@ class Source { const branchName = "main"; -enum ItemType { - manga, - anime, - novel -} \ No newline at end of file +enum ItemType { manga, anime, novel }