From fb8801b329842d3b259f624c0d9961aca4940d10 Mon Sep 17 00:00:00 2001 From: kodjomoustapha <107993382+kodjodevf@users.noreply.github.com> Date: Thu, 23 Nov 2023 19:44:34 +0100 Subject: [PATCH 1/7] add filter method --- manga/src/all/batoto/batoto-v0.0.35.dart | 226 --- manga/src/all/batoto/batoto-v0.0.4.dart | 1699 ++++++++++++++++++++++ manga/src/all/batoto/sources.dart | 2 +- 3 files changed, 1700 insertions(+), 227 deletions(-) delete mode 100644 manga/src/all/batoto/batoto-v0.0.35.dart create mode 100644 manga/src/all/batoto/batoto-v0.0.4.dart diff --git a/manga/src/all/batoto/batoto-v0.0.35.dart b/manga/src/all/batoto/batoto-v0.0.35.dart deleted file mode 100644 index 9f192913..00000000 --- a/manga/src/all/batoto/batoto-v0.0.35.dart +++ /dev/null @@ -1,226 +0,0 @@ -import 'package:mangayomi/bridge_lib.dart'; -import 'dart:convert'; - -class Batoto extends MProvider { - Batoto(); - - @override - Future getPopular(MSource source, int page) async { - final url = - "${source.baseUrl}/browse?${lang(source.lang)}&sort=views_a&page=$page"; - final data = {"url": url}; - final res = await http('GET', json.encode(data)); - return mangaElementM(res, source); - } - - @override - Future getLatestUpdates(MSource source, int page) async { - final url = - "${source.baseUrl}/browse?${lang(source.lang)}&sort=update&page=$page"; - final data = {"url": url}; - final res = await http('GET', json.encode(data)); - return mangaElementM(res, source); - } - - @override - Future search(MSource source, String query, int page) async { - final url = "${source.baseUrl}/search?word=$query&page=$page"; - final data = {"url": url}; - final res = await http('GET', json.encode(data)); - return mangaElementM(res, source); - } - - @override - Future getDetail(MSource source, String url) async { - final statusList = [ - {"Ongoing": 0, "Completed": 1, "Cancelled": 3, "Hiatus": 2} - ]; - - final data = {"url": "${source.baseUrl}$url"}; - final res = await http('GET', json.encode(data)); - MManga manga = MManga(); - final workStatus = xpath(res, - '//*[@class="attr-item"]/b[contains(text(),"Original work")]/following-sibling::span[1]/text()') - .first; - manga.status = parseStatus(workStatus, statusList); - - manga.author = xpath(res, - '//*[@class="attr-item"]/b[contains(text(),"Authors")]/following-sibling::span[1]/text()') - .first; - manga.genre = xpath(res, - '//*[@class="attr-item"]/b[contains(text(),"Genres")]/following-sibling::span[1]/text()') - .first - .split(","); - manga.description = xpath(res, '//*[@class="limit-html"]/text()').first; - - List chapsElement = querySelectorAll(res, - selector: "div.main div.p-2", - typeElement: 2, - attributes: "", - typeRegExp: 0); - List times = []; - List chapsUrls = []; - List chapsNames = []; - List scanlators = []; - for (var element in chapsElement) { - final urlElement = querySelectorAll(element, - selector: "a.chapt", - typeElement: 2, - attributes: "", - typeRegExp: 0) - .first; - final group = xpath(element, '//*[@class="extra"]/a/text()').first; - final name = xpath(urlElement, '//a/text()').first; - final url = xpath(urlElement, '//a/@href').first; - final time = - xpath(element, '//*[@class="extra"]/i[@class="ps-3"]/text()').first; - times.add(time); - chapsUrls.add(url); - scanlators.add(group); - chapsNames.add(name.replaceAll("\n ", "").replaceAll(" ", "")); - } - var dateUploads = - parseDates(times, source.dateFormat, source.dateFormatLocale); - List? chaptersList = []; - for (var i = 0; i < chapsNames.length; i++) { - MChapter chapter = MChapter(); - chapter.name = chapsNames[i]; - chapter.url = chapsUrls[i]; - chapter.scanlator = scanlators[i]; - chapter.dateUpload = dateUploads[i]; - chaptersList.add(chapter); - } - manga.chapters = chaptersList; - return manga; - } - - @override - Future> getPageList(MSource source, String url) async { - final datas = {"url": "${source.baseUrl}$url"}; - final res = await http('GET', json.encode(datas)); - - final script = xpath(res, - '//script[contains(text(), "imgHttpLis") and contains(text(), "batoWord") and contains(text(), "batoPass")]/text()') - .first; - final imgHttpLisString = - substringBefore(substringAfterLast(script, 'const imgHttpLis ='), ';'); - var imgHttpLis = json.decode(imgHttpLisString); - final batoWord = - substringBefore(substringAfterLast(script, 'const batoWord ='), ';'); - final batoPass = - substringBefore(substringAfterLast(script, 'const batoPass ='), ';'); - final evaluatedPass = deobfuscateJsPassword(batoPass); - final imgAccListString = - decryptAESCryptoJS(batoWord.replaceAll('"', ""), evaluatedPass); - var imgAccList = json.decode(imgAccListString); - List pagesUrl = []; - for (int i = 0; i < imgHttpLis.length; i++) { - String imgUrl = imgHttpLis[i]; - String imgAcc = imgAccList[i]; - pagesUrl.add("$imgUrl?$imgAcc"); - } - - return pagesUrl; - } - - MPages mangaElementM(String res, MSource source) async { - final lang = source.lang.replaceAll("-", "_"); - - var resB = querySelectorAll(res, - selector: "div#series-list div.col", - typeElement: 2, - attributes: "", - typeRegExp: 0); - - List images = []; - List urls = []; - List names = []; - - for (var element in resB) { - if (source.lang == "all" || - source.lang == "en" && element.contains('no-flag') || - element.contains('data-lang="$lang"')) { - final item = querySelectorAll(element, - selector: "a.item-cover", - typeElement: 2, - attributes: "", - typeRegExp: 0) - .first; - final img = querySelectorAll(item, - selector: "img", - typeElement: 3, - attributes: "src", - typeRegExp: 0) - .first; - final url = querySelectorAll(item, - selector: "a", - typeElement: 3, - attributes: "href", - typeRegExp: 0) - .first; - images.add(img); - urls.add(url); - final title = querySelectorAll(element, - selector: "a.item-title", - typeElement: 0, - attributes: "", - typeRegExp: 0) - .first; - names.add(title); - } - } - List mangaList = []; - - for (var i = 0; i < urls.length; i++) { - MManga manga = MManga(); - manga.name = names[i]; - manga.imageUrl = images[i]; - manga.link = urls[i]; - mangaList.add(manga); - } - - return MPages(mangaList, true); - } - - String lang(String lang) { - lang = lang.replaceAll("-", "_"); - if (lang == "all") { - return ""; - } - return "langs=$lang"; - } -} - -Map getMirrorPref() { - return { - "bato.to": "https://bato.to", - "batocomic.com": "https://batocomic.com", - "batocomic.net": "https://batocomic.net", - "batocomic.org": "https://batocomic.org", - "batotoo.com": "https://batotoo.com", - "batotwo.com": "https://batotwo.com", - "battwo.com": "https://battwo.com", - "comiko.net": "https://comiko.net", - "comiko.org": "https://comiko.org", - "mangatoto.com": "https://mangatoto.com", - "mangatoto.net": "https://mangatoto.net", - "mangatoto.org": "https://mangatoto.org", - "readtoto.com": "https://readtoto.com", - "readtoto.net": "https://readtoto.net", - "readtoto.org": "https://readtoto.org", - "dto.to": "https://dto.to", - "hto.to": "https://hto.to", - "mto.to": "https://mto.to", - "wto.to": "https://wto.to", - "xbato.com": "https://xbato.com", - "xbato.net": "https://xbato.net", - "xbato.org": "https://xbato.org", - "zbato.com": "https://zbato.com", - "zbato.net": "https://zbato.net", - "zbato.org": "https://zbato.org", - }; -} - -Batoto main() { - return Batoto(); -} diff --git a/manga/src/all/batoto/batoto-v0.0.4.dart b/manga/src/all/batoto/batoto-v0.0.4.dart new file mode 100644 index 00000000..4cdde503 --- /dev/null +++ b/manga/src/all/batoto/batoto-v0.0.4.dart @@ -0,0 +1,1699 @@ +import 'package:mangayomi/bridge_lib.dart'; +import 'dart:convert'; + +class Batoto extends MProvider { + Batoto(); + + @override + Future getPopular(MSource source, int page) async { + final url = + "${source.baseUrl}/browse?${lang(source.lang)}&sort=views_a&page=$page"; + final data = {"url": url}; + final res = await http('GET', json.encode(data)); + return mangaElementM(res, source); + } + + @override + Future getLatestUpdates(MSource source, int page) async { + final url = + "${source.baseUrl}/browse?${lang(source.lang)}&sort=update&page=$page"; + final data = {"url": url}; + final res = await http('GET', json.encode(data)); + return mangaElementM(res, source); + } + + @override + Future search( + MSource source, String query, int page, FilterList filterList) async { + final filters = filterList.filters; + String url = ""; + String min = ""; + String max = ""; + if (query.isNotEmpty) { + url = "${source.baseUrl}/search?word=$query&page=$page"; + for (var filter in filters) { + if (filter.type == "LetterFilter") { + if (filter.state == 1) { + url += "&mode=letter"; + } + } + } + } else { + url = "${source.baseUrl}/browse"; + for (var filter in filters) { + if (filter.type == "LangGroupFilter") { + final langs = (filter.state as List).where((e) => e.state).toList(); + if (langs.isEmpty) { + url += "${ll(url)}lang=${source.lang}"; + } else { + url += "${ll(url)}lang="; + for (var lang in langs) { + url += "${lang.value},"; + } + url += "${source.lang}"; + } + } + // + else if (filter.type == "GenreGroupFilter") { + final included = (filter.state as List) + .where((e) => e.state == 1 ? true : false) + .toList(); + final excluded = (filter.state as List) + .where((e) => e.state == 2 ? true : false) + .toList(); + if (included.isNotEmpty) { + url += "${ll(url)}genres="; + for (var val in included) { + url += "${val.value},"; + } + } + if (excluded.isNotEmpty) { + url += "|"; + for (var val in excluded) { + url += "${val.value},"; + } + } + } else if (filter.type == "StatusFilter") { + url += "${ll(url)}release=${filter.values[filter.state].value}"; + } else if (filter.type == "SortFilter") { + final value = filter.state.ascending ? "az" : "za"; + url += + "${ll(url)}sort=${filter.values[filter.state.index].value}.$value"; + } else if (filter.type == "OriginGroupFilter") { + final origins = (filter.state as List).where((e) => e.state).toList(); + if (origins.isNotEmpty) { + url += "${ll(url)}origs="; + for (var orig in origins) { + url += "${orig.value},"; + } + } + } else if (filter.type == "MinChapterTextFilter") { + min = filter.state; + } else if (filter.type == "MaxChapterTextFilter") { + max = filter.state; + } + } + } + url += "${ll(url)}page=$page"; + + if (max.isNotEmpty || min.isNotEmpty) { + url += "${ll(url)}chapters=$min-$max"; + } + + final data = {"url": url}; + final res = await http('GET', json.encode(data)); + return mangaElementM(res, source); + } + + @override + Future getDetail(MSource source, String url) async { + final statusList = [ + {"Ongoing": 0, "Completed": 1, "Cancelled": 3, "Hiatus": 2} + ]; + + final data = {"url": "${source.baseUrl}$url"}; + final res = await http('GET', json.encode(data)); + MManga manga = MManga(); + final workStatus = xpath(res, + '//*[@class="attr-item"]/b[contains(text(),"Original work")]/following-sibling::span[1]/text()') + .first; + manga.status = parseStatus(workStatus, statusList); + + manga.author = xpath(res, + '//*[@class="attr-item"]/b[contains(text(),"Authors")]/following-sibling::span[1]/text()') + .first; + manga.genre = xpath(res, + '//*[@class="attr-item"]/b[contains(text(),"Genres")]/following-sibling::span[1]/text()') + .first + .split(","); + manga.description = xpath(res, '//*[@class="limit-html"]/text()').first; + + List chapsElement = querySelectorAll(res, + selector: "div.main div.p-2", + typeElement: 2, + attributes: "", + typeRegExp: 0); + List times = []; + List chapsUrls = []; + List chapsNames = []; + List scanlators = []; + for (var element in chapsElement) { + final urlElement = querySelectorAll(element, + selector: "a.chapt", + typeElement: 2, + attributes: "", + typeRegExp: 0) + .first; + final group = xpath(element, '//*[@class="extra"]/a/text()').first; + final name = xpath(urlElement, '//a/text()').first; + final url = xpath(urlElement, '//a/@href').first; + final time = + xpath(element, '//*[@class="extra"]/i[@class="ps-3"]/text()').first; + times.add(time); + chapsUrls.add(url); + scanlators.add(group); + chapsNames.add(name.replaceAll("\n ", "").replaceAll(" ", "")); + } + var dateUploads = + parseDates(times, source.dateFormat, source.dateFormatLocale); + List? chaptersList = []; + for (var i = 0; i < chapsNames.length; i++) { + MChapter chapter = MChapter(); + chapter.name = chapsNames[i]; + chapter.url = chapsUrls[i]; + chapter.scanlator = scanlators[i]; + chapter.dateUpload = dateUploads[i]; + chaptersList.add(chapter); + } + manga.chapters = chaptersList; + return manga; + } + + @override + Future> getPageList(MSource source, String url) async { + final datas = {"url": "${source.baseUrl}$url"}; + final res = await http('GET', json.encode(datas)); + + final script = xpath(res, + '//script[contains(text(), "imgHttpLis") and contains(text(), "batoWord") and contains(text(), "batoPass")]/text()') + .first; + final imgHttpLisString = + substringBefore(substringAfterLast(script, 'const imgHttpLis ='), ';'); + var imgHttpLis = json.decode(imgHttpLisString); + final batoWord = + substringBefore(substringAfterLast(script, 'const batoWord ='), ';'); + final batoPass = + substringBefore(substringAfterLast(script, 'const batoPass ='), ';'); + final evaluatedPass = deobfuscateJsPassword(batoPass); + final imgAccListString = + decryptAESCryptoJS(batoWord.replaceAll('"', ""), evaluatedPass); + var imgAccList = json.decode(imgAccListString); + List pagesUrl = []; + for (int i = 0; i < imgHttpLis.length; i++) { + String imgUrl = imgHttpLis[i]; + String imgAcc = imgAccList[i]; + pagesUrl.add("$imgUrl?$imgAcc"); + } + + return pagesUrl; + } + + MPages mangaElementM(String res, MSource source) async { + final lang = source.lang.replaceAll("-", "_"); + + var resB = querySelectorAll(res, + selector: "div#series-list div.col", + typeElement: 2, + attributes: "", + typeRegExp: 0); + + List images = []; + List urls = []; + List names = []; + + for (var element in resB) { + if (source.lang == "all" || + source.lang == "en" && element.contains('no-flag') || + element.contains('data-lang="$lang"')) { + final item = querySelectorAll(element, + selector: "a.item-cover", + typeElement: 2, + attributes: "", + typeRegExp: 0) + .first; + final img = querySelectorAll(item, + selector: "img", + typeElement: 3, + attributes: "src", + typeRegExp: 0) + .first; + final url = querySelectorAll(item, + selector: "a", + typeElement: 3, + attributes: "href", + typeRegExp: 0) + .first; + images.add(img); + urls.add(url); + final title = querySelectorAll(element, + selector: "a.item-title", + typeElement: 0, + attributes: "", + typeRegExp: 0) + .first; + names.add(title); + } + } + List mangaList = []; + + for (var i = 0; i < urls.length; i++) { + MManga manga = MManga(); + manga.name = names[i]; + manga.imageUrl = images[i]; + manga.link = urls[i]; + mangaList.add(manga); + } + + return MPages(mangaList, true); + } + + String lang(String lang) { + lang = lang.replaceAll("-", "_"); + if (lang == "all") { + return ""; + } + return "langs=$lang"; + } + + String ll(String url) { + if (url.contains("?")) { + return "&"; + } + return "?"; + } + + List getFilterList() { + return [ + SelectFilter("LetterFilter", "Letter matching mode (Slow)", 0, [ + SelectFilterOption("Disabled", "disabled"), + SelectFilterOption("Enabled", "enabled"), + ]), + SeparatorFilter(), + HeaderFilter("NOTE: Ignored if using text search!"), + SeparatorFilter(), + SortFilter("SortFilter", "Sort", SortState(5, false), [ + SelectFilterOption("Z-A", "title"), + SelectFilterOption("Last Updated", "update"), + SelectFilterOption("Newest Added", "create"), + SelectFilterOption("Most Views Totally", "views_a"), + SelectFilterOption("Most Views 365 days", "views_y"), + SelectFilterOption("Most Views 30 days", "views_m"), + SelectFilterOption("Most Views 7 days", "views_w"), + SelectFilterOption("Most Views 24 hours", "views_d"), + SelectFilterOption("Most Views 60 minutes", "views_h") + ]), + SelectFilter("StatusFilter", "Status", 0, [ + SelectFilterOption("All", ""), + SelectFilterOption("Pending", "pending"), + SelectFilterOption("Ongoing", "ongoing"), + SelectFilterOption("Completed", "completed"), + SelectFilterOption("Hiatus", "hiatus"), + SelectFilterOption("Cancelled", "cancelled"), + ]), + GroupFilter("GenreGroupFilter", "Genre", [ + { + "type": "TriState", + "filter": {"name": "Artbook", "value": "artbook"} + }, + { + "type": "TriState", + "filter": {"name": "Cartoon", "value": "cartoon"} + }, + { + "type": "TriState", + "filter": {"name": "Comic", "value": "comic"} + }, + { + "type": "TriState", + "filter": {"name": "Doujinshi", "value": "doujinshi"} + }, + { + "type": "TriState", + "filter": {"name": "Imageset", "value": "imageset"} + }, + { + "type": "TriState", + "filter": {"name": "Manga", "value": "manga"} + }, + { + "type": "TriState", + "filter": {"name": "Manhua", "value": "manhua"} + }, + { + "type": "TriState", + "filter": {"name": "Manhwa", "value": "manhwa"} + }, + { + "type": "TriState", + "filter": {"name": "Webtoon", "value": "webtoon"} + }, + { + "type": "TriState", + "filter": {"name": "Western", "value": "western"} + }, + { + "type": "TriState", + "filter": {"name": "Shoujo(G)", "value": "shoujo"} + }, + { + "type": "TriState", + "filter": {"name": "Shounen(B)", "value": "shounen"} + }, + { + "type": "TriState", + "filter": {"name": "Josei(W)", "value": "josei"} + }, + { + "type": "TriState", + "filter": {"name": "Seinen(M)", "value": "seinen"} + }, + { + "type": "TriState", + "filter": {"name": "Yuri(GL)", "value": "yuri"} + }, + { + "type": "TriState", + "filter": {"name": "Yaoi(BL)", "value": "yaoi"} + }, + { + "type": "TriState", + "filter": {"name": "Futa(WL)", "value": "futa"} + }, + { + "type": "TriState", + "filter": {"name": "Bara(ML)", "value": "bara"} + }, + { + "type": "TriState", + "filter": {"name": "Gore", "value": "gore"} + }, + { + "type": "TriState", + "filter": {"name": "Bloody", "value": "bloody"} + }, + { + "type": "TriState", + "filter": {"name": "Violence", "value": "violence"} + }, + { + "type": "TriState", + "filter": {"name": "Ecchi", "value": "ecchi"} + }, + { + "type": "TriState", + "filter": {"name": "Adult", "value": "adult"} + }, + { + "type": "TriState", + "filter": {"name": "Mature", "value": "mature"} + }, + { + "type": "TriState", + "filter": {"name": "Smut", "value": "smut"} + }, + { + "type": "TriState", + "filter": {"name": "Hentai", "value": "hentai"} + }, + { + "type": "TriState", + "filter": {"name": "4-Koma", "value": "_4_koma"} + }, + { + "type": "TriState", + "filter": {"name": "Action", "value": "action"} + }, + { + "type": "TriState", + "filter": {"name": "Adaptation", "value": "adaptation"} + }, + { + "type": "TriState", + "filter": {"name": "Adventure", "value": "adventure"} + }, + { + "type": "TriState", + "filter": {"name": "Age Gap", "value": "age_gap"} + }, + { + "type": "TriState", + "filter": {"name": "Aliens", "value": "aliens"} + }, + { + "type": "TriState", + "filter": {"name": "Animals", "value": "animals"} + }, + { + "type": "TriState", + "filter": {"name": "Anthology", "value": "anthology"} + }, + { + "type": "TriState", + "filter": {"name": "Beasts", "value": "beasts"} + }, + { + "type": "TriState", + "filter": {"name": "Bodyswap", "value": "bodyswap"} + }, + { + "type": "TriState", + "filter": {"name": "cars", "value": "cars"} + }, + { + "type": "TriState", + "filter": { + "name": "Cheating/Infidelity", + "value": "cheating_infidelity" + } + }, + { + "type": "TriState", + "filter": {"name": "Childhood Friends", "value": "childhood_friends"} + }, + { + "type": "TriState", + "filter": {"name": "College Life", "value": "college_life"} + }, + { + "type": "TriState", + "filter": {"name": "Comedy", "value": "comedy"} + }, + { + "type": "TriState", + "filter": {"name": "Contest Winning", "value": "contest_winning"} + }, + { + "type": "TriState", + "filter": {"name": "Cooking", "value": "cooking"} + }, + { + "type": "TriState", + "filter": {"name": "crime", "value": "crime"} + }, + { + "type": "TriState", + "filter": {"name": "Crossdressing", "value": "crossdressing"} + }, + { + "type": "TriState", + "filter": {"name": "Delinquents", "value": "delinquents"} + }, + { + "type": "TriState", + "filter": {"name": "Dementia", "value": "dementia"} + }, + { + "type": "TriState", + "filter": {"name": "Demons", "value": "demons"} + }, + { + "type": "TriState", + "filter": {"name": "Drama", "value": "drama"} + }, + { + "type": "TriState", + "filter": {"name": "Dungeons", "value": "dungeons"} + }, + { + "type": "TriState", + "filter": {"name": "Emperor's Daughter", "value": "emperor_daughte"} + }, + { + "type": "TriState", + "filter": {"name": "Fantasy", "value": "fantasy"} + }, + { + "type": "TriState", + "filter": {"name": "Fan-Colored", "value": "fan_colored"} + }, + { + "type": "TriState", + "filter": {"name": "Fetish", "value": "fetish"} + }, + { + "type": "TriState", + "filter": {"name": "Full Color", "value": "full_color"} + }, + { + "type": "TriState", + "filter": {"name": "Game", "value": "game"} + }, + { + "type": "TriState", + "filter": {"name": "Gender Bender", "value": "gender_bender"} + }, + { + "type": "TriState", + "filter": {"name": "Genderswap", "value": "genderswap"} + }, + { + "type": "TriState", + "filter": {"name": "Ghosts", "value": "ghosts"} + }, + { + "type": "TriState", + "filter": {"name": "Gyaru", "value": "gyaru"} + }, + { + "type": "TriState", + "filter": {"name": "Harem", "value": "harem"} + }, + { + "type": "TriState", + "filter": {"name": "Harlequin", "value": "harlequin"} + }, + { + "type": "TriState", + "filter": {"name": "Historical", "value": "historical"} + }, + { + "type": "TriState", + "filter": {"name": "Horror", "value": "horror"} + }, + { + "type": "TriState", + "filter": {"name": "Incest", "value": "incest"} + }, + { + "type": "TriState", + "filter": {"name": "Isekai", "value": "isekai"} + }, + { + "type": "TriState", + "filter": {"name": "Kids", "value": "kids"} + }, + { + "type": "TriState", + "filter": {"name": "Loli", "value": "loli"} + }, + { + "type": "TriState", + "filter": {"name": "Magic", "value": "magic"} + }, + { + "type": "TriState", + "filter": {"name": "Magical Girls", "value": "magical_girls"} + }, + { + "type": "TriState", + "filter": {"name": "Martial Arts", "value": "martial_arts"} + }, + { + "type": "TriState", + "filter": {"name": "Mecha", "value": "mecha"} + }, + { + "type": "TriState", + "filter": {"name": "Medical", "value": "medical"} + }, + { + "type": "TriState", + "filter": {"name": "Military", "value": "military"} + }, + { + "type": "TriState", + "filter": {"name": "Monster Girls", "value": "monster_girls"} + }, + { + "type": "TriState", + "filter": {"name": "Monsters", "value": "monsters"} + }, + { + "type": "TriState", + "filter": {"name": "Music", "value": "music"} + }, + { + "type": "TriState", + "filter": {"name": "Mystery", "value": "mystery"} + }, + { + "type": "TriState", + "filter": {"name": "Netorare/NTR", "value": "netorare"} + }, + { + "type": "TriState", + "filter": {"name": "Ninja", "value": "ninja"} + }, + { + "type": "TriState", + "filter": {"name": "Office Workers", "value": "office_workers"} + }, + { + "type": "TriState", + "filter": {"name": "Omegaverse", "value": "omegaverse"} + }, + { + "type": "TriState", + "filter": {"name": "Oneshot", "value": "oneshot"} + }, + { + "type": "TriState", + "filter": {"name": "parody", "value": "parody"} + }, + { + "type": "TriState", + "filter": {"name": "Philosophical", "value": "philosophical"} + }, + { + "type": "TriState", + "filter": {"name": "Police", "value": "police"} + }, + { + "type": "TriState", + "filter": {"name": "Post-Apocalyptic", "value": "post_apocalyptic"} + }, + { + "type": "TriState", + "filter": {"name": "Psychological", "value": "psychological"} + }, + { + "type": "TriState", + "filter": {"name": "Regression", "value": "regression"} + }, + { + "type": "TriState", + "filter": {"name": "Reincarnation", "value": "reincarnation"} + }, + { + "type": "TriState", + "filter": {"name": "Reverse Harem", "value": "reverse_harem"} + }, + { + "type": "TriState", + "filter": {"name": "Reverse Isekai", "value": "reverse_isekai"} + }, + { + "type": "TriState", + "filter": {"name": "Romance", "value": "romance"} + }, + { + "type": "TriState", + "filter": {"name": "Royal Family", "value": "royal_family"} + }, + { + "type": "TriState", + "filter": {"name": "Royalty", "value": "royalty"} + }, + { + "type": "TriState", + "filter": {"name": "Samurai", "value": "samurai"} + }, + { + "type": "TriState", + "filter": {"name": "School Life", "value": "school_life"} + }, + { + "type": "TriState", + "filter": {"name": "Sci-Fi", "value": "sci_fi"} + }, + { + "type": "TriState", + "filter": {"name": "Shota", "value": "shota"} + }, + { + "type": "TriState", + "filter": {"name": "Shoujo Ai", "value": "shoujo_ai"} + }, + { + "type": "TriState", + "filter": {"name": "Shounen Ai", "value": "shounen_ai"} + }, + { + "type": "TriState", + "filter": {"name": "Showbiz", "value": "showbiz"} + }, + { + "type": "TriState", + "filter": {"name": "Slice of Life", "value": "slice_of_life"} + }, + { + "type": "TriState", + "filter": {"name": "SM/BDSM/SUB-DOM", "value": "sm_bdsm"} + }, + { + "type": "TriState", + "filter": {"name": "Space", "value": "space"} + }, + { + "type": "TriState", + "filter": {"name": "Sports", "value": "sports"} + }, + { + "type": "TriState", + "filter": {"name": "Super Power", "value": "super_power"} + }, + { + "type": "TriState", + "filter": {"name": "Superhero", "value": "superhero"} + }, + { + "type": "TriState", + "filter": {"name": "Supernatural", "value": "supernatural"} + }, + { + "type": "TriState", + "filter": {"name": "Survival", "value": "survival"} + }, + { + "type": "TriState", + "filter": {"name": "Thriller", "value": "thriller"} + }, + { + "type": "TriState", + "filter": {"name": "Time Travel", "value": "time_travel"} + }, + { + "type": "TriState", + "filter": {"name": "Tower Climbing", "value": "tower_climbing"} + }, + { + "type": "TriState", + "filter": {"name": "Traditional Games", "value": "traditional_games"} + }, + { + "type": "TriState", + "filter": {"name": "Tragedy", "value": "tragedy"} + }, + { + "type": "TriState", + "filter": {"name": "Transmigration", "value": "transmigration"} + }, + { + "type": "TriState", + "filter": {"name": "Vampires", "value": "vampires"} + }, + { + "type": "TriState", + "filter": {"name": "Villainess", "value": "villainess"} + }, + { + "type": "TriState", + "filter": {"name": "Video Games", "value": "video_games"} + }, + { + "type": "TriState", + "filter": {"name": "Virtual Reality", "value": "virtual_reality"} + }, + { + "type": "TriState", + "filter": {"name": "Wuxia", "value": "wuxia"} + }, + { + "type": "TriState", + "filter": {"name": "Xianxia", "value": "xianxia"} + }, + { + "type": "TriState", + "filter": {"name": "Xuanhuan", "value": "xuanhuan"} + }, + { + "type": "TriState", + "filter": {"name": "Zombies", "value": "zombies"} + }, + { + "type": "TriState", + "filter": {"name": "shotacon", "value": "shotacon"} + }, + { + "type": "TriState", + "filter": {"name": "lolicon", "value": "lolicon"} + }, + { + "type": "TriState", + "filter": {"name": "Award Winning", "value": "award_winning"} + }, + { + "type": "TriState", + "filter": {"name": "Youkai", "value": "youkai"} + }, + { + "type": "TriState", + "filter": {"name": "Uncategorized", "value": "uncategorized"} + } + ]), + GroupFilter("OriginGroupFilter", "Origin", [ + { + "type": "CheckBox", + "filter": {"name": "Chinese", "value": "zh"} + }, + { + "type": "CheckBox", + "filter": {"name": "English", "value": "en"} + }, + { + "type": "CheckBox", + "filter": {"name": "Japanese", "value": "ja"} + }, + { + "type": "CheckBox", + "filter": {"name": "Korean", "value": "ko"} + }, + { + "type": "CheckBox", + "filter": {"name": "Afrikaans", "value": "af"} + }, + { + "type": "CheckBox", + "filter": {"name": "Albanian", "value": "sq"} + }, + { + "type": "CheckBox", + "filter": {"name": "Amharic", "value": "am"} + }, + { + "type": "CheckBox", + "filter": {"name": "Arabic", "value": "ar"} + }, + { + "type": "CheckBox", + "filter": {"name": "Armenian", "value": "hy"} + }, + { + "type": "CheckBox", + "filter": {"name": "Azerbaijani", "value": "az"} + }, + { + "type": "CheckBox", + "filter": {"name": "Belarusian", "value": "be"} + }, + { + "type": "CheckBox", + "filter": {"name": "Bengali", "value": "bn"} + }, + { + "type": "CheckBox", + "filter": {"name": "Bosnian", "value": "bs"} + }, + { + "type": "CheckBox", + "filter": {"name": "Bulgarian", "value": "bg"} + }, + { + "type": "CheckBox", + "filter": {"name": "Burmese", "value": "my"} + }, + { + "type": "CheckBox", + "filter": {"name": "Cambodian", "value": "km"} + }, + { + "type": "CheckBox", + "filter": {"name": "Catalan", "value": "ca"} + }, + { + "type": "CheckBox", + "filter": {"name": "Cebuano", "value": "ceb"} + }, + { + "type": "CheckBox", + "filter": {"name": "Chinese (Cantonese)", "value": "zh_hk"} + }, + { + "type": "CheckBox", + "filter": {"name": "Chinese (Traditional)", "value": "zh_tw"} + }, + { + "type": "CheckBox", + "filter": {"name": "Croatian", "value": "hr"} + }, + { + "type": "CheckBox", + "filter": {"name": "Czech", "value": "cs"} + }, + { + "type": "CheckBox", + "filter": {"name": "Danish", "value": "da"} + }, + { + "type": "CheckBox", + "filter": {"name": "Dutch", "value": "nl"} + }, + { + "type": "CheckBox", + "filter": {"name": "English (United States)", "value": "en_us"} + }, + { + "type": "CheckBox", + "filter": {"name": "Esperanto", "value": "eo"} + }, + { + "type": "CheckBox", + "filter": {"name": "Estonian", "value": "et"} + }, + { + "type": "CheckBox", + "filter": {"name": "Faroese", "value": "fo"} + }, + { + "type": "CheckBox", + "filter": {"name": "Filipino", "value": "fil"} + }, + { + "type": "CheckBox", + "filter": {"name": "Finnish", "value": "fi"} + }, + { + "type": "CheckBox", + "filter": {"name": "French", "value": "fr"} + }, + { + "type": "CheckBox", + "filter": {"name": "Georgian", "value": "ka"} + }, + { + "type": "CheckBox", + "filter": {"name": "German", "value": "de"} + }, + { + "type": "CheckBox", + "filter": {"name": "Greek", "value": "el"} + }, + { + "type": "CheckBox", + "filter": {"name": "Guarani", "value": "gn"} + }, + { + "type": "CheckBox", + "filter": {"name": "Gujarati", "value": "gu"} + }, + { + "type": "CheckBox", + "filter": {"name": "Haitian Creole", "value": "ht"} + }, + { + "type": "CheckBox", + "filter": {"name": "Hausa", "value": "ha"} + }, + { + "type": "CheckBox", + "filter": {"name": "Hebrew", "value": "he"} + }, + { + "type": "CheckBox", + "filter": {"name": "Hindi", "value": "hi"} + }, + { + "type": "CheckBox", + "filter": {"name": "Hungarian", "value": "hu"} + }, + { + "type": "CheckBox", + "filter": {"name": "Icelandic", "value": "is"} + }, + { + "type": "CheckBox", + "filter": {"name": "Igbo", "value": "ig"} + }, + { + "type": "CheckBox", + "filter": {"name": "Indonesian", "value": "id"} + }, + { + "type": "CheckBox", + "filter": {"name": "Irish", "value": "ga"} + }, + { + "type": "CheckBox", + "filter": {"name": "Italian", "value": "it"} + }, + { + "type": "CheckBox", + "filter": {"name": "Javanese", "value": "jv"} + }, + { + "type": "CheckBox", + "filter": {"name": "Kannada", "value": "kn"} + }, + { + "type": "CheckBox", + "filter": {"name": "Kazakh", "value": "kk"} + }, + { + "type": "CheckBox", + "filter": {"name": "Kurdish", "value": "ku"} + }, + { + "type": "CheckBox", + "filter": {"name": "Kyrgyz", "value": "ky"} + }, + { + "type": "CheckBox", + "filter": {"name": "Laothian", "value": "lo"} + }, + { + "type": "CheckBox", + "filter": {"name": "Latvian", "value": "lv"} + }, + { + "type": "CheckBox", + "filter": {"name": "Lithuanian", "value": "lt"} + }, + { + "type": "CheckBox", + "filter": {"name": "Luxembourgish", "value": "lb"} + }, + { + "type": "CheckBox", + "filter": {"name": "Macedonian", "value": "mk"} + }, + { + "type": "CheckBox", + "filter": {"name": "Malagasy", "value": "mg"} + }, + { + "type": "CheckBox", + "filter": {"name": "Malay", "value": "ms"} + }, + { + "type": "CheckBox", + "filter": {"name": "Malayalam", "value": "ml"} + }, + { + "type": "CheckBox", + "filter": {"name": "Maltese", "value": "mt"} + }, + { + "type": "CheckBox", + "filter": {"name": "Maori", "value": "mi"} + }, + { + "type": "CheckBox", + "filter": {"name": "Marathi", "value": "mr"} + }, + { + "type": "CheckBox", + "filter": {"name": "Moldavian", "value": "mo"} + }, + { + "type": "CheckBox", + "filter": {"name": "Mongolian", "value": "mn"} + }, + { + "type": "CheckBox", + "filter": {"name": "Nepali", "value": "ne"} + }, + { + "type": "CheckBox", + "filter": {"name": "Norwegian", "value": "no"} + }, + { + "type": "CheckBox", + "filter": {"name": "Nyanja", "value": "ny"} + }, + { + "type": "CheckBox", + "filter": {"name": "Pashto", "value": "ps"} + }, + { + "type": "CheckBox", + "filter": {"name": "Persian", "value": "fa"} + }, + { + "type": "CheckBox", + "filter": {"name": "Polish", "value": "pl"} + }, + { + "type": "CheckBox", + "filter": {"name": "Portuguese", "value": "pt"} + }, + { + "type": "CheckBox", + "filter": {"name": "Portuguese (Brazil)", "value": "pt_br"} + }, + { + "type": "CheckBox", + "filter": {"name": "Romanian", "value": "ro"} + }, + { + "type": "CheckBox", + "filter": {"name": "Romansh", "value": "rm"} + }, + { + "type": "CheckBox", + "filter": {"name": "Russian", "value": "ru"} + }, + { + "type": "CheckBox", + "filter": {"name": "Samoan", "value": "sm"} + }, + { + "type": "CheckBox", + "filter": {"name": "Serbian", "value": "sr"} + }, + { + "type": "CheckBox", + "filter": {"name": "Serbo-Croatian", "value": "sh"} + }, + { + "type": "CheckBox", + "filter": {"name": "Sesotho", "value": "st"} + }, + { + "type": "CheckBox", + "filter": {"name": "Shona", "value": "sn"} + }, + { + "type": "CheckBox", + "filter": {"name": "Sindhi", "value": "sd"} + }, + { + "type": "CheckBox", + "filter": {"name": "Sinhalese", "value": "si"} + }, + { + "type": "CheckBox", + "filter": {"name": "Slovak", "value": "sk"} + }, + { + "type": "CheckBox", + "filter": {"name": "Slovenian", "value": "sl"} + }, + { + "type": "CheckBox", + "filter": {"name": "Somali", "value": "so"} + }, + { + "type": "CheckBox", + "filter": {"name": "Spanish", "value": "es"} + }, + { + "type": "CheckBox", + "filter": {"name": "Spanish (Latin America)", "value": "es_419"} + }, + { + "type": "CheckBox", + "filter": {"name": "Swahili", "value": "sw"} + }, + { + "type": "CheckBox", + "filter": {"name": "Swedish", "value": "sv"} + }, + { + "type": "CheckBox", + "filter": {"name": "Tajik", "value": "tg"} + }, + { + "type": "CheckBox", + "filter": {"name": "Tamil", "value": "ta"} + }, + { + "type": "CheckBox", + "filter": {"name": "Thai", "value": "th"} + }, + { + "type": "CheckBox", + "filter": {"name": "Tigrinya", "value": "ti"} + }, + { + "type": "CheckBox", + "filter": {"name": "Tonga", "value": "to"} + }, + { + "type": "CheckBox", + "filter": {"name": "Turkish", "value": "tr"} + }, + { + "type": "CheckBox", + "filter": {"name": "Turkmen", "value": "tk"} + }, + { + "type": "CheckBox", + "filter": {"name": "Ukrainian", "value": "uk"} + }, + { + "type": "CheckBox", + "filter": {"name": "Urdu", "value": "ur"} + }, + { + "type": "CheckBox", + "filter": {"name": "Uzbek", "value": "uz"} + }, + { + "type": "CheckBox", + "filter": {"name": "Vietnamese", "value": "vi"} + }, + { + "type": "CheckBox", + "filter": {"name": "Yoruba", "value": "yo"} + }, + { + "type": "CheckBox", + "filter": {"name": "Zulu", "value": "zu"} + }, + { + "type": "CheckBox", + "filter": {"name": "Other", "value": "_t"} + } + ]), + GroupFilter("LangGroupFilter", "Languages", [ + { + "type": "CheckBox", + "filter": {"name": "English", "value": "en"} + }, + { + "type": "CheckBox", + "filter": {"name": "Arabic", "value": "ar"} + }, + { + "type": "CheckBox", + "filter": {"name": "Bulgarian", "value": "bg"} + }, + { + "type": "CheckBox", + "filter": {"name": "Chinese", "value": "zh"} + }, + { + "type": "CheckBox", + "filter": {"name": "Czech", "value": "cs"} + }, + { + "type": "CheckBox", + "filter": {"name": "Danish", "value": "da"} + }, + { + "type": "CheckBox", + "filter": {"name": "Dutch", "value": "nl"} + }, + { + "type": "CheckBox", + "filter": {"name": "Filipino", "value": "fil"} + }, + { + "type": "CheckBox", + "filter": {"name": "Finnish", "value": "fi"} + }, + { + "type": "CheckBox", + "filter": {"name": "French", "value": "fr"} + }, + { + "type": "CheckBox", + "filter": {"name": "German", "value": "de"} + }, + { + "type": "CheckBox", + "filter": {"name": "Greek", "value": "el"} + }, + { + "type": "CheckBox", + "filter": {"name": "Hebrew", "value": "he"} + }, + { + "type": "CheckBox", + "filter": {"name": "Hindi", "value": "hi"} + }, + { + "type": "CheckBox", + "filter": {"name": "Hungarian", "value": "hu"} + }, + { + "type": "CheckBox", + "filter": {"name": "Indonesian", "value": "id"} + }, + { + "type": "CheckBox", + "filter": {"name": "Italian", "value": "it"} + }, + { + "type": "CheckBox", + "filter": {"name": "Japanese", "value": "ja"} + }, + { + "type": "CheckBox", + "filter": {"name": "Korean", "value": "ko"} + }, + { + "type": "CheckBox", + "filter": {"name": "Malay", "value": "ms"} + }, + { + "type": "CheckBox", + "filter": {"name": "Polish", "value": "pl"} + }, + { + "type": "CheckBox", + "filter": {"name": "Portuguese", "value": "pt"} + }, + { + "type": "CheckBox", + "filter": {"name": "Portuguese (Brazil)", "value": "pt_br"} + }, + { + "type": "CheckBox", + "filter": {"name": "Romanian", "value": "ro"} + }, + { + "type": "CheckBox", + "filter": {"name": "Russian", "value": "ru"} + }, + { + "type": "CheckBox", + "filter": {"name": "Spanish", "value": "es"} + }, + { + "type": "CheckBox", + "filter": {"name": "Spanish (Latin America)", "value": "es_419"} + }, + { + "type": "CheckBox", + "filter": {"name": "Swedish", "value": "sv"} + }, + { + "type": "CheckBox", + "filter": {"name": "Thai", "value": "th"} + }, + { + "type": "CheckBox", + "filter": {"name": "Turkish", "value": "tr"} + }, + { + "type": "CheckBox", + "filter": {"name": "Ukrainian", "value": "uk"} + }, + { + "type": "CheckBox", + "filter": {"name": "Vietnamese", "value": "vi"} + }, + { + "type": "CheckBox", + "filter": {"name": "Afrikaans", "value": "af"} + }, + { + "type": "CheckBox", + "filter": {"name": "Albanian", "value": "sq"} + }, + { + "type": "CheckBox", + "filter": {"name": "Amharic", "value": "am"} + }, + { + "type": "CheckBox", + "filter": {"name": "Armenian", "value": "hy"} + }, + { + "type": "CheckBox", + "filter": {"name": "Azerbaijani", "value": "az"} + }, + { + "type": "CheckBox", + "filter": {"name": "Belarusian", "value": "be"} + }, + { + "type": "CheckBox", + "filter": {"name": "Bengali", "value": "bn"} + }, + { + "type": "CheckBox", + "filter": {"name": "Bosnian", "value": "bs"} + }, + { + "type": "CheckBox", + "filter": {"name": "Burmese", "value": "my"} + }, + { + "type": "CheckBox", + "filter": {"name": "Cambodian", "value": "km"} + }, + { + "type": "CheckBox", + "filter": {"name": "Catalan", "value": "ca"} + }, + { + "type": "CheckBox", + "filter": {"name": "Cebuano", "value": "ceb"} + }, + { + "type": "CheckBox", + "filter": {"name": "Chinese (Cantonese)", "value": "zh_hk"} + }, + { + "type": "CheckBox", + "filter": {"name": "Chinese (Traditional)", "value": "zh_tw"} + }, + { + "type": "CheckBox", + "filter": {"name": "Croatian", "value": "hr"} + }, + { + "type": "CheckBox", + "filter": {"name": "English (United States)", "value": "en_us"} + }, + { + "type": "CheckBox", + "filter": {"name": "Esperanto", "value": "eo"} + }, + { + "type": "CheckBox", + "filter": {"name": "Estonian", "value": "et"} + }, + { + "type": "CheckBox", + "filter": {"name": "Faroese", "value": "fo"} + }, + { + "type": "CheckBox", + "filter": {"name": "Georgian", "value": "ka"} + }, + { + "type": "CheckBox", + "filter": {"name": "Guarani", "value": "gn"} + }, + { + "type": "CheckBox", + "filter": {"name": "Gujarati", "value": "gu"} + }, + { + "type": "CheckBox", + "filter": {"name": "Haitian Creole", "value": "ht"} + }, + { + "type": "CheckBox", + "filter": {"name": "Hausa", "value": "ha"} + }, + { + "type": "CheckBox", + "filter": {"name": "Icelandic", "value": "is"} + }, + { + "type": "CheckBox", + "filter": {"name": "Igbo", "value": "ig"} + }, + { + "type": "CheckBox", + "filter": {"name": "Irish", "value": "ga"} + }, + { + "type": "CheckBox", + "filter": {"name": "Javanese", "value": "jv"} + }, + { + "type": "CheckBox", + "filter": {"name": "Kannada", "value": "kn"} + }, + { + "type": "CheckBox", + "filter": {"name": "Kazakh", "value": "kk"} + }, + { + "type": "CheckBox", + "filter": {"name": "Kurdish", "value": "ku"} + }, + { + "type": "CheckBox", + "filter": {"name": "Kyrgyz", "value": "ky"} + }, + { + "type": "CheckBox", + "filter": {"name": "Laothian", "value": "lo"} + }, + { + "type": "CheckBox", + "filter": {"name": "Latvian", "value": "lv"} + }, + { + "type": "CheckBox", + "filter": {"name": "Lithuanian", "value": "lt"} + }, + { + "type": "CheckBox", + "filter": {"name": "Luxembourgish", "value": "lb"} + }, + { + "type": "CheckBox", + "filter": {"name": "Macedonian", "value": "mk"} + }, + { + "type": "CheckBox", + "filter": {"name": "Malagasy", "value": "mg"} + }, + { + "type": "CheckBox", + "filter": {"name": "Malayalam", "value": "ml"} + }, + { + "type": "CheckBox", + "filter": {"name": "Maltese", "value": "mt"} + }, + { + "type": "CheckBox", + "filter": {"name": "Maori", "value": "mi"} + }, + { + "type": "CheckBox", + "filter": {"name": "Marathi", "value": "mr"} + }, + { + "type": "CheckBox", + "filter": {"name": "Moldavian", "value": "mo"} + }, + { + "type": "CheckBox", + "filter": {"name": "Mongolian", "value": "mn"} + }, + { + "type": "CheckBox", + "filter": {"name": "Nepali", "value": "ne"} + }, + { + "type": "CheckBox", + "filter": {"name": "Norwegian", "value": "no"} + }, + { + "type": "CheckBox", + "filter": {"name": "Nyanja", "value": "ny"} + }, + { + "type": "CheckBox", + "filter": {"name": "Pashto", "value": "ps"} + }, + { + "type": "CheckBox", + "filter": {"name": "Persian", "value": "fa"} + }, + { + "type": "CheckBox", + "filter": {"name": "Romansh", "value": "rm"} + }, + { + "type": "CheckBox", + "filter": {"name": "Samoan", "value": "sm"} + }, + { + "type": "CheckBox", + "filter": {"name": "Serbian", "value": "sr"} + }, + { + "type": "CheckBox", + "filter": {"name": "Serbo-Croatian", "value": "sh"} + }, + { + "type": "CheckBox", + "filter": {"name": "Sesotho", "value": "st"} + }, + { + "type": "CheckBox", + "filter": {"name": "Shona", "value": "sn"} + }, + { + "type": "CheckBox", + "filter": {"name": "Sindhi", "value": "sd"} + }, + { + "type": "CheckBox", + "filter": {"name": "Sinhalese", "value": "si"} + }, + { + "type": "CheckBox", + "filter": {"name": "Slovak", "value": "sk"} + }, + { + "type": "CheckBox", + "filter": {"name": "Slovenian", "value": "sl"} + }, + { + "type": "CheckBox", + "filter": {"name": "Somali", "value": "so"} + }, + { + "type": "CheckBox", + "filter": {"name": "Swahili", "value": "sw"} + }, + { + "type": "CheckBox", + "filter": {"name": "Tajik", "value": "tg"} + }, + { + "type": "CheckBox", + "filter": {"name": "Tamil", "value": "ta"} + }, + { + "type": "CheckBox", + "filter": {"name": "Tigrinya", "value": "ti"} + }, + { + "type": "CheckBox", + "filter": {"name": "Tonga", "value": "to"} + }, + { + "type": "CheckBox", + "filter": {"name": "Turkmen", "value": "tk"} + }, + { + "type": "CheckBox", + "filter": {"name": "Urdu", "value": "ur"} + }, + { + "type": "CheckBox", + "filter": {"name": "Uzbek", "value": "uz"} + }, + { + "type": "CheckBox", + "filter": {"name": "Yoruba", "value": "yo"} + }, + { + "type": "CheckBox", + "filter": {"name": "Zulu", "value": "zu"} + }, + { + "type": "CheckBox", + "filter": {"name": "Other", "value": "_t"} + }, + { + "type": "CheckBox", + "filter": {"name": "Basque", "value": "eu"} + }, + { + "type": "CheckBox", + "filter": {"name": "Portuguese (Portugal)", "value": "pt-PT"} + } + ]), + TextFilter("MinChapterTextFilter", "Min. Chapters"), + TextFilter("MaxChapterTextFilter", "Max. Chapters"), + SeparatorFilter(), + ]; + } +} + +Map getMirrorPref() { + return { + "bato.to": "https://bato.to", + "batocomic.com": "https://batocomic.com", + "batocomic.net": "https://batocomic.net", + "batocomic.org": "https://batocomic.org", + "batotoo.com": "https://batotoo.com", + "batotwo.com": "https://batotwo.com", + "battwo.com": "https://battwo.com", + "comiko.net": "https://comiko.net", + "comiko.org": "https://comiko.org", + "mangatoto.com": "https://mangatoto.com", + "mangatoto.net": "https://mangatoto.net", + "mangatoto.org": "https://mangatoto.org", + "readtoto.com": "https://readtoto.com", + "readtoto.net": "https://readtoto.net", + "readtoto.org": "https://readtoto.org", + "dto.to": "https://dto.to", + "hto.to": "https://hto.to", + "mto.to": "https://mto.to", + "wto.to": "https://wto.to", + "xbato.com": "https://xbato.com", + "xbato.net": "https://xbato.net", + "xbato.org": "https://xbato.org", + "zbato.com": "https://zbato.com", + "zbato.net": "https://zbato.net", + "zbato.org": "https://zbato.org", + }; +} + +Batoto main() { + return Batoto(); +} diff --git a/manga/src/all/batoto/sources.dart b/manga/src/all/batoto/sources.dart index ea256c2c..e394fbf0 100644 --- a/manga/src/all/batoto/sources.dart +++ b/manga/src/all/batoto/sources.dart @@ -1,7 +1,7 @@ import '../../../../model/source.dart'; import '../../../../utils/utils.dart'; -const batotoVersion = "0.0.35"; +const batotoVersion = "0.0.4"; const batotoSourceCodeUrl = "https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v$batotoVersion.dart"; From bce9bc87245457a57f71a016b5b876e7255dd0b6 Mon Sep 17 00:00:00 2001 From: kodjomoustapha <101261721+kodjomoustapha@users.noreply.github.com> Date: Fri, 24 Nov 2023 17:53:52 +0100 Subject: [PATCH 2/7] add filter method --- ...madara-v0.0.35.dart => madara-v0.0.4.dart} | 87 ++- manga/multisrc/madara/sources.dart | 2 +- ...r-v0.0.45.dart => mangareader-v0.0.5.dart} | 85 ++- manga/multisrc/mangareader/sources.dart | 2 +- ...mmrcms-v0.0.35.dart => mmrcms-v0.0.4.dart} | 163 ++++- manga/multisrc/mmrcms/sources.dart | 2 +- manga/src/all/comick/comick-v0.0.35.dart | 182 ----- manga/src/all/comick/comick-v0.0.4.dart | 647 ++++++++++++++++++ manga/src/all/comick/sources.dart | 2 +- ...adex-v0.0.4.dart => mangadex-v0.0.45.dart} | 3 +- manga/src/all/mangadex/sources.dart | 2 +- ...ere-v0.0.35.dart => mangahere-v0.0.4.dart} | 126 +++- manga/src/en/mangahere/source.dart | 2 +- 13 files changed, 1089 insertions(+), 216 deletions(-) rename manga/multisrc/madara/{madara-v0.0.35.dart => madara-v0.0.4.dart} (77%) rename manga/multisrc/mangareader/{mangareader-v0.0.45.dart => mangareader-v0.0.5.dart} (68%) rename manga/multisrc/mmrcms/{mmrcms-v0.0.35.dart => mmrcms-v0.0.4.dart} (50%) delete mode 100644 manga/src/all/comick/comick-v0.0.35.dart create mode 100644 manga/src/all/comick/comick-v0.0.4.dart rename manga/src/all/mangadex/{mangadex-v0.0.4.dart => mangadex-v0.0.45.dart} (98%) rename manga/src/en/mangahere/{mangahere-v0.0.35.dart => mangahere-v0.0.4.dart} (62%) diff --git a/manga/multisrc/madara/madara-v0.0.35.dart b/manga/multisrc/madara/madara-v0.0.4.dart similarity index 77% rename from manga/multisrc/madara/madara-v0.0.35.dart rename to manga/multisrc/madara/madara-v0.0.4.dart index c9fa5175..bcf84a40 100644 --- a/manga/multisrc/madara/madara-v0.0.35.dart +++ b/manga/multisrc/madara/madara-v0.0.4.dart @@ -67,11 +67,53 @@ class Madara extends MProvider { } @override - Future search(MSource source, String query, int page) async { - final data = { - "url": "${source.baseUrl}/?s=$query&post_type=wp-manga", - "sourceId": source.id - }; + Future search( + MSource source, String query, int page, FilterList filterList) async { + final filters = filterList.filters; + + String url = "${source.baseUrl}/?s=$query&post_type=wp-manga"; + + for (var filter in filters) { + if (filter.type == "AuthorFilter") { + if (filter.state.isNotEmpty) { + url += "${ll(url)}author=${Uri.encodeComponent(filter.state)}"; + } + } else if (filter.type == "ArtistFilter") { + if (filter.state.isNotEmpty) { + url += "${ll(url)}artist=${Uri.encodeComponent(filter.state)}"; + } + } else if (filter.type == "YearFilter") { + if (filter.state.isNotEmpty) { + url += "${ll(url)}release=${Uri.encodeComponent(filter.state)}"; + } + } else if (filter.type == "StatusFilter") { + final status = (filter.state as List).where((e) => e.state).toList(); + if (status.isNotEmpty) { + for (var st in status) { + url += "${ll(url)}status[]=${st.value},"; + } + } + } else if (filter.type == "OrderByFilter") { + if (filter.state != 0) { + final order = filter.values[filter.state].value; + url += "${ll(url)}m_orderby=$order"; + } + } else if (filter.type == "AdultContentFilter") { + final ctn = filter.values[filter.state].value; + if (ctn.isNotEmpty) { + url += "${ll(url)}adult=$ctn"; + } + } else if (filter.type == "GenreListFilter") { + final genres = (filter.state as List).where((e) => e.state).toList(); + if (genres.isNotEmpty) { + for (var genre in genres) { + url += "${ll(url)}genre[]=${genre.value},"; + } + } + } + } + + final data = {"url": url, "sourceId": source.id}; final res = await http('GET', json.encode(data)); List mangaList = []; @@ -312,6 +354,41 @@ class Madara extends MProvider { } return pageUrls; } + + List getFilterList() { + return [ + TextFilter("AuthorFilter", "Author"), + TextFilter("ArtistFilter", "Artist"), + TextFilter("YearFilter", "Year of Released"), + GroupFilter("StatusFilter", "Status", [ + CheckBoxFilter("Completed", "end"), + CheckBoxFilter("Ongoing", "on-going"), + CheckBoxFilter("Canceled", "canceled"), + CheckBoxFilter("On Hold", "on-hold"), + ]), + SelectFilter("OrderByFilter", "Order By", 0, [ + SelectFilterOption("Relevance", ""), + SelectFilterOption("Latest", "latest"), + SelectFilterOption("A-Z", "alphabet"), + SelectFilterOption("Rating", "rating"), + SelectFilterOption("Trending", "trending"), + SelectFilterOption("Most Views", "views"), + SelectFilterOption("New", "new-manga"), + ]), + SelectFilter("AdultContentFilter", "Adult Content", 0, [ + SelectFilterOption("All", ""), + SelectFilterOption("None", "0"), + SelectFilterOption("Only", "1"), + ]) + ]; + } + + String ll(String url) { + if (url.contains("?")) { + return "&"; + } + return "?"; + } } Madara main() { diff --git a/manga/multisrc/madara/sources.dart b/manga/multisrc/madara/sources.dart index a068374c..1e8d6532 100644 --- a/manga/multisrc/madara/sources.dart +++ b/manga/multisrc/madara/sources.dart @@ -1,7 +1,7 @@ import '../../../model/source.dart'; import '../../../utils/utils.dart'; -const madaraVersion = "0.0.35"; +const madaraVersion = "0.0.4"; const madaraSourceCodeUrl = "https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/multisrc/madara/madara-v$madaraVersion.dart"; const defaultDateFormat = "MMMM dd, yyyy"; diff --git a/manga/multisrc/mangareader/mangareader-v0.0.45.dart b/manga/multisrc/mangareader/mangareader-v0.0.5.dart similarity index 68% rename from manga/multisrc/mangareader/mangareader-v0.0.45.dart rename to manga/multisrc/mangareader/mangareader-v0.0.5.dart index 8450733c..e4e016e0 100644 --- a/manga/multisrc/mangareader/mangareader-v0.0.45.dart +++ b/manga/multisrc/mangareader/mangareader-v0.0.5.dart @@ -25,9 +25,49 @@ class MangaReader extends MProvider { } @override - Future search(MSource source, String query, int page) async { - final url = + Future search( + MSource source, String query, int page, FilterList filterList) async { + final filters = filterList.filters; + + String url = "${source.baseUrl}${getMangaUrlDirectory(source.name)}/?&title=$query&page=$page"; + + for (var filter in filters) { + if (filter.type == "AuthorFilter") { + url += "${ll(url)}author=${Uri.encodeComponent(filter.state)}"; + } else if (filter.type == "YearFilter") { + url += "${ll(url)}yearx=${Uri.encodeComponent(filter.state)}"; + } else if (filter.type == "StatusFilter") { + final status = filter.values[filter.state].value; + url += "${ll(url)}status=$status"; + } else if (filter.type == "TypeFilter") { + final type = filter.values[filter.state].value; + url += "${ll(url)}type=$type"; + } else if (filter.type == "OrderByFilter") { + final order = filter.values[filter.state].value; + url += "${ll(url)}order=$order"; + } else if (filter.type == "GenreListFilter") { + final included = (filter.state as List) + .where((e) => e.state == 1 ? true : false) + .toList(); + final excluded = (filter.state as List) + .where((e) => e.state == 2 ? true : false) + .toList(); + if (included.isNotEmpty) { + url += "${ll(url)}genres[]="; + for (var val in included) { + url += "${val.value},"; + } + } + if (excluded.isNotEmpty) { + url += "${ll(url)}genres[]="; + for (var val in excluded) { + url += "-${val.value},"; + } + } + } + } + final data = {"url": url, "sourceId": source.id}; final res = await http('GET', json.encode(data)); @@ -195,6 +235,47 @@ class MangaReader extends MProvider { return MPages(mangaList, true); } + List getFilterList() { + return [ + SeparatorFilter(), + TextFilter("AuthorFilter", "Author"), + TextFilter("YearFilter", "Year"), + SelectFilter("StatusFilter", "Status", 0, [ + SelectFilterOption("All", ""), + SelectFilterOption("Ongoing", "ongoing"), + SelectFilterOption("Completed", "completed"), + SelectFilterOption("Hiatus", "hiatus"), + SelectFilterOption("Dropped", "dropped"), + ]), + SelectFilter("TypeFilter", "Type", 0, [ + SelectFilterOption("All", ""), + SelectFilterOption("Manga", "Manga"), + SelectFilterOption("Manhwa", "Manhwa"), + SelectFilterOption("Manhua", "Manhua"), + SelectFilterOption("Comic", "Comic"), + ]), + SelectFilter("OrderByFilter", "Sort By", 0, [ + SelectFilterOption("Default", ""), + SelectFilterOption("A-Z", "title"), + SelectFilterOption("Z-A", "titlereverse"), + SelectFilterOption("Latest Update", "update"), + SelectFilterOption("Latest Added", "latest"), + SelectFilterOption("Popular", "popular"), + ]), + HeaderFilter("Genre exclusion is not available for all sources"), + GroupFilter("GenreListFilter", "Genre", [ + TriStateFilter("Press reset to attempt to fetch genres", ""), + ]), + ]; + } + + String ll(String url) { + if (url.contains("?")) { + return "&"; + } + return "?"; + } + String getMangaUrlDirectory(String sourceName) { if (sourceName == "Sushi-Scan") { return "/catalogue"; diff --git a/manga/multisrc/mangareader/sources.dart b/manga/multisrc/mangareader/sources.dart index 38111773..6ab6dbe3 100644 --- a/manga/multisrc/mangareader/sources.dart +++ b/manga/multisrc/mangareader/sources.dart @@ -1,7 +1,7 @@ import '../../../model/source.dart'; import '../../../utils/utils.dart'; -const mangareaderVersion = "0.0.45"; +const mangareaderVersion = "0.0.5"; const mangareaderSourceCodeUrl = "https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/multisrc/mangareader/mangareader-v$mangareaderVersion.dart"; const defaultDateFormat = "MMMM dd, yyyy"; diff --git a/manga/multisrc/mmrcms/mmrcms-v0.0.35.dart b/manga/multisrc/mmrcms/mmrcms-v0.0.4.dart similarity index 50% rename from manga/multisrc/mmrcms/mmrcms-v0.0.35.dart rename to manga/multisrc/mmrcms/mmrcms-v0.0.4.dart index 77899ec6..d0f522cf 100644 --- a/manga/multisrc/mmrcms/mmrcms-v0.0.35.dart +++ b/manga/multisrc/mmrcms/mmrcms-v0.0.4.dart @@ -68,32 +68,74 @@ class MMRCMS extends MProvider { } @override - Future search(MSource source, String query, int page) async { - final url = "${source.baseUrl}/search?query=$query"; + Future search( + MSource source, String query, int page, FilterList filterList) async { + final filters = filterList.filters; + String url = ""; + if (query.isNotEmpty) { + url = "${source.baseUrl}/search?query=$query"; + } else { + url = "${source.baseUrl}/filterList?page=$page"; + for (var filter in filters) { + if (filter.type == "AuthorFilter") { + url += "${ll(url)}author=${Uri.encodeComponent(filter.state)}"; + } else if (filter.type == "SortFilter") { + url += "${ll(url)}sortBy=${filter.values[filter.state.index].value}"; + final asc = filter.state.ascending ? "asc=true" : "asc=false"; + url += "${ll(url)}$asc"; + } else if (filter.type == "CategoryFilter") { + if (filter.state != 0) { + final cat = filter.values[filter.state].value; + url += "${ll(url)}cat=$cat"; + } + } else if (filter.type == "BeginsWithFilter") { + if (filter.state != 0) { + final a = filter.values[filter.state].value; + url += "${ll(url)}alpha=$a"; + } + } + } + } final data = {"url": url, "sourceId": source.id}; final res = await http('GET', json.encode(data)); List mangaList = []; - final jsonList = json.decode(res)["suggestions"]; + List urls = []; List names = []; List images = []; - for (var da in jsonList) { - String value = da["value"]; - String data = da["data"]; - if (source.name == 'Scan VF') { - urls.add('${source.baseUrl}/$data'); - } else if (source.name == 'Manga-FR') { - urls.add('${source.baseUrl}/lecture-en-ligne/$data'); - } else { - urls.add('${source.baseUrl}/manga/$data'); + + if (query.isNotEmpty) { + final jsonList = json.decode(res)["suggestions"]; + for (var da in jsonList) { + String value = da["value"]; + String data = da["data"]; + if (source.name == 'Scan VF') { + urls.add('${source.baseUrl}/$data'); + } else if (source.name == 'Manga-FR') { + urls.add('${source.baseUrl}/lecture-en-ligne/$data'); + } else { + urls.add('${source.baseUrl}/manga/$data'); + } + names.add(value); + if (source.name == "Manga-FR") { + images.add("${source.baseUrl}/uploads/manga/$data.jpg"); + } else { + images.add( + "${source.baseUrl}/uploads/manga/$data/cover/cover_250x350.jpg"); + } } - names.add(value); - if (source.name == "Manga-FR") { - images.add("${source.baseUrl}/uploads/manga/$data.jpg"); - } else { - images.add( - "${source.baseUrl}/uploads/manga/$data/cover/cover_250x350.jpg"); + } else { + urls = xpath(res, '//div/div/div/a/@href'); + names = xpath(res, '//div/div/div/a/text()'); + for (var url in urls) { + String slug = substringAfterLast(url, '/'); + if (source.name == "Manga-FR") { + images.add("${source.baseUrl}/uploads/manga/${slug}.jpg"); + } else { + images.add( + "${source.baseUrl}/uploads/manga/${slug}/cover/cover_250x350.jpg"); + } } } @@ -189,6 +231,91 @@ class MMRCMS extends MProvider { return pagesUrl; } + + List getFilterList() { + return [ + HeaderFilter("NOTE: Ignored if using text search!"), + SeparatorFilter(), + TextFilter("AuthorFilter", "Author"), + SelectFilter("CategoryFilter", "Category", 0, [ + SelectFilterOption("Any", ""), + SelectFilterOption("Action", "Action"), + SelectFilterOption("Adventure", "Adventure"), + SelectFilterOption("Comedy", "Comedy"), + SelectFilterOption("Doujinshi", "Doujinshi"), + SelectFilterOption("Drama", "Drama"), + SelectFilterOption("Ecchi", "Ecchi"), + SelectFilterOption("Fantasy", "Fantasy"), + SelectFilterOption("Gender Bender", "Gender Bender"), + SelectFilterOption("Harem", "Harem"), + SelectFilterOption("Historical", "Historical"), + SelectFilterOption("Horror", "Horror"), + SelectFilterOption("Josei", "Josei"), + SelectFilterOption("Martial Arts", "Martial Arts"), + SelectFilterOption("Mature", "Mature"), + SelectFilterOption("Mecha", "Mecha"), + SelectFilterOption("Mystery", "Mystery"), + SelectFilterOption("One Shot", "One Shot"), + SelectFilterOption("Psychological", "Psychological"), + SelectFilterOption("Romance", "Romance"), + SelectFilterOption("School Life", "School Life"), + SelectFilterOption("Sci-fi", "Sci-fi"), + SelectFilterOption("Seinen", "Seinen"), + SelectFilterOption("Shoujo", "Shoujo"), + SelectFilterOption("Shoujo Ai", "Shoujo Ai"), + SelectFilterOption("Shounen", "Shounen"), + SelectFilterOption("Shounen Ai", "Shounen Ai"), + SelectFilterOption("Slice of Life", "Slice of Life"), + SelectFilterOption("Sports", "Sports"), + SelectFilterOption("Supernatural", "Supernatural"), + SelectFilterOption("Tragedy", "Tragedy"), + SelectFilterOption("Yaoi", "Yaoi"), + SelectFilterOption("Yuri", "Yuri"), + ]), + SelectFilter("BeginsWithFilter", "Begins with", 0, [ + SelectFilterOption("Any", ""), + SelectFilterOption("#", "#"), + SelectFilterOption("A", "A"), + SelectFilterOption("B", "B"), + SelectFilterOption("C", "C"), + SelectFilterOption("D", "D"), + SelectFilterOption("E", "E"), + SelectFilterOption("F", "F"), + SelectFilterOption("G", "G"), + SelectFilterOption("H", "H"), + SelectFilterOption("I", "I"), + SelectFilterOption("J", "J"), + SelectFilterOption("K", "K"), + SelectFilterOption("L", "L"), + SelectFilterOption("M", "M"), + SelectFilterOption("N", "N"), + SelectFilterOption("O", "O"), + SelectFilterOption("P", "P"), + SelectFilterOption("Q", "Q"), + SelectFilterOption("R", "R"), + SelectFilterOption("S", "S"), + SelectFilterOption("T", "T"), + SelectFilterOption("U", "U"), + SelectFilterOption("V", "V"), + SelectFilterOption("W", "W"), + SelectFilterOption("X", "X"), + SelectFilterOption("Y", "Y"), + SelectFilterOption("Z", "Z"), + ]), + SortFilter("SortFilter", "Sort", SortState(0, true), [ + SelectFilterOption("Name", "name"), + SelectFilterOption("Popularity", "views"), + SelectFilterOption("Last update", "last_release"), + ]) + ]; + } + + String ll(String url) { + if (url.contains("?")) { + return "&"; + } + return "?"; + } } MMRCMS main() { diff --git a/manga/multisrc/mmrcms/sources.dart b/manga/multisrc/mmrcms/sources.dart index 7d186739..6b10aa8a 100644 --- a/manga/multisrc/mmrcms/sources.dart +++ b/manga/multisrc/mmrcms/sources.dart @@ -1,7 +1,7 @@ import '../../../model/source.dart'; import '../../../utils/utils.dart'; -const mmrcmsVersion = "0.0.35"; +const mmrcmsVersion = "0.0.4"; const mmrcmsSourceCodeUrl = "https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/multisrc/mmrcms/mmrcms-v$mmrcmsVersion.dart"; const defaultDateFormat = "d MMM. yyyy"; diff --git a/manga/src/all/comick/comick-v0.0.35.dart b/manga/src/all/comick/comick-v0.0.35.dart deleted file mode 100644 index de315509..00000000 --- a/manga/src/all/comick/comick-v0.0.35.dart +++ /dev/null @@ -1,182 +0,0 @@ -import 'package:mangayomi/bridge_lib.dart'; -import 'dart:convert'; - -class ComickFun extends MProvider { - ComickFun(); - - @override - Future getPopular(MSource source, int page) async { - final url = - "${source.apiUrl}/v1.0/search?sort=follow&page=$page&tachiyomi=true"; - final data = {"url": url, "headers": getHeader(source.baseUrl)}; - final res = await http('GET', json.encode(data)); - return mangaRes(res); - } - - @override - Future getLatestUpdates(MSource source, int page) async { - final url = - "${source.apiUrl}/v1.0/search?sort=uploaded&page=$page&tachiyomi=true"; - final data = {"url": url, "headers": getHeader(source.baseUrl)}; - final res = await http('GET', json.encode(data)); - return mangaRes(res); - } - - @override - Future search(MSource source, String query, int page) async { - final url = "${source.apiUrl}/v1.0/search?q=$query&tachiyomi=true"; - final data = {"url": url, "headers": getHeader(source.baseUrl)}; - final res = await http('GET', json.encode(data)); - return mangaRes(res); - } - - @override - Future getDetail(MSource source, String url) async { - final statusList = [ - {"1": 0, "2": 1, "3": 3, "4": 2} - ]; - - final headers = getHeader(source.baseUrl); - - final urll = "${source.apiUrl}${url.replaceAll("#", '')}?tachiyomi=true"; - final data = {"url": urll, "headers": headers}; - final res = await http('GET', json.encode(data)); - MManga manga = MManga(); - manga.author = jsonPathToString(res, r'$.authors[*].name', ''); - manga.genre = jsonPathToString(res, r'$.genres[*].name', "_.").split("_."); - manga.description = jsonPathToString(res, r'$..desc', ''); - manga.status = - parseStatus(jsonPathToString(res, r'$..comic.status', ''), statusList); - final chapUrlReq = - "${source.apiUrl}${url.replaceAll("#", '')}chapters?lang=${source.lang}&tachiyomi=true&page=1"; - final dataReq = {"url": chapUrlReq, "headers": headers}; - final request = await http('GET', json.encode(dataReq)); - var total = jsonPathToString(request, r'$.total', ''); - final chapterLimit = int.parse(total); - final newChapUrlReq = - "${source.apiUrl}${url.replaceAll("#", '')}chapters?limit=$chapterLimit&lang=${source.lang}&tachiyomi=true&page=1"; - - final newDataReq = {"url": newChapUrlReq, "headers": headers}; - final newRequest = await http('GET', json.encode(newDataReq)); - - final chapsUrls = - jsonPathToString(newRequest, r'$.chapters[*].hid', "_.").split("_."); - final chapDate = - jsonPathToString(newRequest, r'$.chapters[*].created_at', "_.") - .split("_."); - final chaptersVolumes = - jsonPathToString(newRequest, r'$.chapters[*].vol', "_.").split("_."); - final chaptersScanlators = - jsonPathToString(newRequest, r'$.chapters[*].group_name', "_.") - .split("_."); - final chapsNames = - jsonPathToString(newRequest, r'$.chapters[*].title', "_.").split("_."); - final chaptersChaps = - jsonPathToString(newRequest, r'$.chapters[*].chap', "_.").split("_."); - - var dateUploads = - parseDates(chapDate, source.dateFormat, source.dateFormatLocale); - List? chaptersList = []; - for (var i = 0; i < chapsNames.length; i++) { - String title = ""; - String scanlator = ""; - if (chaptersChaps.isNotEmpty && chaptersVolumes.isNotEmpty) { - title = beautifyChapterName( - chaptersVolumes[i], chaptersChaps[i], chapsNames[i], source.lang); - } else { - title = chapsNames[i]; - } - if (chaptersScanlators.isNotEmpty) { - scanlator = chaptersScanlators[i] - .toString() - .replaceAll(']', "") - .replaceAll("[", ""); - } - MChapter chapter = MChapter(); - chapter.name = title; - chapter.url = chapsUrls[i]; - chapter.scanlator = scanlator == "null" ? "" : scanlator; - chapter.dateUpload = dateUploads[i]; - chaptersList.add(chapter); - } - manga.chapters = chaptersList; - return manga; - } - - @override - Future> getPageList(MSource source, String url) async { - final urll = "${source.apiUrl}/chapter/$url?tachiyomi=true"; - final data = {"url": urll, "headers": getHeader(url)}; - final res = await http('GET', json.encode(data)); - return jsonPathToString(res, r'$.chapter.images[*].url', '_.').split('_.'); - } - - MPages mangaRes(String res) async { - final names = jsonPathToList(res, r'$.title', 0); - List ids = jsonPathToList(res, r'$.hid', 0); - List mangaUrls = []; - for (var id in ids) { - mangaUrls.add("/comic/$id/#"); - } - final urls = mangaUrls; - final images = jsonPathToList(res, r'$.cover_url', 0); - List mangaList = []; - for (var i = 0; i < urls.length; i++) { - MManga manga = MManga(); - manga.name = names[i]; - manga.imageUrl = images[i]; - manga.link = urls[i]; - mangaList.add(manga); - } - - return MPages(mangaList, true); - } - - String beautifyChapterName( - String vol, String chap, String title, String lang) { - String result = ""; - - if (vol != "null" && vol.isNotEmpty) { - if (chap != "null" && chap.isEmpty) { - result += "Volume $vol "; - } else { - result += "Vol. $vol "; - } - } - - if (chap != "null" && chap.isNotEmpty) { - if (vol != "null" && vol.isEmpty) { - if (lang != "null" && lang == "fr") { - result += "Chapitre $chap"; - } else { - result += "Chapter $chap"; - } - } else { - result += "Ch. $chap "; - } - } - - if (title != "null" && title.isNotEmpty) { - if (chap != "null" && chap.isEmpty) { - result += title; - } else { - result += " : $title"; - } - } - - return result; - } -} - -Map getHeader(String url) { - final headers = { - "Referer": "$url/", - 'User-Agent': - "Tachiyomi Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:110.0) Gecko/20100101 Firefox/110.0" - }; - return headers; -} - -ComickFun main() { - return ComickFun(); -} diff --git a/manga/src/all/comick/comick-v0.0.4.dart b/manga/src/all/comick/comick-v0.0.4.dart new file mode 100644 index 00000000..66e37a98 --- /dev/null +++ b/manga/src/all/comick/comick-v0.0.4.dart @@ -0,0 +1,647 @@ +import 'package:mangayomi/bridge_lib.dart'; +import 'dart:convert'; + +class ComickFun extends MProvider { + ComickFun(); + + @override + Future getPopular(MSource source, int page) async { + final url = + "${source.apiUrl}/v1.0/search?sort=follow&page=$page&tachiyomi=true"; + final data = {"url": url, "headers": getHeader(source.baseUrl)}; + final res = await http('GET', json.encode(data)); + return mangaRes(res); + } + + @override + Future getLatestUpdates(MSource source, int page) async { + final url = + "${source.apiUrl}/v1.0/search?sort=uploaded&page=$page&tachiyomi=true"; + final data = {"url": url, "headers": getHeader(source.baseUrl)}; + final res = await http('GET', json.encode(data)); + return mangaRes(res); + } + + @override + Future search( + MSource source, String query, int page, FilterList filterList) async { + final filters = filterList.filters; + String url = ""; + if (query.isNotEmpty) { + url = "${source.apiUrl}/v1.0/search?q=$query&tachiyomi=true"; + } else { + url = "${source.apiUrl}/v1.0/search"; + for (var filter in filters) { + if (filter.type == "CompletedFilter") { + if (filter.state) { + url += "${ll(url)}completed=true"; + } + } else if (filter.type == "GenreFilter") { + final included = (filter.state as List) + .where((e) => e.state == 1 ? true : false) + .toList(); + final excluded = (filter.state as List) + .where((e) => e.state == 2 ? true : false) + .toList(); + if (included.isNotEmpty) { + for (var val in included) { + url += "${ll(url)}genres=${val.value}"; + } + } + if (excluded.isNotEmpty) { + for (var val in excluded) { + url += "${ll(url)}excludes=${val.value}"; + } + } + } else if (filter.type == "DemographicFilter") { + final included = (filter.state as List) + .where((e) => e.state == 1 ? true : false) + .toList(); + if (included.isNotEmpty) { + for (var val in included) { + url += "${ll(url)}demographic=${val.value}"; + } + } + } else if (filter.type == "TypeFilter") { + final country = (filter.state as List).where((e) => e.state).toList(); + if (country.isNotEmpty) { + for (var coun in country) { + url += "${ll(url)}country=${coun.value}"; + } + } + } else if (filter.type == "SortFilter") { + url += "${ll(url)}sort=${filter.values[filter.state].value}"; + } else if (filter.type == "StatusFilter") { + url += "${ll(url)}status=${filter.values[filter.state].value}"; + } else if (filter.type == "CreatedAtFilter") { + if (filter.state > 0) { + url += "${ll(url)}time=${filter.values[filter.state].value}"; + } + } else if (filter.type == "MinimumFilter") { + if (filter.state.isNotEmpty) { + url += "${ll(url)}minimum=${filter.state}"; + } + } else if (filter.type == "FromYearFilter") { + if (filter.state.isNotEmpty) { + url += "${ll(url)}from=${filter.state}"; + } + } else if (filter.type == "ToYearFilter") { + if (filter.state.isNotEmpty) { + url += "${ll(url)}to=${filter.state}"; + } + } else if (filter.type == "TagFilter") { + if (filter.state.isNotEmpty) { + final tags = (filter.state as String).split(","); + for (var tag in tags) { + url += "${ll(url)}tags=$tag"; + } + } + } + } + url += "${ll(url)}page=$page&tachiyomi=true"; + } + final data = {"url": url, "headers": getHeader(source.baseUrl)}; + final res = await http('GET', json.encode(data)); + return mangaRes(res); + } + + @override + Future getDetail(MSource source, String url) async { + final statusList = [ + {"1": 0, "2": 1, "3": 3, "4": 2} + ]; + + final headers = getHeader(source.baseUrl); + + final urll = "${source.apiUrl}${url.replaceAll("#", '')}?tachiyomi=true"; + final data = {"url": urll, "headers": headers}; + final res = await http('GET', json.encode(data)); + MManga manga = MManga(); + manga.author = jsonPathToString(res, r'$.authors[*].name', ''); + manga.genre = jsonPathToString(res, r'$.genres[*].name', "_.").split("_."); + manga.description = jsonPathToString(res, r'$..desc', ''); + manga.status = + parseStatus(jsonPathToString(res, r'$..comic.status', ''), statusList); + final chapUrlReq = + "${source.apiUrl}${url.replaceAll("#", '')}chapters?lang=${source.lang}&tachiyomi=true&page=1"; + final dataReq = {"url": chapUrlReq, "headers": headers}; + final request = await http('GET', json.encode(dataReq)); + var total = jsonPathToString(request, r'$.total', ''); + final chapterLimit = int.parse(total); + final newChapUrlReq = + "${source.apiUrl}${url.replaceAll("#", '')}chapters?limit=$chapterLimit&lang=${source.lang}&tachiyomi=true&page=1"; + + final newDataReq = {"url": newChapUrlReq, "headers": headers}; + final newRequest = await http('GET', json.encode(newDataReq)); + + final chapsUrls = + jsonPathToString(newRequest, r'$.chapters[*].hid', "_.").split("_."); + final chapDate = + jsonPathToString(newRequest, r'$.chapters[*].created_at', "_.") + .split("_."); + final chaptersVolumes = + jsonPathToString(newRequest, r'$.chapters[*].vol', "_.").split("_."); + final chaptersScanlators = + jsonPathToString(newRequest, r'$.chapters[*].group_name', "_.") + .split("_."); + final chapsNames = + jsonPathToString(newRequest, r'$.chapters[*].title', "_.").split("_."); + final chaptersChaps = + jsonPathToString(newRequest, r'$.chapters[*].chap', "_.").split("_."); + + var dateUploads = + parseDates(chapDate, source.dateFormat, source.dateFormatLocale); + List? chaptersList = []; + for (var i = 0; i < chapsNames.length; i++) { + String title = ""; + String scanlator = ""; + if (chaptersChaps.isNotEmpty && chaptersVolumes.isNotEmpty) { + title = beautifyChapterName( + chaptersVolumes[i], chaptersChaps[i], chapsNames[i], source.lang); + } else { + title = chapsNames[i]; + } + if (chaptersScanlators.isNotEmpty) { + scanlator = chaptersScanlators[i] + .toString() + .replaceAll(']', "") + .replaceAll("[", ""); + } + MChapter chapter = MChapter(); + chapter.name = title; + chapter.url = chapsUrls[i]; + chapter.scanlator = scanlator == "null" ? "" : scanlator; + chapter.dateUpload = dateUploads[i]; + chaptersList.add(chapter); + } + manga.chapters = chaptersList; + return manga; + } + + @override + Future> getPageList(MSource source, String url) async { + final urll = "${source.apiUrl}/chapter/$url?tachiyomi=true"; + final data = {"url": urll, "headers": getHeader(url)}; + final res = await http('GET', json.encode(data)); + return jsonPathToString(res, r'$.chapter.images[*].url', '_.').split('_.'); + } + + MPages mangaRes(String res) async { + final names = jsonPathToList(res, r'$.title', 0); + List ids = jsonPathToList(res, r'$.hid', 0); + List mangaUrls = []; + for (var id in ids) { + mangaUrls.add("/comic/$id/#"); + } + final urls = mangaUrls; + final images = jsonPathToList(res, r'$.cover_url', 0); + List mangaList = []; + for (var i = 0; i < urls.length; i++) { + MManga manga = MManga(); + manga.name = names[i]; + manga.imageUrl = images[i]; + manga.link = urls[i]; + mangaList.add(manga); + } + + return MPages(mangaList, true); + } + + String ll(String url) { + if (url.contains("?")) { + return "&"; + } + return "?"; + } + + List getFilterList() { + return [ + HeaderFilter("The filter is ignored when using text search."), + GroupFilter("GenreFilter", "Genre", [ + { + "type": "TriState", + "filter": {"name": "4-Koma", "value": "4-koma"} + }, + { + "type": "TriState", + "filter": {"name": "Action", "value": "action"} + }, + { + "type": "TriState", + "filter": {"name": "Adaptation", "value": "adaptation"} + }, + { + "type": "TriState", + "filter": {"name": "Adult", "value": "adult"} + }, + { + "type": "TriState", + "filter": {"name": "Adventure", "value": "adventure"} + }, + { + "type": "TriState", + "filter": {"name": "Aliens", "value": "aliens"} + }, + { + "type": "TriState", + "filter": {"name": "Animals", "value": "animals"} + }, + { + "type": "TriState", + "filter": {"name": "Anthology", "value": "anthology"} + }, + { + "type": "TriState", + "filter": {"name": "Award Winning", "value": "award-winning"} + }, + { + "type": "TriState", + "filter": {"name": "Comedy", "value": "comedy"} + }, + { + "type": "TriState", + "filter": {"name": "Cooking", "value": "cooking"} + }, + { + "type": "TriState", + "filter": {"name": "Crime", "value": "crime"} + }, + { + "type": "TriState", + "filter": {"name": "Crossdressing", "value": "crossdressing"} + }, + { + "type": "TriState", + "filter": {"name": "Delinquents", "value": "delinquents"} + }, + { + "type": "TriState", + "filter": {"name": "Demons", "value": "demons"} + }, + { + "type": "TriState", + "filter": {"name": "Doujinshi", "value": "doujinshi"} + }, + { + "type": "TriState", + "filter": {"name": "Drama", "value": "drama"} + }, + { + "type": "TriState", + "filter": {"name": "Ecchi", "value": "ecchi"} + }, + { + "type": "TriState", + "filter": {"name": "Fan Colored", "value": "fan-colored"} + }, + { + "type": "TriState", + "filter": {"name": "Fantasy", "value": "fantasy"} + }, + { + "type": "TriState", + "filter": {"name": "Full Color", "value": "full-color"} + }, + { + "type": "TriState", + "filter": {"name": "Gender Bender", "value": "gender-bender"} + }, + { + "type": "TriState", + "filter": {"name": "Genderswap", "value": "genderswap"} + }, + { + "type": "TriState", + "filter": {"name": "Ghosts", "value": "ghosts"} + }, + { + "type": "TriState", + "filter": {"name": "Gore", "value": "gore"} + }, + { + "type": "TriState", + "filter": {"name": "Gyaru", "value": "gyaru"} + }, + { + "type": "TriState", + "filter": {"name": "Harem", "value": "harem"} + }, + { + "type": "TriState", + "filter": {"name": "Historical", "value": "historical"} + }, + { + "type": "TriState", + "filter": {"name": "Horror", "value": "horror"} + }, + { + "type": "TriState", + "filter": {"name": "Incest", "value": "incest"} + }, + { + "type": "TriState", + "filter": {"name": "Isekai", "value": "isekai"} + }, + { + "type": "TriState", + "filter": {"name": "Loli", "value": "loli"} + }, + { + "type": "TriState", + "filter": {"name": "Long Strip", "value": "long-strip"} + }, + { + "type": "TriState", + "filter": {"name": "Mafia", "value": "mafia"} + }, + { + "type": "TriState", + "filter": {"name": "Magic", "value": "magic"} + }, + { + "type": "TriState", + "filter": {"name": "Magical Girls", "value": "magical-girls"} + }, + { + "type": "TriState", + "filter": {"name": "Martial Arts", "value": "martial-arts"} + }, + { + "type": "TriState", + "filter": {"name": "Mature", "value": "mature"} + }, + { + "type": "TriState", + "filter": {"name": "Mecha", "value": "mecha"} + }, + { + "type": "TriState", + "filter": {"name": "Medical", "value": "medical"} + }, + { + "type": "TriState", + "filter": {"name": "Military", "value": "military"} + }, + { + "type": "TriState", + "filter": {"name": "Monster Girls", "value": "monster-girls"} + }, + { + "type": "TriState", + "filter": {"name": "Monsters", "value": "monsters"} + }, + { + "type": "TriState", + "filter": {"name": "Music", "value": "music"} + }, + { + "type": "TriState", + "filter": {"name": "Mystery", "value": "mystery"} + }, + { + "type": "TriState", + "filter": {"name": "Ninja", "value": "ninja"} + }, + { + "type": "TriState", + "filter": {"name": "Office Workers", "value": "office-workers"} + }, + { + "type": "TriState", + "filter": {"name": "Official Colored", "value": "official-colored"} + }, + { + "type": "TriState", + "filter": {"name": "Oneshot", "value": "oneshot"} + }, + { + "type": "TriState", + "filter": {"name": "Philosophical", "value": "philosophical"} + }, + { + "type": "TriState", + "filter": {"name": "Police", "value": "police"} + }, + { + "type": "TriState", + "filter": {"name": "Post-Apocalyptic", "value": "post-apocalyptic"} + }, + { + "type": "TriState", + "filter": {"name": "Psychological", "value": "psychological"} + }, + { + "type": "TriState", + "filter": {"name": "Reincarnation", "value": "reincarnation"} + }, + { + "type": "TriState", + "filter": {"name": "Reverse Harem", "value": "reverse-harem"} + }, + { + "type": "TriState", + "filter": {"name": "Romance", "value": "romance"} + }, + { + "type": "TriState", + "filter": {"name": "Samurai", "value": "samurai"} + }, + { + "type": "TriState", + "filter": {"name": "School Life", "value": "school-life"} + }, + { + "type": "TriState", + "filter": {"name": "Sci-Fi", "value": "sci-fi"} + }, + { + "type": "TriState", + "filter": {"name": "Sexual Violence", "value": "sexual-violence"} + }, + { + "type": "TriState", + "filter": {"name": "Shota", "value": "shota"} + }, + { + "type": "TriState", + "filter": {"name": "Shoujo Ai", "value": "shoujo-ai"} + }, + { + "type": "TriState", + "filter": {"name": "Shounen Ai", "value": "shounen-ai"} + }, + { + "type": "TriState", + "filter": {"name": "Slice of Life", "value": "slice-of-life"} + }, + { + "type": "TriState", + "filter": {"name": "Smut", "value": "smut"} + }, + { + "type": "TriState", + "filter": {"name": "Sports", "value": "sports"} + }, + { + "type": "TriState", + "filter": {"name": "Superhero", "value": "superhero"} + }, + { + "type": "TriState", + "filter": {"name": "Supernatural", "value": "supernatural"} + }, + { + "type": "TriState", + "filter": {"name": "Survival", "value": "survival"} + }, + { + "type": "TriState", + "filter": {"name": "Thriller", "value": "thriller"} + }, + { + "type": "TriState", + "filter": {"name": "Time Travel", "value": "time-travel"} + }, + { + "type": "TriState", + "filter": {"name": "Traditional Games", "value": "traditional-games"} + }, + { + "type": "TriState", + "filter": {"name": "Tragedy", "value": "tragedy"} + }, + { + "type": "TriState", + "filter": {"name": "User Created", "value": "user-created"} + }, + { + "type": "TriState", + "filter": {"name": "Vampires", "value": "vampires"} + }, + { + "type": "TriState", + "filter": {"name": "Video Games", "value": "video-games"} + }, + { + "type": "TriState", + "filter": {"name": "Villainess", "value": "villainess"} + }, + { + "type": "TriState", + "filter": {"name": "Virtual Reality", "value": "virtual-reality"} + }, + { + "type": "TriState", + "filter": {"name": "Web Comic", "value": "web-comic"} + }, + { + "type": "TriState", + "filter": {"name": "Wuxia", "value": "wuxia"} + }, + { + "type": "TriState", + "filter": {"name": "Yaoi", "value": "yaoi"} + }, + { + "type": "TriState", + "filter": {"name": "Yuri", "value": "yuri"} + }, + { + "type": "TriState", + "filter": {"name": "Zombies", "value": "zombies"} + } + ]), + GroupFilter("DemographicFilter", "Demographic", [ + TriStateFilter("Shounen", "1"), + TriStateFilter("Shoujo", "2"), + TriStateFilter("Seinen", "3"), + TriStateFilter("Josei", "4"), + ]), + GroupFilter("TypeFilter", "Type", [ + CheckBoxFilter("Manga", "jp"), + CheckBoxFilter("Manhwa", "kr"), + CheckBoxFilter("Manhua", "cn"), + ]), + SelectFilter("SortFilter", "Sort", 0, [ + SelectFilterOption("Most popular", "follow"), + SelectFilterOption("Most follows", "user_follow_count"), + SelectFilterOption("Most views", "view"), + SelectFilterOption("High rating", "rating"), + SelectFilterOption("Last updated", "uploaded"), + SelectFilterOption("Newest", "created_at"), + ]), + SelectFilter("StatusFilter", "Status", 0, [ + SelectFilterOption("All", "0"), + SelectFilterOption("Ongoing", "1"), + SelectFilterOption("Completed", "2"), + SelectFilterOption("Cancelled", "3"), + SelectFilterOption("Hiatus", "4"), + ]), + CheckBoxFilter("Completely Scanlated?", "", "CompletedFilter"), + SelectFilter("CreatedAtFilter", "Created at", 0, [ + SelectFilterOption("", ""), + SelectFilterOption("3 days", "3"), + SelectFilterOption("7 days", "7"), + SelectFilterOption("30 days", "30"), + SelectFilterOption("3 months", "90"), + SelectFilterOption("6 months", "180"), + SelectFilterOption("1 year", "365"), + ]), + TextFilter("MinimumFilter", "Minimum Chapters"), + HeaderFilter("From Year, ex: 2010"), + TextFilter("FromYearFilter", "From"), + HeaderFilter("To Year, ex: 2021"), + TextFilter("ToYearFilter", "To"), + HeaderFilter("Separate tags with commas"), + TextFilter("TagFilter", "Tags") + ]; + } + + String beautifyChapterName( + String vol, String chap, String title, String lang) { + String result = ""; + + if (vol != "null" && vol.isNotEmpty) { + if (chap != "null" && chap.isEmpty) { + result += "Volume $vol "; + } else { + result += "Vol. $vol "; + } + } + + if (chap != "null" && chap.isNotEmpty) { + if (vol != "null" && vol.isEmpty) { + if (lang != "null" && lang == "fr") { + result += "Chapitre $chap"; + } else { + result += "Chapter $chap"; + } + } else { + result += "Ch. $chap "; + } + } + + if (title != "null" && title.isNotEmpty) { + if (chap != "null" && chap.isEmpty) { + result += title; + } else { + result += " : $title"; + } + } + + return result; + } +} + +Map getHeader(String url) { + final headers = { + "Referer": "$url/", + 'User-Agent': + "Tachiyomi Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:110.0) Gecko/20100101 Firefox/110.0" + }; + return headers; +} + +ComickFun main() { + return ComickFun(); +} diff --git a/manga/src/all/comick/sources.dart b/manga/src/all/comick/sources.dart index 1ed0aa86..ad9493b7 100644 --- a/manga/src/all/comick/sources.dart +++ b/manga/src/all/comick/sources.dart @@ -1,7 +1,7 @@ import '../../../../model/source.dart'; import '../../../../utils/utils.dart'; -const comickVersion = "0.0.35"; +const comickVersion = "0.0.4"; const comickSourceCodeUrl = "https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/comick/comick-v$comickVersion.dart"; diff --git a/manga/src/all/mangadex/mangadex-v0.0.4.dart b/manga/src/all/mangadex/mangadex-v0.0.45.dart similarity index 98% rename from manga/src/all/mangadex/mangadex-v0.0.4.dart rename to manga/src/all/mangadex/mangadex-v0.0.45.dart index 06e66455..0e686ef8 100644 --- a/manga/src/all/mangadex/mangadex-v0.0.4.dart +++ b/manga/src/all/mangadex/mangadex-v0.0.45.dart @@ -35,7 +35,8 @@ class MangaDex extends MProvider { } @override - Future search(MSource source, String query, int page) async { + Future search( + MSource source, String query, int page, FilterList filterList) async { final url = "https://api.mangadex.org/manga?includes[]=cover_art&offset=0&limit=20&title=$query${getMDXContentRating()}&order[followedCount]=desc&availableTranslatedLanguage[]=${source.lang}"; diff --git a/manga/src/all/mangadex/sources.dart b/manga/src/all/mangadex/sources.dart index 4cda0fe5..917c2fec 100644 --- a/manga/src/all/mangadex/sources.dart +++ b/manga/src/all/mangadex/sources.dart @@ -4,7 +4,7 @@ import '../../../../utils/utils.dart'; const apiUrl = 'https://api.mangadex.org'; const baseUrl = 'https://mangadex.org'; const isNsfw = true; -const mangadexVersion = "0.0.4"; +const mangadexVersion = "0.0.45"; const mangadexSourceCodeUrl = "https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/mangadex/mangadex-v$mangadexVersion.dart"; String _iconUrl = getIconUrl("mangadex", "all"); diff --git a/manga/src/en/mangahere/mangahere-v0.0.35.dart b/manga/src/en/mangahere/mangahere-v0.0.4.dart similarity index 62% rename from manga/src/en/mangahere/mangahere-v0.0.35.dart rename to manga/src/en/mangahere/mangahere-v0.0.4.dart index ffcb8c17..1e31a2ac 100644 --- a/manga/src/en/mangahere/mangahere-v0.0.35.dart +++ b/manga/src/en/mangahere/mangahere-v0.0.4.dart @@ -59,10 +59,55 @@ class MangaHere extends MProvider { } @override - Future search(MSource source, String query, int page) async { + Future search( + MSource source, String query, int page, FilterList filterList) async { final headers = getHeader(source.baseUrl); - final url = "${source.baseUrl}/search?title=$query&page=$page"; + final filters = filterList.filters; + String url = "${source.baseUrl}/search"; + + for (var filter in filters) { + if (filter.type == "TypeList") { + final type = filter.values[filter.state].value; + url += "${ll(url)}type=$type"; + } else if (filter.type == "CompletionList") { + final cmp = filter.values[filter.state].value; + url += "${ll(url)}st=$cmp"; + } else if (filter.type == "RatingList") { + url += "${ll(url)}rating_method=gt"; + final rt = filter.values[filter.state].value; + url += "${ll(url)}rating=$rt"; + } else if (filter.type == "GenreList") { + final included = (filter.state as List) + .where((e) => e.state == 1 ? true : false) + .toList(); + final excluded = (filter.state as List) + .where((e) => e.state == 2 ? true : false) + .toList(); + if (included.isNotEmpty) { + url += "${ll(url)}genres="; + for (var val in included) { + url += "${val.value},"; + } + } + if (excluded.isNotEmpty) { + url += "${ll(url)}nogenres="; + for (var val in excluded) { + url += "${val.value},"; + } + } + } else if (filter.type == "ArtistFilter") { + url += "${ll(url)}artist_method=cw"; + url += "${ll(url)}artist=${Uri.encodeComponent(filter.state)}"; + } else if (filter.type == "AuthorFilter") { + url += "${ll(url)}author_method=cw"; + url += "${ll(url)}author=${Uri.encodeComponent(filter.state)}"; + } else if (filter.type == "YearFilter") { + url += "${ll(url)}released_method=cw"; + url += "${ll(url)}released=${Uri.encodeComponent(filter.state)}"; + } + } + url += "${ll(url)}title=$query&page=$page"; final data = {"url": url, "headers": headers}; final res = await http('POST', json.encode(data)); @@ -205,6 +250,83 @@ class MangaHere extends MProvider { return pageUrls; } + + String ll(String url) { + if (url.contains("?")) { + return "&"; + } + return "?"; + } + + List getFilterList() { + return [ + SelectFilter("TypeList", "Type", 1, [ + SelectFilterOption("American Manga", "5"), + SelectFilterOption("Any", "0"), + SelectFilterOption("Chinese Manhua", "3"), + SelectFilterOption("European Manga", "4"), + SelectFilterOption("Hong Kong Manga", "6"), + SelectFilterOption("Japanese Manga", "1"), + SelectFilterOption("Korean Manhwa", "2"), + SelectFilterOption("Other Manga", "7"), + ]), + TextFilter("ArtistFilter", "Artist"), + TextFilter("AuthorFilter", "Author"), + GroupFilter("GenreList", "Genres", [ + TriStateFilter("Action", "1"), + TriStateFilter("Adventure", "2"), + TriStateFilter("Comedy", "3"), + TriStateFilter("Fantasy", "4"), + TriStateFilter("Historical", "5"), + TriStateFilter("Horror", "6"), + TriStateFilter("Martial Arts", "7"), + TriStateFilter("Mystery", "8"), + TriStateFilter("Romance", "9"), + TriStateFilter("Shounen Ai", "10"), + TriStateFilter("Supernatural", "11"), + TriStateFilter("Drama", "12"), + TriStateFilter("Shounen", "13"), + TriStateFilter("School Life", "14"), + TriStateFilter("Shoujo", "15"), + TriStateFilter("Gender Bender", "16"), + TriStateFilter("Josei", "17"), + TriStateFilter("Psychological", "18"), + TriStateFilter("Seinen", "19"), + TriStateFilter("Slice of Life", "20"), + TriStateFilter("Sci-fi", "21"), + TriStateFilter("Ecchi", "22"), + TriStateFilter("Harem", "23"), + TriStateFilter("Shoujo Ai", "24"), + TriStateFilter("Yuri", "25"), + TriStateFilter("Mature", "26"), + TriStateFilter("Tragedy", "27"), + TriStateFilter("Yaoi", "28"), + TriStateFilter("Doujinshi", "29"), + TriStateFilter("Sports", "30"), + TriStateFilter("Adult", "31"), + TriStateFilter("One Shot", "32"), + TriStateFilter("Smut", "33"), + TriStateFilter("Mecha", "34"), + TriStateFilter("Shotacon", "35"), + TriStateFilter("Lolicon", "36"), + TriStateFilter("Webtoons", "37"), + ]), + SelectFilter("RatingList", "Minimum rating", 0, [ + SelectFilterOption("No Stars", "0"), + SelectFilterOption("1 Star", "1"), + SelectFilterOption("2 Stars", "2"), + SelectFilterOption("3 Stars", "3"), + SelectFilterOption("4 Stars", "4"), + SelectFilterOption("5 Stars", "5"), + ]), + TextFilter("YearFilter", "Year released"), + SelectFilter("CompletionList", "Completed series", 0, [ + SelectFilterOption("Either", "0"), + SelectFilterOption("No", "1"), + SelectFilterOption("Yes", "2"), + ]), + ]; + } } Map getHeader(String url) { diff --git a/manga/src/en/mangahere/source.dart b/manga/src/en/mangahere/source.dart index bd3a825c..ee055b5d 100644 --- a/manga/src/en/mangahere/source.dart +++ b/manga/src/en/mangahere/source.dart @@ -2,7 +2,7 @@ import '../../../../model/source.dart'; import '../../../../utils/utils.dart'; Source get mangahereSource => _mangahereSource; -const mangahereVersion = "0.0.35"; +const mangahereVersion = "0.0.4"; const mangahereSourceCodeUrl = "https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/en/mangahere/mangahere-v$mangahereVersion.dart"; Source _mangahereSource = Source( From 7b2eec076dbe7c47cb87484aaf2f29ebee6138ee Mon Sep 17 00:00:00 2001 From: kodjomoustapha <107993382+kodjodevf@users.noreply.github.com> Date: Sat, 25 Nov 2023 15:42:56 +0100 Subject: [PATCH 3/7] add filter method --- manga/src/all/mangadex/mangadex-v0.0.45.dart | 254 ++++++++++++++++++- 1 file changed, 251 insertions(+), 3 deletions(-) diff --git a/manga/src/all/mangadex/mangadex-v0.0.45.dart b/manga/src/all/mangadex/mangadex-v0.0.45.dart index 0e686ef8..172054d1 100644 --- a/manga/src/all/mangadex/mangadex-v0.0.45.dart +++ b/manga/src/all/mangadex/mangadex-v0.0.45.dart @@ -8,7 +8,7 @@ class MangaDex extends MProvider { Future getPopular(MSource source, int page) async { page = (20 * (page - 1)); final url = - "https://api.mangadex.org/manga?limit=20&offset=$page&availableTranslatedLanguage[]=en&includes[]=cover_art${getMDXContentRating()}&order[followedCount]=desc"; + "https://api.mangadex.org/manga?limit=20&offset=$page&availableTranslatedLanguage[]=${source.lang}&includes[]=cover_art${getMDXContentRating()}&order[followedCount]=desc"; final datas = {"url": url}; final res = await http('GET', json.encode(datas)); return mangaRes(res, source); @@ -37,8 +37,107 @@ class MangaDex extends MProvider { @override Future search( MSource source, String query, int page, FilterList filterList) async { - final url = - "https://api.mangadex.org/manga?includes[]=cover_art&offset=0&limit=20&title=$query${getMDXContentRating()}&order[followedCount]=desc&availableTranslatedLanguage[]=${source.lang}"; + page = (20 * (page - 1)); + final filters = filterList.filters; + String url = ""; + + url = + "https://api.mangadex.org/manga?includes[]=cover_art&offset=$page&limit=20&title=$query"; + for (var filter in filters) { + if (filter.type == "HasAvailableChaptersFilter") { + if (filter.state) { + url += "${ll(url)}hasAvailableChapters=true"; + url += "${ll(url)}availableTranslatedLanguage[]=${source.lang}"; + } + } else if (filter.type == "OriginalLanguageList") { + final langs = (filter.state as List).where((e) => e.state).toList(); + if (langs.isNotEmpty) { + for (var ln in langs) { + url += "${ll(url)}${ln.value}"; + } + } + } else if (filter.type == "ContentRatingList") { + final langs = (filter.state as List).where((e) => e.state).toList(); + if (langs.isNotEmpty) { + for (var ln in langs) { + url += "${ll(url)}${ln.value}"; + } + } + } else if (filter.type == "DemographicList") { + final langs = (filter.state as List).where((e) => e.state).toList(); + if (langs.isNotEmpty) { + for (var ln in langs) { + url += "${ll(url)}${ln.value}"; + } + } + } else if (filter.type == "StatusList") { + final langs = (filter.state as List).where((e) => e.state).toList(); + if (langs.isNotEmpty) { + for (var ln in langs) { + url += "${ll(url)}${ln.value}"; + } + } + } else if (filter.type == "SortFilter") { + final value = filter.state.ascending ? "asc" : "desc"; + url += + "${ll(url)}order[${filter.values[filter.state.index].value}]=$value"; + } else if (filter.type == "TagsFilter") { + for (var tag in filter.state) { + url += "${ll(url)}${tag.values[tag.state].value}"; + } + } else if (filter.type == "FormatFilter") { + final included = (filter.state as List) + .where((e) => e.state == 1 ? true : false) + .toList(); + final excluded = (filter.state as List) + .where((e) => e.state == 2 ? true : false) + .toList(); + if (included.isNotEmpty) { + for (var val in included) { + url += "${ll(url)}includedTags[]=${val.value}"; + } + } + if (excluded.isNotEmpty) { + for (var val in excluded) { + url += "${ll(url)}excludedTags[]=${val.value}"; + } + } + } else if (filter.type == "GenreFilter") { + final included = (filter.state as List) + .where((e) => e.state == 1 ? true : false) + .toList(); + final excluded = (filter.state as List) + .where((e) => e.state == 2 ? true : false) + .toList(); + if (included.isNotEmpty) { + for (var val in included) { + url += "${ll(url)}includedTags[]=${val.value}"; + } + } + if (excluded.isNotEmpty) { + for (var val in excluded) { + url += "${ll(url)}excludedTags[]=${val.value}"; + } + } + } else if (filter.type == "ThemeFilter") { + final included = (filter.state as List) + .where((e) => e.state == 1 ? true : false) + .toList(); + final excluded = (filter.state as List) + .where((e) => e.state == 2 ? true : false) + .toList(); + if (included.isNotEmpty) { + for (var val in included) { + url += "${ll(url)}includedTags[]=${val.value}"; + } + } + if (excluded.isNotEmpty) { + for (var val in excluded) { + url += "${ll(url)}excludedTags[]=${val.value}"; + } + } + } + } final res = await http('GET', json.encode({"url": url})); return mangaRes(res, source); @@ -267,6 +366,155 @@ class MangaDex extends MProvider { } return coverFileName; } + + List getFilterList() { + return [ + CheckBoxFilter( + "Has available chapters", "", "HasAvailableChaptersFilter"), + GroupFilter("OriginalLanguageList", "Original language", [ + CheckBoxFilter("Japanese (Manga)", "originalLanguage[]=ja"), + CheckBoxFilter("Chinese (Manhua)", + "originalLanguage[]=zh&originalLanguage[]=zh-hk"), + CheckBoxFilter("Korean (Manhwa)", "originalLanguage[]=ko"), + ]), + 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"), + CheckBoxFilter("Shounen", "publicationDemographic[]=shounen"), + CheckBoxFilter("Shoujo", "publicationDemographic[]=shoujo"), + CheckBoxFilter("Seinen", "publicationDemographic[]=seinen"), + CheckBoxFilter("Josei", "publicationDemographic[]=josei"), + ]), + GroupFilter("StatusList", "Status", [ + CheckBoxFilter("Ongoing", "status[]=ongoing"), + CheckBoxFilter("Completed", "status[]=completed"), + CheckBoxFilter("Hiatus", "status[]=hiatus"), + CheckBoxFilter("Cancelled", "status[]=cancelled"), + ]), + SortFilter("SortFilter", "Sort", SortState(5, false), [ + SelectFilterOption("Alphabetic", "title"), + SelectFilterOption("Chapter uploded at", "latestUploadedChapter"), + SelectFilterOption("Number of follows", "followedCount"), + SelectFilterOption("Content created at", "createdAt"), + SelectFilterOption("Content info updated at", "updatedAt"), + SelectFilterOption("Relevance", "relevance"), + SelectFilterOption("Year", "year"), + SelectFilterOption("Rating", "rating"), + ]), + GroupFilter("TagsFilter", "Tags mode", [ + SelectFilter("TagInclusionMode", "Included tags mode", 0, [ + SelectFilterOption("AND", "includedTagsMode=AND"), + SelectFilterOption("OR", "includedTagsMode=OR"), + ]), + SelectFilter("TagExclusionMode", "Excluded tags mode", 1, [ + SelectFilterOption("AND", "excludedTagsMode=AND"), + SelectFilterOption("OR", "excludedTagsMode=OR"), + ]), + ]), + GroupFilter("ContentsFilter", "Content", [ + TriStateFilter("Gore", "b29d6a3d-1569-4e7a-8caf-7557bc92cd5d"), + TriStateFilter( + "Sexual Violence", "97893a4c-12af-4dac-b6be-0dffb353568e"), + ]), + GroupFilter("FormatFilter", "Format", [ + TriStateFilter("4-Koma", "b11fda93-8f1d-4bef-b2ed-8803d3733170"), + TriStateFilter("Adaptation", "f4122d1c-3b44-44d0-9936-ff7502c39ad3"), + TriStateFilter("Anthology", "51d83883-4103-437c-b4b1-731cb73d786c"), + TriStateFilter("Award Winning", "0a39b5a1-b235-4886-a747-1d05d216532d"), + TriStateFilter("Doujinshi", "b13b2a48-c720-44a9-9c77-39c9979373fb"), + TriStateFilter("Fan Colored", "7b2ce280-79ef-4c09-9b58-12b7c23a9b78"), + TriStateFilter("Full Color", "f5ba408b-0e7a-484d-8d49-4e9125ac96de"), + TriStateFilter("Long Strip", "3e2b8dae-350e-4ab8-a8ce-016e844b9f0d"), + TriStateFilter( + "Official Colored", "320831a8-4026-470b-94f6-8353740e6f04"), + TriStateFilter("Oneshot", "0234a31e-a729-4e28-9d6a-3f87c4966b9e"), + TriStateFilter("User Created", "891cf039-b895-47f0-9229-bef4c96eccd4"), + TriStateFilter("Web Comic", "e197df38-d0e7-43b5-9b09-2842d0c326dd"), + ]), + GroupFilter("GenreFilter", "Genre", [ + TriStateFilter("Action", "391b0423-d847-456f-aff0-8b0cfc03066b"), + TriStateFilter("Adventure", "87cc87cd-a395-47af-b27a-93258283bbc6"), + TriStateFilter("Boys' Love", "5920b825-4181-4a17-beeb-9918b0ff7a30"), + TriStateFilter("Comedy", "4d32cc48-9f00-4cca-9b5a-a839f0764984"), + TriStateFilter("Crime", "5ca48985-9a9d-4bd8-be29-80dc0303db72"), + TriStateFilter("Drama", "b9af3a63-f058-46de-a9a0-e0c13906197a"), + TriStateFilter("Fantasy", "cdc58593-87dd-415e-bbc0-2ec27bf404cc"), + TriStateFilter("Girls' Love", "a3c67850-4684-404e-9b7f-c69850ee5da6"), + TriStateFilter("Historical", "33771934-028e-4cb3-8744-691e866a923e"), + TriStateFilter("Horror", "cdad7e68-1419-41dd-bdce-27753074a640"), + TriStateFilter("Isekai", "ace04997-f6bd-436e-b261-779182193d3d"), + TriStateFilter("Magical Girls", "81c836c9-914a-4eca-981a-560dad663e73"), + TriStateFilter("Mecha", "50880a9d-5440-4732-9afb-8f457127e836"), + TriStateFilter("Medical", "c8cbe35b-1b2b-4a3f-9c37-db84c4514856"), + TriStateFilter("Mystery", "ee968100-4191-4968-93d3-f82d72be7e46"), + TriStateFilter("Philosophical", "b1e97889-25b4-4258-b28b-cd7f4d28ea9b"), + TriStateFilter("Psychological", "3b60b75c-a2d7-4860-ab56-05f391bb889c"), + TriStateFilter("Romance", "423e2eae-a7a2-4a8b-ac03-a8351462d71d"), + TriStateFilter("Sci-Fi", "256c8bd9-4904-4360-bf4f-508a76d67183"), + TriStateFilter("Slice of Life", "e5301a23-ebd9-49dd-a0cb-2add944c7fe9"), + TriStateFilter("Sports", "69964a64-2f90-4d33-beeb-f3ed2875eb4c"), + TriStateFilter("Superhero", "7064a261-a137-4d3a-8848-2d385de3a99c"), + TriStateFilter("Thriller", "07251805-a27e-4d59-b488-f0bfbec15168"), + TriStateFilter("Tragedy", "f8f62932-27da-4fe4-8ee1-6779a8c5edba"), + TriStateFilter("Wuxia", "acc803a4-c95a-4c22-86fc-eb6b582d82a2"), + ]), + GroupFilter("ThemeFilter", "Theme", [ + TriStateFilter("Aliens", "e64f6742-c834-471d-8d72-dd51fc02b835"), + TriStateFilter("Animals", "3de8c75d-8ee3-48ff-98ee-e20a65c86451"), + TriStateFilter("Cooking", "ea2bc92d-1c26-4930-9b7c-d5c0dc1b6869"), + TriStateFilter("Crossdressing", "9ab53f92-3eed-4e9b-903a-917c86035ee3"), + TriStateFilter("Delinquents", "da2d50ca-3018-4cc0-ac7a-6b7d472a29ea"), + TriStateFilter("Demons", "39730448-9a5f-48a2-85b0-a70db87b1233"), + TriStateFilter("Genderswap", "2bd2e8d0-f146-434a-9b51-fc9ff2c5fe6a"), + TriStateFilter("Ghosts", "3bb26d85-09d5-4d2e-880c-c34b974339e9"), + TriStateFilter("Gyaru", "fad12b5e-68ba-460e-b933-9ae8318f5b65"), + TriStateFilter("Harem", "aafb99c1-7f60-43fa-b75f-fc9502ce29c7"), + TriStateFilter("Incest", "5bd0e105-4481-44ca-b6e7-7544da56b1a3"), + TriStateFilter("Loli", "2d1f5d56-a1e5-4d0d-a961-2193588b08ec"), + TriStateFilter("Mafia", "85daba54-a71c-4554-8a28-9901a8b0afad"), + TriStateFilter("Magic", "a1f53773-c69a-4ce5-8cab-fffcd90b1565"), + TriStateFilter("Martial Arts", "799c202e-7daa-44eb-9cf7-8a3c0441531e"), + TriStateFilter("Military", "ac72833b-c4e9-4878-b9db-6c8a4a99444a"), + TriStateFilter("Monster Girls", "dd1f77c5-dea9-4e2b-97ae-224af09caf99"), + TriStateFilter("Monsters", "36fd93ea-e8b8-445e-b836-358f02b3d33d"), + TriStateFilter("Music", "f42fbf9e-188a-447b-9fdc-f19dc1e4d685"), + TriStateFilter("Ninja", "489dd859-9b61-4c37-af75-5b18e88daafc"), + TriStateFilter( + "Office Workers", "92d6d951-ca5e-429c-ac78-451071cbf064"), + TriStateFilter("Police", "df33b754-73a3-4c54-80e6-1a74a8058539"), + TriStateFilter( + "Post-Apocalyptic", "9467335a-1b83-4497-9231-765337a00b96"), + TriStateFilter("Reincarnation", "0bc90acb-ccc1-44ca-a34a-b9f3a73259d0"), + TriStateFilter("Reverse Harem", "65761a2a-415e-47f3-bef2-a9dababba7a6"), + TriStateFilter("Samurai", "81183756-1453-4c81-aa9e-f6e1b63be016"), + TriStateFilter("School Life", "caaa44eb-cd40-4177-b930-79d3ef2afe87"), + TriStateFilter("Shota", "ddefd648-5140-4e5f-ba18-4eca4071d19b"), + TriStateFilter("Supernatural", "eabc5b4c-6aff-42f3-b657-3e90cbd00b75"), + TriStateFilter("Survival", "5fff9cde-849c-4d78-aab0-0d52b2ee1d25"), + TriStateFilter("Time Travel", "292e862b-2d17-4062-90a2-0356caa4ae27"), + TriStateFilter( + "Traditional Games", "31932a7e-5b8e-49a6-9f12-2afa39dc544c"), + TriStateFilter("Vampires", "d7d1730f-6eb0-4ba6-9437-602cac38664c"), + TriStateFilter("Video Games", "9438db5a-7e2a-4ac0-b39e-e0d95a34b8a8"), + TriStateFilter("Villainess", "d14322ac-4d6f-4e9b-afd9-629d5f4d8a41"), + TriStateFilter( + "Virtual Reality", "8c86611e-fab7-4986-9dec-d1a2f44acdd5"), + TriStateFilter("Zombies", "631ef465-9aba-4afb-b0fc-ea10efe274a8"), + ]), + ]; + } + + String ll(String url) { + if (url.contains("?")) { + return "&"; + } + return "?"; + } } MangaDex main() { From 2789016420cc30c5d85c3dc285d933480b99cad8 Mon Sep 17 00:00:00 2001 From: kodjomoustapha <107993382+kodjodevf@users.noreply.github.com> Date: Sat, 25 Nov 2023 18:22:10 +0100 Subject: [PATCH 4/7] add filter method --- ...ancms-v0.0.35.dart => heancms-v0.0.4.dart} | 3 +- manga/multisrc/heancms/sources.dart | 2 +- manga/multisrc/nepnep/nepnep-v0.0.35.dart | 225 ---------- manga/multisrc/nepnep/nepnep-v0.0.4.dart | 411 ++++++++++++++++++ manga/multisrc/nepnep/sources.dart | 2 +- manga/src/all/mangadex/mangadex-v0.0.45.dart | 28 +- 6 files changed, 429 insertions(+), 242 deletions(-) rename manga/multisrc/heancms/{heancms-v0.0.35.dart => heancms-v0.0.4.dart} (98%) delete mode 100644 manga/multisrc/nepnep/nepnep-v0.0.35.dart create mode 100644 manga/multisrc/nepnep/nepnep-v0.0.4.dart diff --git a/manga/multisrc/heancms/heancms-v0.0.35.dart b/manga/multisrc/heancms/heancms-v0.0.4.dart similarity index 98% rename from manga/multisrc/heancms/heancms-v0.0.35.dart rename to manga/multisrc/heancms/heancms-v0.0.4.dart index bd5440fe..a1458467 100644 --- a/manga/multisrc/heancms/heancms-v0.0.35.dart +++ b/manga/multisrc/heancms/heancms-v0.0.4.dart @@ -56,7 +56,8 @@ class HeanCms extends MProvider { } @override - Future search(MSource source, String query, int page) async { + Future search( + MSource source, String query, int page, FilterList filterList) async { final headers = getHeader(source.baseUrl); String res = ""; if (!useNewQueryEndpoint(source.source)) { diff --git a/manga/multisrc/heancms/sources.dart b/manga/multisrc/heancms/sources.dart index 4122aaa9..8389f880 100644 --- a/manga/multisrc/heancms/sources.dart +++ b/manga/multisrc/heancms/sources.dart @@ -1,7 +1,7 @@ import '../../../model/source.dart'; import '../../../utils/utils.dart'; -const heancmsVersion = "0.0.35"; +const heancmsVersion = "0.0.4"; const heancmsSourceCodeUrl = "https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/multisrc/heancms/heancms-v$heancmsVersion.dart"; const defaultDateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSZZZZZ"; diff --git a/manga/multisrc/nepnep/nepnep-v0.0.35.dart b/manga/multisrc/nepnep/nepnep-v0.0.35.dart deleted file mode 100644 index f27dd77c..00000000 --- a/manga/multisrc/nepnep/nepnep-v0.0.35.dart +++ /dev/null @@ -1,225 +0,0 @@ -import 'package:mangayomi/bridge_lib.dart'; -import 'dart:convert'; - -class NepNep extends MProvider { - NepNep(); - - @override - Future getPopular(MSource source, int page) async { - final data = {"url": "${source.baseUrl}/search/"}; - final res = await http('GET', json.encode(data)); - - final directory = directoryFromDocument(res); - final resSort = sortMapList(json.decode(directory), "vm", 1); - - return parseDirectory(resSort); - } - - @override - Future getLatestUpdates(MSource source, int page) async { - final data = {"url": "${source.baseUrl}/search/"}; - final res = await http('GET', json.encode(data)); - - final directory = directoryFromDocument(res); - final resSort = sortMapList(json.decode(directory), "lt", 1); - - return parseDirectory(resSort); - } - - @override - Future search(MSource source, String query, int page) async { - final data = {"url": "${source.baseUrl}/search/"}; - final res = await http('GET', json.encode(data)); - - final directory = directoryFromDocument(res); - final resSort = sortMapList(json.decode(directory), "lt", 1); - final datas = json.decode(resSort) as List; - final queryRes = datas.where((e) { - String name = getMapValue(json.encode(e), 's'); - return name.toLowerCase().contains(query.toLowerCase()); - }).toList(); - - return parseDirectory(json.encode(queryRes)); - } - - @override - Future getDetail(MSource source, String url) async { - final statusList = [ - {"Ongoing": 0, "Completed": 1, "Cancelled": 3, "Hiatus": 2} - ]; - final headers = getHeader(source.baseUrl); - final data = {"url": '${source.baseUrl}/manga/$url', "headers": headers}; - final res = await http('GET', json.encode(data)); - MManga manga = MManga(); - manga.author = xpath(res, - '//li[contains(@class,"list-group-item") and contains(text(),"Author")]/a/text()') - .first; - manga.description = xpath(res, - '//li[contains(@class,"list-group-item") and contains(text(),"Description:")]/div/text()') - .first; - final status = xpath(res, - '//li[contains(@class,"list-group-item") and contains(text(),"Status")]/a/text()') - .first; - - manga.status = parseStatus(toStatus(status), statusList); - manga.genre = xpath(res, - '//li[contains(@class,"list-group-item") and contains(text(),"Genre(s)")]/a/text()'); - - final script = - xpath(res, '//script[contains(text(), "MainFunction")]/text()').first; - final vmChapters = - substringBefore(substringAfter(script, "vm.Chapters = "), ";"); - final chapters = json.decode(vmChapters) as List; - - List chaptersList = []; - - for (var ch in chapters) { - final c = json.encode(ch); - MChapter chapter = MChapter(); - String name = getMapValue(c, 'ChapterName'); - String indexChapter = getMapValue(c, 'Chapter'); - if (name.isEmpty) { - name = '${getMapValue(c, 'Type')} ${chapterImage(indexChapter, true)}'; - } - chapter.name = name == "null" ? "" : name; - chapter.url = - '/read-online/${substringAfter(url, "/manga/")}${chapterURLEncode(getMapValue(c, 'Chapter'))}'; - chapter.dateUpload = parseDates([getMapValue(c, 'Date')], - source.dateFormat, source.dateFormatLocale) - .first; - chaptersList.add(chapter); - } - manga.chapters = chaptersList; - return manga; - } - - @override - Future> getPageList(MSource source, String url) async { - final headers = getHeader(source.baseUrl); - List pages = []; - final data = {"url": '${source.baseUrl}$url', "headers": headers}; - print(data); - final res = await http('GET', json.encode(data)); - final script = - xpath(res, '//script[contains(text(), "MainFunction")]/text()').first; - final chapScript = - substringBefore(substringAfter(script, "vm.CurChapter = "), ";"); - final pathName = substringBefore( - substringAfter(script, "vm.CurPathName = \"", ""), "\""); - var directory = getMapValue(chapScript, 'Directory') == 'null' - ? '' - : getMapValue(chapScript, 'Directory'); - if (directory.length > 0) { - directory += '/'; - } - final mangaName = - substringBefore(substringAfter(url, "/read-online/"), "-chapter"); - var chNum = chapterImage(getMapValue(chapScript, 'Chapter'), false); - var totalPages = int.parse(getMapValue(chapScript, 'Page')); - for (int page = 1; page <= totalPages; page++) { - String paddedPageNumber = "$page".padLeft(3, '0'); - String pageUrl = - 'https://$pathName/manga/$mangaName/$directory$chNum-$paddedPageNumber.png'; - - pages.add(pageUrl); - } - return pages; - } - - String directoryFromDocument(String res) { - final script = - xpath(res, '//script[contains(text(), "MainFunction")]/text()').first; - return substringBefore( - substringAfter(script, "vm.Directory = "), "vm.GetIntValue") - .replaceAll(";", " "); - } - - MPages parseDirectory(String res) { - List mangaList = []; - final datas = json.decode(res) as List; - for (var data in datas) { - final d = json.encode(data); - MManga manga = MManga(); - manga.name = getMapValue(d, "s"); - manga.imageUrl = - 'https://temp.compsci88.com/cover/${getMapValue(d, "i")}.jpg'; - manga.link = getMapValue(d, "i"); - mangaList.add(manga); - } - return MPages(mangaList, true); - } - - String chapterImage(String e, bool cleanString) { - var a = e.substring(1, e.length - 1); - if (cleanString) { - a = regExp(a, r'^0+', "", 0, 0); - } - - var b = int.parse(e.substring(e.length - 1)); - - if (b == 0 && a.isNotEmpty) { - return a; - } else if (b == 0 && a.isEmpty) { - return '0'; - } else { - return '$a.$b'; - } - } - - String toStatus(String status) { - if (status.contains("Ongoing")) { - return "Ongoing"; - } else if (status.contains("Complete")) { - return "Complete"; - } else if (status.contains("Cancelled")) { - return "Cancelled"; - } else if (status.contains("Hiatus")) { - return "Hiatus"; - } - return ""; - } - - String chapterURLEncode(String e) { - var index = ''.toString(); - var t = int.parse(e.substring(0, 1)); - - if (t != 1) { - index = '-index-$t'; - } - - var dgt = 0; - var inta = int.parse(e); - if (inta < 100100) { - dgt = 4; - } else if (inta < 101000) { - dgt = 3; - } else if (inta < 110000) { - dgt = 2; - } else { - dgt = 1; - } - - final n = e.substring(dgt, e.length - 1); - var suffix = ''.toString(); - final path = int.parse(e.substring(e.length - 1)); - - if (path != 0) { - suffix = '.$path'; - } - - return '-chapter-$n$suffix$index.html'; - } -} - -Map getHeader(String url) { - final headers = { - 'Referer': '$url/', - "User-Agent": - "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:71.0) Gecko/20100101 Firefox/77.0" - }; - return headers; -} - -NepNep main() { - return NepNep(); -} diff --git a/manga/multisrc/nepnep/nepnep-v0.0.4.dart b/manga/multisrc/nepnep/nepnep-v0.0.4.dart new file mode 100644 index 00000000..4e203c1b --- /dev/null +++ b/manga/multisrc/nepnep/nepnep-v0.0.4.dart @@ -0,0 +1,411 @@ +import 'package:mangayomi/bridge_lib.dart'; +import 'dart:convert'; + +class NepNep extends MProvider { + NepNep(); + + @override + Future getPopular(MSource source, int page) async { + final data = {"url": "${source.baseUrl}/search/"}; + final res = await http('GET', json.encode(data)); + + final directory = directoryFromDocument(res); + final resSort = sortMapList(json.decode(directory), "vm", 1); + + return parseDirectory(resSort); + } + + @override + Future getLatestUpdates(MSource source, int page) async { + final data = {"url": "${source.baseUrl}/search/"}; + final res = await http('GET', json.encode(data)); + + final directory = directoryFromDocument(res); + final resSort = sortMapList(json.decode(directory), "lt", 1); + + return parseDirectory(resSort); + } + + @override + Future search( + MSource source, String query, int page, FilterList filterList) async { + final filters = filterList.filters; + List queryRes = []; + final data = {"url": "${source.baseUrl}/search/"}; + final res = await http('GET', json.encode(data)); + + final directory = directoryFromDocument(res); + final resSort = sortMapList(json.decode(directory), "lt", 1); + final datas = json.decode(resSort) as List; + queryRes = datas.where((e) { + String name = getMapValue(json.encode(e), 's'); + return name.toLowerCase().contains(query.toLowerCase()); + }).toList(); + + for (var filter in filters) { + if (filter.type == "SortFilter") { + final ascending = filter.state.ascending; + String sortBy = "s"; + if (filter.state.index == 1) { + sortBy = "v"; + } + if (filter.state.index == 2) { + sortBy = "ls"; + } + queryRes = json.decode(sortMapList(queryRes, sortBy, 1)) as List; + if (ascending) { + queryRes = queryRes.reversed.toList(); + } + } + if (filter.type == "ScanStatusFilter") { + if (filter.state != 0) { + queryRes = queryRes.where((e) { + final name = getMapValue(json.encode(e), 'ss'); + return name.toLowerCase().contains( + (filter.values[filter.state].value as String).toLowerCase()); + }).toList(); + } + } else if (filter.type == "PublishStatusFilter") { + if (filter.state != 0) { + queryRes = queryRes.where((e) { + final name = getMapValue(json.encode(e), 'ps'); + return name.toLowerCase().contains( + (filter.values[filter.state].value as String).toLowerCase()); + }).toList(); + } + } else if (filter.type == "TypeFilter") { + if (filter.state != 0) { + queryRes = queryRes.where((e) { + final name = getMapValue(json.encode(e), 't'); + return name.toLowerCase().contains( + (filter.values[filter.state].value as String).toLowerCase()); + }).toList(); + } + } else if (filter.type == "TranslationFilter") { + if (filter.state != 0) { + queryRes = queryRes.where((e) { + final name = getMapValue(json.encode(e), 'o'); + return name.toLowerCase().contains("yes"); + }).toList(); + } + } else if (filter.type == "YearFilter") { + if (filter.state.isNotEmpty) { + queryRes = queryRes.where((e) { + final name = getMapValue(json.encode(e), 'y'); + return name + .toLowerCase() + .contains((filter.name as String).toLowerCase()); + }).toList(); + } + } else if (filter.type == "AuthorFilter") { + if (filter.state.isNotEmpty) { + queryRes = queryRes.where((e) { + final name = getMapValue(json.encode(e), 'a'); + return name + .toLowerCase() + .contains((filter.name as String).toLowerCase()); + }).toList(); + } + } else if (filter.type == "GenresFilter") { + final included = (filter.state as List) + .where((e) => e.state == 1 ? true : false) + .toList(); + final excluded = (filter.state as List) + .where((e) => e.state == 2 ? true : false) + .toList(); + if (included.isNotEmpty) { + for (var val in included) { + queryRes = queryRes.where((e) { + final name = getMapValue(json.encode(e), 'g'); + return name + .toLowerCase() + .contains((val.value as String).toLowerCase()); + }).toList(); + } + } + if (excluded.isNotEmpty) { + for (var val in excluded) { + queryRes = queryRes.where((e) { + final name = getMapValue(json.encode(e), 'g'); + return !(name + .toLowerCase() + .contains((val.value as String).toLowerCase())); + }).toList(); + } + } + } + } + + return parseDirectory(json.encode(queryRes)); + } + + @override + Future getDetail(MSource source, String url) async { + final statusList = [ + {"Ongoing": 0, "Completed": 1, "Cancelled": 3, "Hiatus": 2} + ]; + final headers = getHeader(source.baseUrl); + final data = {"url": '${source.baseUrl}/manga/$url', "headers": headers}; + final res = await http('GET', json.encode(data)); + MManga manga = MManga(); + manga.author = xpath(res, + '//li[contains(@class,"list-group-item") and contains(text(),"Author")]/a/text()') + .first; + manga.description = xpath(res, + '//li[contains(@class,"list-group-item") and contains(text(),"Description:")]/div/text()') + .first; + final status = xpath(res, + '//li[contains(@class,"list-group-item") and contains(text(),"Status")]/a/text()') + .first; + + manga.status = parseStatus(toStatus(status), statusList); + manga.genre = xpath(res, + '//li[contains(@class,"list-group-item") and contains(text(),"Genre(s)")]/a/text()'); + + final script = + xpath(res, '//script[contains(text(), "MainFunction")]/text()').first; + final vmChapters = + substringBefore(substringAfter(script, "vm.Chapters = "), ";"); + final chapters = json.decode(vmChapters) as List; + + List chaptersList = []; + + for (var ch in chapters) { + final c = json.encode(ch); + MChapter chapter = MChapter(); + String name = getMapValue(c, 'ChapterName'); + String indexChapter = getMapValue(c, 'Chapter'); + if (name.isEmpty) { + name = '${getMapValue(c, 'Type')} ${chapterImage(indexChapter, true)}'; + } + chapter.name = name == "null" ? "" : name; + chapter.url = + '/read-online/${substringAfter(url, "/manga/")}${chapterURLEncode(getMapValue(c, 'Chapter'))}'; + chapter.dateUpload = parseDates([getMapValue(c, 'Date')], + source.dateFormat, source.dateFormatLocale) + .first; + chaptersList.add(chapter); + } + manga.chapters = chaptersList; + return manga; + } + + @override + Future> getPageList(MSource source, String url) async { + final headers = getHeader(source.baseUrl); + List pages = []; + final data = {"url": '${source.baseUrl}$url', "headers": headers}; + print(data); + final res = await http('GET', json.encode(data)); + final script = + xpath(res, '//script[contains(text(), "MainFunction")]/text()').first; + final chapScript = + substringBefore(substringAfter(script, "vm.CurChapter = "), ";"); + final pathName = substringBefore( + substringAfter(script, "vm.CurPathName = \"", ""), "\""); + var directory = getMapValue(chapScript, 'Directory') == 'null' + ? '' + : getMapValue(chapScript, 'Directory'); + if (directory.length > 0) { + directory += '/'; + } + final mangaName = + substringBefore(substringAfter(url, "/read-online/"), "-chapter"); + var chNum = chapterImage(getMapValue(chapScript, 'Chapter'), false); + var totalPages = int.parse(getMapValue(chapScript, 'Page')); + for (int page = 1; page <= totalPages; page++) { + String paddedPageNumber = "$page".padLeft(3, '0'); + String pageUrl = + 'https://$pathName/manga/$mangaName/$directory$chNum-$paddedPageNumber.png'; + + pages.add(pageUrl); + } + return pages; + } + + String directoryFromDocument(String res) { + final script = + xpath(res, '//script[contains(text(), "MainFunction")]/text()').first; + return substringBefore( + substringAfter(script, "vm.Directory = "), "vm.GetIntValue") + .replaceAll(";", " "); + } + + MPages parseDirectory(String res) { + List mangaList = []; + final datas = json.decode(res) as List; + for (var data in datas) { + final d = json.encode(data); + MManga manga = MManga(); + manga.name = getMapValue(d, "s"); + manga.imageUrl = + 'https://temp.compsci88.com/cover/${getMapValue(d, "i")}.jpg'; + manga.link = getMapValue(d, "i"); + mangaList.add(manga); + } + return MPages(mangaList, true); + } + + String chapterImage(String e, bool cleanString) { + var a = e.substring(1, e.length - 1); + if (cleanString) { + a = regExp(a, r'^0+', "", 0, 0); + } + + var b = int.parse(e.substring(e.length - 1)); + + if (b == 0 && a.isNotEmpty) { + return a; + } else if (b == 0 && a.isEmpty) { + return '0'; + } else { + return '$a.$b'; + } + } + + String toStatus(String status) { + if (status.contains("Ongoing")) { + return "Ongoing"; + } else if (status.contains("Complete")) { + return "Complete"; + } else if (status.contains("Cancelled")) { + return "Cancelled"; + } else if (status.contains("Hiatus")) { + return "Hiatus"; + } + return ""; + } + + String chapterURLEncode(String e) { + var index = ''.toString(); + var t = int.parse(e.substring(0, 1)); + + if (t != 1) { + index = '-index-$t'; + } + + var dgt = 0; + var inta = int.parse(e); + if (inta < 100100) { + dgt = 4; + } else if (inta < 101000) { + dgt = 3; + } else if (inta < 110000) { + dgt = 2; + } else { + dgt = 1; + } + + final n = e.substring(dgt, e.length - 1); + var suffix = ''.toString(); + final path = int.parse(e.substring(e.length - 1)); + + if (path != 0) { + suffix = '.$path'; + } + + return '-chapter-$n$suffix$index.html'; + } + + List getFilterList() { + return [ + TextFilter("YearFilter", "Years"), + TextFilter("AuthorFilter", "Author"), + SelectFilter("ScanStatusFilter", "Scan Status", 0, [ + SelectFilterOption("Any", "Any"), + SelectFilterOption("Complete", "Complete"), + SelectFilterOption("Discontinued", "Discontinued"), + SelectFilterOption("Hiatus", "Hiatus"), + SelectFilterOption("Incomplete", "Incomplete"), + SelectFilterOption("Ongoing", "Ongoing"), + ]), + SelectFilter("PublishStatusFilter", "Publish Status", 0, [ + SelectFilterOption("Any", "Any"), + SelectFilterOption("Cancelled", "Cancelled"), + SelectFilterOption("Complete", "Complete"), + SelectFilterOption("Discontinued", "Discontinued"), + SelectFilterOption("Hiatus", "Hiatus"), + SelectFilterOption("Incomplete", "Incomplete"), + SelectFilterOption("Ongoing", "Ongoing"), + SelectFilterOption("Unfinished", "Unfinished"), + ]), + SelectFilter("TypeFilter", "Type", 0, [ + SelectFilterOption("Any", "Any"), + SelectFilterOption("Doujinshi", "Doujinshi"), + SelectFilterOption("Manga", "Manga"), + SelectFilterOption("Manhua", "Manhua"), + SelectFilterOption("Manhwa", "Manhwa"), + SelectFilterOption("OEL", "OEL"), + SelectFilterOption("One-shot", "One-shot"), + ]), + SelectFilter("TranslationFilter", "Translation", 0, [ + SelectFilterOption("Any", "Any"), + SelectFilterOption("Official Only", "Official Only"), + ]), + SortFilter("SortFilter", "Sort", SortState(2, false), [ + SelectFilterOption("Alphabetically", "Alphabetically"), + SelectFilterOption("Date updated", "Date updated"), + SelectFilterOption("Popularity", "Popularity"), + ]), + GroupFilter("GenresFilter", "Genres", [ + TriStateFilter("Action", ""), + TriStateFilter("Adult", ""), + TriStateFilter("Adventure", ""), + TriStateFilter("Comedy", ""), + TriStateFilter("Doujinshi", ""), + TriStateFilter("Drama", ""), + TriStateFilter("Ecchi", ""), + TriStateFilter("Fantasy", ""), + TriStateFilter("Gender Bender", ""), + TriStateFilter("Harem", ""), + TriStateFilter("Hentai", ""), + TriStateFilter("Historical", ""), + TriStateFilter("Horror", ""), + TriStateFilter("Isekai", ""), + TriStateFilter("Josei", ""), + TriStateFilter("Lolicon", ""), + TriStateFilter("Martial Arts", ""), + TriStateFilter("Mature", ""), + TriStateFilter("Mecha", ""), + TriStateFilter("Mystery", ""), + TriStateFilter("Psychological", ""), + TriStateFilter("Romance", ""), + TriStateFilter("School Life", ""), + TriStateFilter("Sci-fi", ""), + TriStateFilter("Seinen", ""), + TriStateFilter("Shotacon", ""), + TriStateFilter("Shoujo", ""), + TriStateFilter("Shoujo Ai", ""), + TriStateFilter("Shounen", ""), + TriStateFilter("Shounen Ai", ""), + TriStateFilter("Slice of Life", ""), + TriStateFilter("Smut", ""), + TriStateFilter("Sports", ""), + TriStateFilter("Supernatural", ""), + TriStateFilter("Tragedy", ""), + TriStateFilter("Yaoi", ""), + TriStateFilter("Yuri", ""), + ]), + ]; + } + + String ll(String url) { + if (url.contains("?")) { + return "&"; + } + return "?"; + } +} + +Map getHeader(String url) { + final headers = { + 'Referer': '$url/', + "User-Agent": + "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:71.0) Gecko/20100101 Firefox/77.0" + }; + return headers; +} + +NepNep main() { + return NepNep(); +} diff --git a/manga/multisrc/nepnep/sources.dart b/manga/multisrc/nepnep/sources.dart index becd46d3..b5526cac 100644 --- a/manga/multisrc/nepnep/sources.dart +++ b/manga/multisrc/nepnep/sources.dart @@ -1,7 +1,7 @@ import '../../../model/source.dart'; import '../../../utils/utils.dart'; -const nepnepVersion = "0.0.35"; +const nepnepVersion = "0.0.4"; const nepnepSourceCodeUrl = "https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/multisrc/nepnep/nepnep-v$nepnepVersion.dart"; const defaultDateFormat = "yyyy-MM-dd HH:mm:ss"; diff --git a/manga/src/all/mangadex/mangadex-v0.0.45.dart b/manga/src/all/mangadex/mangadex-v0.0.45.dart index 172054d1..0278beef 100644 --- a/manga/src/all/mangadex/mangadex-v0.0.45.dart +++ b/manga/src/all/mangadex/mangadex-v0.0.45.dart @@ -52,29 +52,29 @@ class MangaDex extends MProvider { } else if (filter.type == "OriginalLanguageList") { final langs = (filter.state as List).where((e) => e.state).toList(); if (langs.isNotEmpty) { - for (var ln in langs) { - url += "${ll(url)}${ln.value}"; + for (var lang in langs) { + url += "${ll(url)}${lang.value}"; } } } else if (filter.type == "ContentRatingList") { - final langs = (filter.state as List).where((e) => e.state).toList(); - if (langs.isNotEmpty) { - for (var ln in langs) { - url += "${ll(url)}${ln.value}"; + final ctns = (filter.state as List).where((e) => e.state).toList(); + if (ctns.isNotEmpty) { + for (var ctn in ctns) { + url += "${ll(url)}${ctn.value}"; } } } else if (filter.type == "DemographicList") { - final langs = (filter.state as List).where((e) => e.state).toList(); - if (langs.isNotEmpty) { - for (var ln in langs) { - url += "${ll(url)}${ln.value}"; + final demogr = (filter.state as List).where((e) => e.state).toList(); + if (demogr.isNotEmpty) { + for (var demog in demogr) { + url += "${ll(url)}${demog.value}"; } } } else if (filter.type == "StatusList") { - final langs = (filter.state as List).where((e) => e.state).toList(); - if (langs.isNotEmpty) { - for (var ln in langs) { - url += "${ll(url)}${ln.value}"; + final statusL = (filter.state as List).where((e) => e.state).toList(); + if (statusL.isNotEmpty) { + for (var status in statusL) { + url += "${ll(url)}${status.value}"; } } } else if (filter.type == "SortFilter") { From 8c98a563ebc0a92195770bdb36bd8a5ec01952cc Mon Sep 17 00:00:00 2001 From: kodjomoustapha <107993382+kodjodevf@users.noreply.github.com> Date: Mon, 27 Nov 2023 15:08:51 +0100 Subject: [PATCH 5/7] added filter method --- anime/multisrc/zorotheme/sources.dart | 2 +- .../multisrc/zorotheme/zorotheme-v0.0.45.dart | 200 ---- .../multisrc/zorotheme/zorotheme-v0.0.5.dart | 432 +++++++ ...anime-v0.0.25.dart => okanime-v0.0.3.dart} | 3 +- anime/src/ar/okanime/source.dart | 2 +- anime/src/en/aniwave/aniwave-v0.0.1.dart | 242 ---- anime/src/en/aniwave/aniwave-v0.0.15.dart | 447 +++++++ anime/src/en/aniwave/source.dart | 2 +- anime/src/en/gogoanime/gogoanime-v0.0.35.dart | 165 --- anime/src/en/gogoanime/gogoanime-v0.0.4.dart | 1031 +++++++++++++++++ anime/src/en/gogoanime/source.dart | 4 +- ...kisskh-v0.0.3.dart => kisskh-v0.0.35.dart} | 3 +- anime/src/en/kisskh/source.dart | 2 +- ...a-v0.0.35.dart => animesultra-v0.0.4.dart} | 3 +- anime/src/fr/animesultra/source.dart | 2 +- ...anime-v0.0.35.dart => franime-v0.0.4.dart} | 3 +- anime/src/fr/franime/source.dart | 2 +- ...akufr-v0.0.35.dart => otakufr-v0.0.4.dart} | 3 +- anime/src/fr/otakufr/source.dart | 2 +- ...gami-v0.0.2.dart => nimegami-v0.0.25.dart} | 3 +- anime/src/id/nimegami/source.dart | 2 +- ...verz-v0.0.1.dart => oploverz-v0.0.15.dart} | 12 +- anime/src/id/oploverz/source.dart | 2 +- ...esu-v0.0.2.dart => otakudesu-v0.0.25.dart} | 3 +- anime/src/id/otakudesu/source.dart | 2 +- manga/multisrc/nepnep/nepnep-v0.0.4.dart | 32 +- 26 files changed, 1958 insertions(+), 648 deletions(-) delete mode 100644 anime/multisrc/zorotheme/zorotheme-v0.0.45.dart create mode 100644 anime/multisrc/zorotheme/zorotheme-v0.0.5.dart rename anime/src/ar/okanime/{okanime-v0.0.25.dart => okanime-v0.0.3.dart} (98%) delete mode 100644 anime/src/en/aniwave/aniwave-v0.0.1.dart create mode 100644 anime/src/en/aniwave/aniwave-v0.0.15.dart delete mode 100644 anime/src/en/gogoanime/gogoanime-v0.0.35.dart create mode 100644 anime/src/en/gogoanime/gogoanime-v0.0.4.dart rename anime/src/en/kisskh/{kisskh-v0.0.3.dart => kisskh-v0.0.35.dart} (97%) rename anime/src/fr/animesultra/{animesultra-v0.0.35.dart => animesultra-v0.0.4.dart} (98%) rename anime/src/fr/franime/{franime-v0.0.35.dart => franime-v0.0.4.dart} (99%) rename anime/src/fr/otakufr/{otakufr-v0.0.35.dart => otakufr-v0.0.4.dart} (98%) rename anime/src/id/nimegami/{nimegami-v0.0.2.dart => nimegami-v0.0.25.dart} (98%) rename anime/src/id/oploverz/{oploverz-v0.0.1.dart => oploverz-v0.0.15.dart} (93%) rename anime/src/id/otakudesu/{otakudesu-v0.0.2.dart => otakudesu-v0.0.25.dart} (98%) diff --git a/anime/multisrc/zorotheme/sources.dart b/anime/multisrc/zorotheme/sources.dart index 33f16130..80a15686 100644 --- a/anime/multisrc/zorotheme/sources.dart +++ b/anime/multisrc/zorotheme/sources.dart @@ -1,7 +1,7 @@ import '../../../model/source.dart'; import '../../../utils/utils.dart'; -const zorothemeVersion = "0.0.45"; +const zorothemeVersion = "0.0.5"; const zorothemeSourceCodeUrl = "https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/anime/multisrc/zorotheme/zorotheme-v$zorothemeVersion.dart"; diff --git a/anime/multisrc/zorotheme/zorotheme-v0.0.45.dart b/anime/multisrc/zorotheme/zorotheme-v0.0.45.dart deleted file mode 100644 index 251e06ff..00000000 --- a/anime/multisrc/zorotheme/zorotheme-v0.0.45.dart +++ /dev/null @@ -1,200 +0,0 @@ -import 'package:mangayomi/bridge_lib.dart'; -import 'dart:convert'; - -class ZoroTheme extends MProvider { - ZoroTheme(); - - @override - Future getPopular(MSource source, int page) async { - final data = {"url": "${source.baseUrl}/most-popular?page=$page"}; - final res = await http('GET', json.encode(data)); - - return animeElementM(res); - } - - @override - Future getLatestUpdates(MSource source, int page) async { - final data = {"url": "${source.baseUrl}/recently-updated?page=$page"}; - final res = await http('GET', json.encode(data)); - - return animeElementM(res); - } - - @override - Future search(MSource source, String query, int page) async { - final data = {"url": "${source.baseUrl}/search?keyword=$query&page=$page"}; - final res = await http('GET', json.encode(data)); - - return animeElementM(res); - } - - @override - Future getDetail(MSource source, String url) async { - final statusList = [ - { - "Currently Airing": 0, - "Finished Airing": 1, - } - ]; - final data = {"url": "${source.baseUrl}$url"}; - final res = await http('GET', json.encode(data)); - MManga anime = MManga(); - final status = xpath(res, - '//*[@class="anisc-info"]/div[contains(text(),"Status:")]/span[2]/text()') - .first; - - anime.status = parseStatus(status, statusList); - anime.author = xpath(res, - '//*[@class="anisc-info"]/div[contains(text(),"Studios:")]/span/text()') - .first - .replaceAll("Studios:", ""); - anime.description = xpath(res, - '//*[@class="anisc-info"]/div[contains(text(),"Overview:")]/text()') - .first - .replaceAll("Overview:", ""); - final genre = xpath(res, - '//*[@class="anisc-info"]/div[contains(text(),"Genres:")]/a/text()'); - - anime.genre = genre; - final id = substringAfterLast(url, '-'); - - final urlEp = - "${source.baseUrl}/ajax${ajaxRoute('${source.baseUrl}')}/episode/list/$id"; - - final dataEp = { - "url": urlEp, - "headers": {"referer": url} - }; - final resEp = await http('GET', json.encode(dataEp)); - - final html = json.decode(resEp)["html"]; - - final epUrls = querySelectorAll(html, - selector: "a.ep-item", - typeElement: 3, - attributes: "href", - typeRegExp: 0); - final numbers = querySelectorAll(html, - selector: "a.ep-item", - typeElement: 3, - attributes: "data-number", - typeRegExp: 0); - - final titles = querySelectorAll(html, - selector: "a.ep-item", - typeElement: 3, - attributes: "title", - typeRegExp: 0); - - List episodes = []; - - for (var i = 0; i < titles.length; i++) { - final number = numbers[i]; - final title = titles[i]; - episodes.add("Episode $number: $title"); - } - List? episodesList = []; - for (var i = 0; i < episodes.length; i++) { - MChapter episode = MChapter(); - episode.name = episodes[i]; - episode.url = epUrls[i]; - episodesList.add(episode); - } - - anime.chapters = episodesList.reversed.toList(); - return anime; - } - - @override - Future> getVideoList(MSource source, String url) async { - final id = substringAfterLast(url, '?ep='); - - final datas = { - "url": - "${source.baseUrl}/ajax${ajaxRoute('${source.baseUrl}')}/episode/servers?episodeId=$id", - "headers": {"referer": "${source.baseUrl}/$url"} - }; - final res = await http('GET', json.encode(datas)); - final html = json.decode(res)["html"]; - - final names = querySelectorAll(html, - selector: "div.server-item", - typeElement: 0, - attributes: "", - typeRegExp: 0); - - final ids = querySelectorAll(html, - selector: "div.server-item", - typeElement: 3, - attributes: "data-id", - typeRegExp: 0); - - final subDubs = querySelectorAll(html, - selector: "div.server-item", - typeElement: 3, - attributes: "data-type", - typeRegExp: 0); - - List videos = []; - - for (var i = 0; i < names.length; i++) { - final name = names[i]; - final id = ids[i]; - final subDub = subDubs[i]; - final datasE = { - "url": - "${source.baseUrl}/ajax${ajaxRoute('${source.baseUrl}')}/episode/sources?id=$id", - "headers": {"referer": "${source.baseUrl}/$url"} - }; - - final resE = await http('GET', json.encode(datasE)); - String epUrl = substringBefore(substringAfter(resE, "\"link\":\""), "\""); - print(epUrl); - List a = []; - if (name.contains("Vidstreaming")) { - a = await rapidCloudExtractor(epUrl, "Vidstreaming - $subDub"); - } else if (name.contains("Vidcloud")) { - a = await rapidCloudExtractor(epUrl, "Vidcloud - $subDub"); - } else if (name.contains("StreamTape")) { - a = await streamTapeExtractor(epUrl, "StreamTape - $subDub"); - } - videos.addAll(a); - } - - return videos; - } - - MPages animeElementM(String res) { - List animeList = []; - - final urls = xpath( - res, '//*[@class^="flw-item"]/div[@class="film-detail"]/h3/a/@href'); - - final names = xpath(res, - '//*[@class^="flw-item"]/div[@class="film-detail"]/h3/a/@data-jname'); - - final images = xpath( - res, '//*[@class^="flw-item"]/div[@class="film-poster"]/img/@data-src'); - 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); - } - final nextPage = - xpath(res, '//li[@class="page-item"]/a[@title="Next"]/@href', ""); - return MPages(animeList, !nextPage.isEmpty); - } - - String ajaxRoute(String baseUrl) { - if (baseUrl == "https://kaido.to") { - return ""; - } - return "/v2"; - } -} - -ZoroTheme main() { - return ZoroTheme(); -} diff --git a/anime/multisrc/zorotheme/zorotheme-v0.0.5.dart b/anime/multisrc/zorotheme/zorotheme-v0.0.5.dart new file mode 100644 index 00000000..a4571c21 --- /dev/null +++ b/anime/multisrc/zorotheme/zorotheme-v0.0.5.dart @@ -0,0 +1,432 @@ +import 'package:mangayomi/bridge_lib.dart'; +import 'dart:convert'; + +class ZoroTheme extends MProvider { + ZoroTheme(); + + @override + Future getPopular(MSource source, int page) async { + final data = {"url": "${source.baseUrl}/most-popular?page=$page"}; + final res = await http('GET', json.encode(data)); + + return animeElementM(res); + } + + @override + Future getLatestUpdates(MSource source, int page) async { + final data = {"url": "${source.baseUrl}/recently-updated?page=$page"}; + final res = await http('GET', json.encode(data)); + + return animeElementM(res); + } + + @override + Future search( + MSource source, String query, int page, FilterList filterList) async { + final filters = filterList.filters; + String url = "${source.baseUrl}/"; + + if (query.isEmpty) { + url += "filter?"; + } else { + url += "search?keyword=$query"; + } + + for (var filter in filters) { + if (filter.type == "TypeFilter") { + final type = filter.values[filter.state].value; + if (type.isNotEmpty) { + url += "${ll(url)}type=$type"; + } + } else if (filter.type == "StatusFilter") { + final status = filter.values[filter.state].value; + if (status.isNotEmpty) { + url += "${ll(url)}status=$status"; + } + } else if (filter.type == "RatedFilter") { + final rated = filter.values[filter.state].value; + if (rated.isNotEmpty) { + url += "${ll(url)}rated=$rated"; + } + } else if (filter.type == "ScoreFilter") { + final score = filter.values[filter.state].value; + if (score.isNotEmpty) { + url += "${ll(url)}score=$score"; + } + } else if (filter.type == "SeasonFilter") { + final season = filter.values[filter.state].value; + if (season.isNotEmpty) { + url += "${ll(url)}season=$season"; + } + } else if (filter.type == "LanguageFilter") { + final language = filter.values[filter.state].value; + if (language.isNotEmpty) { + url += "${ll(url)}language=$language"; + } + } else if (filter.type == "SortFilter") { + final sort = filter.values[filter.state].value; + if (sort.isNotEmpty) { + url += "${ll(url)}sort=$sort"; + } + } else if (filter.type == "StartYearFilter") { + final sy = filter.values[filter.state].value; + if (sy.isNotEmpty) { + url += "${ll(url)}sy=$sy"; + } + } else if (filter.type == "StartMonthFilter") { + final sm = filter.values[filter.state].value; + if (sm.isNotEmpty) { + url += "${ll(url)}sm=$sm"; + } + } else if (filter.type == "StartDayFilter") { + final sd = filter.values[filter.state].value; + if (sd.isNotEmpty) { + url += "${ll(url)}sd=$sd"; + } + } else if (filter.type == "EndYearFilter") { + final ey = filter.values[filter.state].value; + if (ey.isNotEmpty) { + url += "${ll(url)}sy=$ey"; + } + } else if (filter.type == "EndMonthFilter") { + final em = filter.values[filter.state].value; + if (em.isNotEmpty) { + url += "${ll(url)}sm=$em"; + } + } else if (filter.type == "EndDayFilter") { + final ed = filter.values[filter.state].value; + if (ed.isNotEmpty) { + url += "${ll(url)}sd=$ed"; + } + } else if (filter.type == "GenreFilter") { + final genre = (filter.state as List).where((e) => e.state).toList(); + if (genre.isNotEmpty) { + url += "${ll(url)}genre="; + for (var st in genre) { + url += "${st.value},"; + } + } + } + } + url += "${ll(url)}page=$page"; + final data = {"url": url}; + final res = await http('GET', json.encode(data)); + + return animeElementM(res); + } + + @override + Future getDetail(MSource source, String url) async { + final statusList = [ + { + "Currently Airing": 0, + "Finished Airing": 1, + } + ]; + final data = {"url": "${source.baseUrl}$url"}; + final res = await http('GET', json.encode(data)); + MManga anime = MManga(); + final status = xpath(res, + '//*[@class="anisc-info"]/div[contains(text(),"Status:")]/span[2]/text()') + .first; + + anime.status = parseStatus(status, statusList); + anime.author = xpath(res, + '//*[@class="anisc-info"]/div[contains(text(),"Studios:")]/span/text()') + .first + .replaceAll("Studios:", ""); + anime.description = xpath(res, + '//*[@class="anisc-info"]/div[contains(text(),"Overview:")]/text()') + .first + .replaceAll("Overview:", ""); + final genre = xpath(res, + '//*[@class="anisc-info"]/div[contains(text(),"Genres:")]/a/text()'); + + anime.genre = genre; + final id = substringAfterLast(url, '-'); + + final urlEp = + "${source.baseUrl}/ajax${ajaxRoute('${source.baseUrl}')}/episode/list/$id"; + + final dataEp = { + "url": urlEp, + "headers": {"referer": url} + }; + final resEp = await http('GET', json.encode(dataEp)); + + final html = json.decode(resEp)["html"]; + + final epUrls = querySelectorAll(html, + selector: "a.ep-item", + typeElement: 3, + attributes: "href", + typeRegExp: 0); + final numbers = querySelectorAll(html, + selector: "a.ep-item", + typeElement: 3, + attributes: "data-number", + typeRegExp: 0); + + final titles = querySelectorAll(html, + selector: "a.ep-item", + typeElement: 3, + attributes: "title", + typeRegExp: 0); + + List episodes = []; + + for (var i = 0; i < titles.length; i++) { + final number = numbers[i]; + final title = titles[i]; + episodes.add("Episode $number: $title"); + } + List? episodesList = []; + for (var i = 0; i < episodes.length; i++) { + MChapter episode = MChapter(); + episode.name = episodes[i]; + episode.url = epUrls[i]; + episodesList.add(episode); + } + + anime.chapters = episodesList.reversed.toList(); + return anime; + } + + @override + Future> getVideoList(MSource source, String url) async { + final id = substringAfterLast(url, '?ep='); + + final datas = { + "url": + "${source.baseUrl}/ajax${ajaxRoute('${source.baseUrl}')}/episode/servers?episodeId=$id", + "headers": {"referer": "${source.baseUrl}/$url"} + }; + final res = await http('GET', json.encode(datas)); + final html = json.decode(res)["html"]; + + final names = querySelectorAll(html, + selector: "div.server-item", + typeElement: 0, + attributes: "", + typeRegExp: 0); + + final ids = querySelectorAll(html, + selector: "div.server-item", + typeElement: 3, + attributes: "data-id", + typeRegExp: 0); + + final subDubs = querySelectorAll(html, + selector: "div.server-item", + typeElement: 3, + attributes: "data-type", + typeRegExp: 0); + + List videos = []; + + for (var i = 0; i < names.length; i++) { + final name = names[i]; + final id = ids[i]; + final subDub = subDubs[i]; + final datasE = { + "url": + "${source.baseUrl}/ajax${ajaxRoute('${source.baseUrl}')}/episode/sources?id=$id", + "headers": {"referer": "${source.baseUrl}/$url"} + }; + + final resE = await http('GET', json.encode(datasE)); + String epUrl = substringBefore(substringAfter(resE, "\"link\":\""), "\""); + print(epUrl); + List a = []; + if (name.contains("Vidstreaming")) { + a = await rapidCloudExtractor(epUrl, "Vidstreaming - $subDub"); + } else if (name.contains("Vidcloud")) { + a = await rapidCloudExtractor(epUrl, "Vidcloud - $subDub"); + } else if (name.contains("StreamTape")) { + a = await streamTapeExtractor(epUrl, "StreamTape - $subDub"); + } + videos.addAll(a); + } + + return videos; + } + + MPages animeElementM(String res) { + List animeList = []; + + final urls = xpath( + res, '//*[@class^="flw-item"]/div[@class="film-detail"]/h3/a/@href'); + + final names = xpath(res, + '//*[@class^="flw-item"]/div[@class="film-detail"]/h3/a/@data-jname'); + + final images = xpath( + res, '//*[@class^="flw-item"]/div[@class="film-poster"]/img/@data-src'); + 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); + } + final nextPage = + xpath(res, '//li[@class="page-item"]/a[@title="Next"]/@href', ""); + return MPages(animeList, !nextPage.isEmpty); + } + + String ajaxRoute(String baseUrl) { + if (baseUrl == "https://kaido.to") { + return ""; + } + return "/v2"; + } + + List yearList = [ + for (var i = 1917; i < 2024; i++) + SelectFilterOption(i.toString(), i.toString()), + SelectFilterOption("All", "") + ]; + List getFilterList() { + return [ + SelectFilter("TypeFilter", "Type", 0, [ + SelectFilterOption("All", ""), + SelectFilterOption("Movie", "1"), + SelectFilterOption("TV", "2"), + SelectFilterOption("OVA", "3"), + SelectFilterOption("ONA", "4"), + SelectFilterOption("Special", "5"), + SelectFilterOption("Music", "6") + ]), + SelectFilter("StatusFilter", "Status", 0, [ + SelectFilterOption("All", ""), + SelectFilterOption("Finished Airing", "1"), + SelectFilterOption("Currently Airing", "2"), + SelectFilterOption("Not yet aired", "3") + ]), + SelectFilter("RatedFilter", "Rated", 0, [ + SelectFilterOption("All", ""), + SelectFilterOption("G", "1"), + SelectFilterOption("PG", "2"), + SelectFilterOption("PG-13", "3"), + SelectFilterOption("R", "4"), + SelectFilterOption("R+", "5"), + SelectFilterOption("Rx", "6") + ]), + SelectFilter("ScoreFilter", "Score", 0, [ + SelectFilterOption("All", ""), + SelectFilterOption("(1) Appalling", "1"), + SelectFilterOption("(2) Horrible", "2"), + SelectFilterOption("(3) Very Bad", "3"), + SelectFilterOption("(4) Bad", "4"), + SelectFilterOption("(5) Average", "5"), + SelectFilterOption("(6) Fine", "6"), + SelectFilterOption("(7) Good", "7"), + SelectFilterOption("(8) Very Good", "8"), + SelectFilterOption("(9) Great", "9"), + SelectFilterOption("(10) Masterpiece", "10") + ]), + SelectFilter("SeasonFilter", "Season", 0, [ + SelectFilterOption("All", ""), + SelectFilterOption("Spring", "1"), + SelectFilterOption("Summer", "2"), + SelectFilterOption("Fall", "3"), + SelectFilterOption("Winter", "4") + ]), + SelectFilter("LanguageFilter", "Language", 0, [ + SelectFilterOption("All", ""), + SelectFilterOption("SUB", "1"), + SelectFilterOption("DUB", "2"), + SelectFilterOption("SUB & DUB", "3") + ]), + SelectFilter("SortFilter", "Sort by", 0, [ + SelectFilterOption("All", ""), + SelectFilterOption("Default", "default"), + SelectFilterOption("Recently Added", "recently_added"), + SelectFilterOption("Recently Updated", "recently_updated"), + SelectFilterOption("Score", "score"), + SelectFilterOption("Name A-Z", "name_az"), + SelectFilterOption("Released Date", "released_date"), + SelectFilterOption("Most Watched", "most_watched") + ]), + SelectFilter( + "StartYearFilter", "Start year", 0, yearList.reversed.toList()), + SelectFilter("StartMonthFilter", "Start month", 0, [ + SelectFilterOption("All", ""), + for (var i = 1; i < 13; i++) + SelectFilterOption(i.toString(), i.toString()) + ]), + SelectFilter("StartDayFilter", "Start day", 0, [ + SelectFilterOption("All", ""), + for (var i = 1; i < 32; i++) + SelectFilterOption(i.toString(), i.toString()), + ]), + SelectFilter("EndYearFilter", "End year", 0, yearList.reversed.toList()), + SelectFilter("EndmonthFilter", "End month", 0, [ + SelectFilterOption("All", ""), + for (var i = 1; i < 32; i++) + SelectFilterOption(i.toString(), i.toString()) + ]), + SelectFilter("EndDayFilter", "End day", 0, [ + SelectFilterOption("All", ""), + for (var i = 1; i < 32; i++) + SelectFilterOption(i.toString(), i.toString()) + ]), + GroupFilter("GenreFilter", "Genre", [ + CheckBoxFilter("Action", "1"), + CheckBoxFilter("Adventure", "2"), + CheckBoxFilter("Cars", "3"), + CheckBoxFilter("Comedy", "4"), + CheckBoxFilter("Dementia", "5"), + CheckBoxFilter("Demons", "6"), + CheckBoxFilter("Drama", "8"), + CheckBoxFilter("Ecchi", "9"), + CheckBoxFilter("Fantasy", "10"), + CheckBoxFilter("Game", "11"), + CheckBoxFilter("Harem", "35"), + CheckBoxFilter("Historical", "13"), + CheckBoxFilter("Horror", "14"), + CheckBoxFilter("Isekai", "44"), + CheckBoxFilter("Josei", "43"), + CheckBoxFilter("Kids", "15"), + CheckBoxFilter("Magic", "16"), + CheckBoxFilter("Martial Arts", "17"), + CheckBoxFilter("Mecha", "18"), + CheckBoxFilter("Military", "38"), + CheckBoxFilter("Music", "19"), + CheckBoxFilter("Mystery", "7"), + CheckBoxFilter("Parody", "20"), + CheckBoxFilter("Police", "39"), + CheckBoxFilter("Psychological", "40"), + CheckBoxFilter("Romance", "22"), + CheckBoxFilter("Samurai", "21"), + CheckBoxFilter("School", "23"), + CheckBoxFilter("Sci-Fi", "24"), + CheckBoxFilter("Seinen", "42"), + CheckBoxFilter("Shoujo", "25"), + CheckBoxFilter("Shoujo Ai", "26"), + CheckBoxFilter("Shounen", "27"), + CheckBoxFilter("Shounen Ai", "28"), + CheckBoxFilter("Slice of Life", "36"), + CheckBoxFilter("Space", "29"), + CheckBoxFilter("Sports", "30"), + CheckBoxFilter("Super Power", "31"), + CheckBoxFilter("Supernatural", "37"), + CheckBoxFilter("Thriller", "41"), + CheckBoxFilter("Vampire", "32"), + CheckBoxFilter("Yaoi", "33"), + CheckBoxFilter("Yuri", "34") + ]), + ]; + } + + String ll(String url) { + if (url.contains("?")) { + return "&"; + } + return "?"; + } +} + +ZoroTheme main() { + return ZoroTheme(); +} diff --git a/anime/src/ar/okanime/okanime-v0.0.25.dart b/anime/src/ar/okanime/okanime-v0.0.3.dart similarity index 98% rename from anime/src/ar/okanime/okanime-v0.0.25.dart rename to anime/src/ar/okanime/okanime-v0.0.3.dart index 585eb5d0..8b5fdf02 100644 --- a/anime/src/ar/okanime/okanime-v0.0.25.dart +++ b/anime/src/ar/okanime/okanime-v0.0.3.dart @@ -53,7 +53,8 @@ class OkAnime extends MProvider { } @override - Future search(MSource source, String query, int page) async { + Future search( + MSource source, String query, int page, FilterList filterList) async { String url = "${source.baseUrl}/search/?s=$query"; if (page > 1) { url += "&page=$page"; diff --git a/anime/src/ar/okanime/source.dart b/anime/src/ar/okanime/source.dart index 4377285e..6a2d6934 100644 --- a/anime/src/ar/okanime/source.dart +++ b/anime/src/ar/okanime/source.dart @@ -2,7 +2,7 @@ import '../../../../model/source.dart'; import '../../../../utils/utils.dart'; Source get okanimeSource => _okanimeSource; -const okanimeVersion = "0.0.25"; +const okanimeVersion = "0.0.3"; const okanimeSourceCodeUrl = "https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/anime/src/ar/okanime/okanime-v$okanimeVersion.dart"; Source _okanimeSource = Source( diff --git a/anime/src/en/aniwave/aniwave-v0.0.1.dart b/anime/src/en/aniwave/aniwave-v0.0.1.dart deleted file mode 100644 index 55029295..00000000 --- a/anime/src/en/aniwave/aniwave-v0.0.1.dart +++ /dev/null @@ -1,242 +0,0 @@ -import 'package:mangayomi/bridge_lib.dart'; -import 'dart:convert'; - -class Aniwave extends MProvider { - Aniwave(); - - @override - Future getPopular(MSource source, int page) async { - final data = {"url": "${source.baseUrl}/filter?sort=trending&page=$page"}; - final res = await http('GET', json.encode(data)); - return parseAnimeList(res); - } - - @override - Future getLatestUpdates(MSource source, int page) async { - final data = { - "url": "${source.baseUrl}/filter?sort=recently_updated&page=$page" - }; - final res = await http('GET', json.encode(data)); - return parseAnimeList(res); - } - - @override - Future search(MSource source, String query, int page) async { - final data = {"url": "${source.baseUrl}/filter?keyword=$query"}; - final res = await http('GET', json.encode(data)); - return parseAnimeList(res); - } - - @override - Future getDetail(MSource source, String url) async { - final statusList = [ - {"Releasing": 0, "Completed": 1} - ]; - final data = {"url": "${source.baseUrl}${url}"}; - final res = await http('GET', json.encode(data)); - MManga anime = MManga(); - final status = xpath(res, '//div[contains(text(),"Status")]/span/text()'); - if (status.isNotEmpty) { - anime.status = parseStatus(status.first, statusList); - } - final description = xpath(res, - '//*[contains(@class,"synopsis")]/div[@class="shorting"]/div[@class="content"]/text()'); - if (description.isNotEmpty) { - anime.description = description.first; - } - final author = xpath(res, '//div[contains(text(),"Studio")]/span/text()'); - if (author.isNotEmpty) { - anime.author = author.first; - } - - anime.genre = xpath(res, '//div[contains(text(),"Genre")]/span/a/text()'); - final id = querySelectorAll(res, - selector: "div[data-id]", - typeElement: 3, - attributes: "data-id", - typeRegExp: 0) - .first; - final encrypt = vrfEncrypt(id); - final vrf = "vrf=${Uri.encodeComponent(encrypt)}"; - final dataEp = {"url": "${source.baseUrl}/ajax/episode/list/$id?$vrf"}; - final resEp = await http('GET', json.encode(dataEp)); - final html = json.decode(resEp)["result"]; - List? episodesList = []; - final epsHtml = querySelectorAll(html, - selector: "div.episodes ul > li", - typeElement: 2, - attributes: "", - typeRegExp: 0); - for (var epHtml in epsHtml) { - final title = xpath(epHtml, '//li/@title').isNotEmpty - ? xpath(epHtml, '//li/@title').first - : ""; - final ids = xpath(epHtml, '//a/@data-ids').first; - final sub = xpath(epHtml, '//a/@data-sub').first; - final dub = xpath(epHtml, '//a/@data-dub').first; - final softsub = title.toLowerCase().contains("softsub") ? "1" : ""; - final fillerEp = title.toLowerCase().contains("filler") ? "1" : ""; - final epNum = xpath(epHtml, '//a/@data-num').first; - String scanlator = ""; - if (sub == "1") { - scanlator += "Sub"; - } - if (softsub == "1") { - scanlator += ", Softsub"; - } - if (dub == "1") { - scanlator += ", Dub"; - } - if (fillerEp == "1") { - scanlator += ", • Filler Episode"; - } - MChapter episode = MChapter(); - episode.name = "Episode $epNum"; - episode.scanlator = scanlator; - episode.url = "$ids&epurl=$url/ep-$epNum"; - episodesList.add(episode); - } - - anime.chapters = episodesList.reversed.toList(); - return anime; - } - - @override - Future> getVideoList(MSource source, String url) async { - final ids = substringBefore(url, "&"); - final encrypt = vrfEncrypt(ids); - final vrf = "vrf=${Uri.encodeComponent(encrypt)}"; - final res = await http('GET', - json.encode({"url": "${source.baseUrl}/ajax/server/list/$ids?$vrf"})); - final html = json.decode(res)["result"]; - final vidsHtml = querySelectorAll(html, - selector: "div.servers > div", - typeElement: 2, - attributes: "", - typeRegExp: 0); - List videos = []; - for (var vidHtml in vidsHtml) { - final type = xpath(vidHtml, '//div/@data-type').first; - final serversIds = xpath(vidHtml, '//li/@data-link-id'); - for (int i = 0; i < serversIds.length; i++) { - final serverId = serversIds[i]; - - final encrypt = vrfEncrypt(serverId); - final vrf = "vrf=${Uri.encodeComponent(encrypt)}"; - final res = await http( - 'GET', - json.encode( - {"url": "${source.baseUrl}/ajax/server/$serverId?$vrf"})); - final status = json.decode(res)["status"]; - if (status == 200) { - List a = []; - final url = vrfDecrypt(json.decode(res)["result"]["url"]); - if (url.contains("mp4upload")) { - a = await mp4UploadExtractor(url, null, "", type); - } else if (url.contains("streamtape")) { - a = await streamTapeExtractor(url, "StreamTape - $type"); - } else if (url.contains("filemoon")) { - a = await filemoonExtractor(url, "", type); - } - videos.addAll(a); - } - } - } - - return videos; - } - - MPages parseAnimeList(String res) { - List animeList = []; - final urls = xpath(res, '//div[@class="item "]/div/div/div/a/@href'); - final names = xpath(res, '//div[@class="item "]/div/div/div/a/text()'); - final images = xpath(res, '//div[@class="item "]/div/div/a/img/@src'); - - 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, true); - } - - List rc4Encrypt(String key, List message) { - List _key = utf8.encode(key); - int _i = 0, _j = 0; - List _box = List.generate(256, (i) => i); - - int x = 0; - for (int i = 0; i < 256; i++) { - x = (x + _box[i] + _key[i % _key.length]) % 256; - var tmp = _box[i]; - _box[i] = _box[x]; - _box[x] = tmp; - } - - List out = []; - for (var char in message) { - _i = (_i + 1) % 256; - _j = (_j + _box[_i]) % 256; - - var tmp = _box[_i]; - _box[_i] = _box[_j]; - _box[_j] = tmp; - - final c = char ^ (_box[(_box[_i] + _box[_j]) % 256]); - out.add(c); - } - - return out; - } - - String vrfEncrypt(String input) { - final rc4 = rc4Encrypt("ysJhV6U27FVIjjuk", input.codeUnits); - final vrf = base64Url.encode(rc4); - final vrf1 = base64.encode(vrf.codeUnits); - List vrf2 = vrfShift(vrf1.codeUnits); - final vrf3 = base64.encode(vrf2); - return utf8.decode(rot13(vrf3.codeUnits)); - } - - String vrfDecrypt(String input) { - final decode = base64Url.decode(input); - final rc4 = rc4Encrypt("hlPeNwkncH0fq9so", decode); - return Uri.decodeComponent(utf8.decode(rc4)); - } - - List vrfShift(List vrf) { - var shifts = [-3, 3, -4, 2, -2, 5, 4, 5]; - for (var i = 0; i < vrf.length; i++) { - var shift = shifts[i % 8]; - vrf[i] = (vrf[i] + shift) & 0xFF; - } - return vrf; - } - - List rot13(List vrf) { - for (var i = 0; i < vrf.length; i++) { - var byte = vrf[i]; - if (byte >= 'A'.codeUnitAt(0) && byte <= 'Z'.codeUnitAt(0)) { - vrf[i] = (byte - 'A'.codeUnitAt(0) + 13) % 26 + 'A'.codeUnitAt(0); - } else if (byte >= 'a'.codeUnitAt(0) && byte <= 'z'.codeUnitAt(0)) { - vrf[i] = (byte - 'a'.codeUnitAt(0) + 13) % 26 + 'a'.codeUnitAt(0); - } - } - return vrf; - } -} - -Map getMirrorPref() { - return { - "aniwave.to": "https://aniwave.to", - "aniwave.bz": "https://aniwave.bz", - "aniwave.ws": "https://aniwave.ws", - }; -} - -Aniwave main() { - return Aniwave(); -} diff --git a/anime/src/en/aniwave/aniwave-v0.0.15.dart b/anime/src/en/aniwave/aniwave-v0.0.15.dart new file mode 100644 index 00000000..80656999 --- /dev/null +++ b/anime/src/en/aniwave/aniwave-v0.0.15.dart @@ -0,0 +1,447 @@ +import 'package:mangayomi/bridge_lib.dart'; +import 'dart:convert'; + +class Aniwave extends MProvider { + Aniwave(); + + @override + Future getPopular(MSource source, int page) async { + final data = {"url": "${source.baseUrl}/filter?sort=trending&page=$page"}; + final res = await http('GET', json.encode(data)); + return parseAnimeList(res); + } + + @override + Future getLatestUpdates(MSource source, int page) async { + final data = { + "url": "${source.baseUrl}/filter?sort=recently_updated&page=$page" + }; + final res = await http('GET', json.encode(data)); + return parseAnimeList(res); + } + + @override + Future search( + MSource source, String query, int page, FilterList filterList) async { + final filters = filterList.filters; + String url = "${source.baseUrl}/filter?keyword=$query"; + + for (var filter in filters) { + if (filter.type == "OrderFilter") { + final order = filter.values[filter.state].value; + url += "${ll(url)}sort=$order"; + } else if (filter.type == "GenreFilter") { + final genre = (filter.state as List).where((e) => e.state).toList(); + if (genre.isNotEmpty) { + for (var st in genre) { + url += "${ll(url)}genre[]=${st.value}"; + } + } + } else if (filter.type == "CountryFilter") { + final country = (filter.state as List).where((e) => e.state).toList(); + if (country.isNotEmpty) { + for (var st in country) { + url += "${ll(url)}country[]=${st.value}"; + } + } + } else if (filter.type == "SeasonFilter") { + final season = (filter.state as List).where((e) => e.state).toList(); + if (season.isNotEmpty) { + for (var st in season) { + url += "${ll(url)}season[]=${st.value}"; + } + } + } else if (filter.type == "YearFilter") { + final year = (filter.state as List).where((e) => e.state).toList(); + if (year.isNotEmpty) { + for (var st in year) { + url += "${ll(url)}year[]=${st.value}"; + } + } + } else if (filter.type == "TypeFilter") { + final type = (filter.state as List).where((e) => e.state).toList(); + if (type.isNotEmpty) { + for (var st in type) { + url += "${ll(url)}type[]=${st.value}"; + } + } + } else if (filter.type == "StatusFilter") { + final status = (filter.state as List).where((e) => e.state).toList(); + if (status.isNotEmpty) { + for (var st in status) { + url += "${ll(url)}status[]=${st.value}"; + } + } + } else if (filter.type == "LanguageFilter") { + final language = (filter.state as List).where((e) => e.state).toList(); + if (language.isNotEmpty) { + for (var st in language) { + url += "${ll(url)}language[]=${st.value}"; + } + } + } else if (filter.type == "RatingFilter") { + final rating = (filter.state as List).where((e) => e.state).toList(); + if (rating.isNotEmpty) { + for (var st in rating) { + url += "${ll(url)}rating[]=${st.value}"; + } + } + } + } + final data = {"url": "$url&page=$page"}; + final res = await http('GET', json.encode(data)); + return parseAnimeList(res); + } + + @override + Future getDetail(MSource source, String url) async { + final statusList = [ + {"Releasing": 0, "Completed": 1} + ]; + final data = {"url": "${source.baseUrl}${url}"}; + final res = await http('GET', json.encode(data)); + MManga anime = MManga(); + final status = xpath(res, '//div[contains(text(),"Status")]/span/text()'); + if (status.isNotEmpty) { + anime.status = parseStatus(status.first, statusList); + } + final description = xpath(res, + '//*[contains(@class,"synopsis")]/div[@class="shorting"]/div[@class="content"]/text()'); + if (description.isNotEmpty) { + anime.description = description.first; + } + final author = xpath(res, '//div[contains(text(),"Studio")]/span/text()'); + if (author.isNotEmpty) { + anime.author = author.first; + } + + anime.genre = xpath(res, '//div[contains(text(),"Genre")]/span/a/text()'); + final id = querySelectorAll(res, + selector: "div[data-id]", + typeElement: 3, + attributes: "data-id", + typeRegExp: 0) + .first; + final encrypt = vrfEncrypt(id); + final vrf = "vrf=${Uri.encodeComponent(encrypt)}"; + final dataEp = {"url": "${source.baseUrl}/ajax/episode/list/$id?$vrf"}; + final resEp = await http('GET', json.encode(dataEp)); + final html = json.decode(resEp)["result"]; + List? episodesList = []; + final epsHtml = querySelectorAll(html, + selector: "div.episodes ul > li", + typeElement: 2, + attributes: "", + typeRegExp: 0); + for (var epHtml in epsHtml) { + final title = xpath(epHtml, '//li/@title').isNotEmpty + ? xpath(epHtml, '//li/@title').first + : ""; + final ids = xpath(epHtml, '//a/@data-ids').first; + final sub = xpath(epHtml, '//a/@data-sub').first; + final dub = xpath(epHtml, '//a/@data-dub').first; + final softsub = title.toLowerCase().contains("softsub") ? "1" : ""; + final fillerEp = title.toLowerCase().contains("filler") ? "1" : ""; + final epNum = xpath(epHtml, '//a/@data-num').first; + String scanlator = ""; + if (sub == "1") { + scanlator += "Sub"; + } + if (softsub == "1") { + scanlator += ", Softsub"; + } + if (dub == "1") { + scanlator += ", Dub"; + } + if (fillerEp == "1") { + scanlator += ", • Filler Episode"; + } + MChapter episode = MChapter(); + episode.name = "Episode $epNum"; + episode.scanlator = scanlator; + episode.url = "$ids&epurl=$url/ep-$epNum"; + episodesList.add(episode); + } + + anime.chapters = episodesList.reversed.toList(); + return anime; + } + + @override + Future> getVideoList(MSource source, String url) async { + final ids = substringBefore(url, "&"); + final encrypt = vrfEncrypt(ids); + final vrf = "vrf=${Uri.encodeComponent(encrypt)}"; + final res = await http('GET', + json.encode({"url": "${source.baseUrl}/ajax/server/list/$ids?$vrf"})); + final html = json.decode(res)["result"]; + final vidsHtml = querySelectorAll(html, + selector: "div.servers > div", + typeElement: 2, + attributes: "", + typeRegExp: 0); + List videos = []; + for (var vidHtml in vidsHtml) { + final type = xpath(vidHtml, '//div/@data-type').first; + final serversIds = xpath(vidHtml, '//li/@data-link-id'); + for (int i = 0; i < serversIds.length; i++) { + final serverId = serversIds[i]; + + final encrypt = vrfEncrypt(serverId); + final vrf = "vrf=${Uri.encodeComponent(encrypt)}"; + final res = await http( + 'GET', + json.encode( + {"url": "${source.baseUrl}/ajax/server/$serverId?$vrf"})); + final status = json.decode(res)["status"]; + if (status == 200) { + List a = []; + final url = vrfDecrypt(json.decode(res)["result"]["url"]); + if (url.contains("mp4upload")) { + a = await mp4UploadExtractor(url, null, "", type); + } else if (url.contains("streamtape")) { + a = await streamTapeExtractor(url, "StreamTape - $type"); + } else if (url.contains("filemoon")) { + a = await filemoonExtractor(url, "", type); + } + videos.addAll(a); + } + } + } + + return videos; + } + + MPages parseAnimeList(String res) { + List animeList = []; + final urls = xpath(res, '//div[@class="item "]/div/div/div/a/@href'); + final names = xpath(res, '//div[@class="item "]/div/div/div/a/text()'); + final images = xpath(res, '//div[@class="item "]/div/div/a/img/@src'); + + 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, true); + } + + List rc4Encrypt(String key, List message) { + List _key = utf8.encode(key); + int _i = 0, _j = 0; + List _box = List.generate(256, (i) => i); + + int x = 0; + for (int i = 0; i < 256; i++) { + x = (x + _box[i] + _key[i % _key.length]) % 256; + var tmp = _box[i]; + _box[i] = _box[x]; + _box[x] = tmp; + } + + List out = []; + for (var char in message) { + _i = (_i + 1) % 256; + _j = (_j + _box[_i]) % 256; + + var tmp = _box[_i]; + _box[_i] = _box[_j]; + _box[_j] = tmp; + + final c = char ^ (_box[(_box[_i] + _box[_j]) % 256]); + out.add(c); + } + + return out; + } + + String vrfEncrypt(String input) { + final rc4 = rc4Encrypt("ysJhV6U27FVIjjuk", input.codeUnits); + final vrf = base64Url.encode(rc4); + final vrf1 = base64.encode(vrf.codeUnits); + List vrf2 = vrfShift(vrf1.codeUnits); + final vrf3 = base64.encode(vrf2); + return utf8.decode(rot13(vrf3.codeUnits)); + } + + String vrfDecrypt(String input) { + final decode = base64Url.decode(input); + final rc4 = rc4Encrypt("hlPeNwkncH0fq9so", decode); + return Uri.decodeComponent(utf8.decode(rc4)); + } + + List vrfShift(List vrf) { + var shifts = [-3, 3, -4, 2, -2, 5, 4, 5]; + for (var i = 0; i < vrf.length; i++) { + var shift = shifts[i % 8]; + vrf[i] = (vrf[i] + shift) & 0xFF; + } + return vrf; + } + + List rot13(List vrf) { + for (var i = 0; i < vrf.length; i++) { + var byte = vrf[i]; + if (byte >= 'A'.codeUnitAt(0) && byte <= 'Z'.codeUnitAt(0)) { + vrf[i] = (byte - 'A'.codeUnitAt(0) + 13) % 26 + 'A'.codeUnitAt(0); + } else if (byte >= 'a'.codeUnitAt(0) && byte <= 'z'.codeUnitAt(0)) { + vrf[i] = (byte - 'a'.codeUnitAt(0) + 13) % 26 + 'a'.codeUnitAt(0); + } + } + return vrf; + } + + List getFilterList() { + return [ + SelectFilter("OrderFilter", "Sort order", 0, [ + SelectFilterOption("Most relevance", "most_relevance"), + SelectFilterOption("Recently updated", "recently_updated"), + SelectFilterOption("Recently added", "recently_added"), + SelectFilterOption("Release date", "release_date"), + SelectFilterOption("Trending", "trending"), + SelectFilterOption("Name A-Z", "title_az"), + SelectFilterOption("Scores", "scores"), + SelectFilterOption("MAL scores", "mal_scores"), + SelectFilterOption("Most watched", "most_watched"), + SelectFilterOption("Most favourited", "most_favourited"), + SelectFilterOption("Number of episodes", "number_of_episodes"), + ]), + SeparatorFilter(), + GroupFilter("GenreFilter", "Genre", [ + CheckBoxFilter("Action", "1"), + CheckBoxFilter("Adventure", "2"), + CheckBoxFilter("Avant Garde", "2262888"), + CheckBoxFilter("Boys Love", "2262603"), + CheckBoxFilter("Comedy", "4"), + CheckBoxFilter("Demons", "4424081"), + CheckBoxFilter("Drama", "7"), + CheckBoxFilter("Ecchi", "8"), + CheckBoxFilter("Fantasy", "9"), + CheckBoxFilter("Girls Love", "2263743"), + CheckBoxFilter("Gourmet", "2263289"), + CheckBoxFilter("Harem", "11"), + CheckBoxFilter("Horror", "14"), + CheckBoxFilter("Isekai", "3457284"), + CheckBoxFilter("Iyashikei", "4398552"), + CheckBoxFilter("Josei", "15"), + CheckBoxFilter("Kids", "16"), + CheckBoxFilter("Magic", "4424082"), + CheckBoxFilter("Mahou Shoujo", "3457321"), + CheckBoxFilter("Martial Arts", "18"), + CheckBoxFilter("Mecha", "19"), + CheckBoxFilter("Military", "20"), + CheckBoxFilter("Music", "21"), + CheckBoxFilter("Mystery", "22"), + CheckBoxFilter("Parody", "23"), + CheckBoxFilter("Psychological", "25"), + CheckBoxFilter("Reverse Harem", "4398403"), + CheckBoxFilter("Romance", "26"), + CheckBoxFilter("School", "28"), + CheckBoxFilter("Sci-Fi", "29"), + CheckBoxFilter("Seinen", "30"), + CheckBoxFilter("Shoujo", "31"), + CheckBoxFilter("Shounen", "33"), + CheckBoxFilter("Slice of Life", "35"), + CheckBoxFilter("Space", "36"), + CheckBoxFilter("Sports", "37"), + CheckBoxFilter("Super Power", "38"), + CheckBoxFilter("Supernatural", "39"), + CheckBoxFilter("Suspense", "2262590"), + CheckBoxFilter("Thriller", "40"), + CheckBoxFilter("Vampire", "41") + ]), + GroupFilter("CountryFilter", "Country", [ + CheckBoxFilter("China", "120823"), + CheckBoxFilter("Japan", "120822") + ]), + GroupFilter("SeasonFilter", "Season", [ + CheckBoxFilter("Fall", "fall"), + CheckBoxFilter("Summer", "summer"), + CheckBoxFilter("Spring", "spring"), + CheckBoxFilter("Winter", "winter"), + CheckBoxFilter("Unknown", "unknown") + ]), + GroupFilter("YearFilter", "Year", [ + CheckBoxFilter("2023", "2023"), + CheckBoxFilter("2022", "2022"), + CheckBoxFilter("2021", "2021"), + CheckBoxFilter("2020", "2020"), + CheckBoxFilter("2019", "2019"), + CheckBoxFilter("2018", "2018"), + CheckBoxFilter("2017", "2017"), + CheckBoxFilter("2016", "2016"), + CheckBoxFilter("2015", "2015"), + CheckBoxFilter("2014", "2014"), + CheckBoxFilter("2013", "2013"), + CheckBoxFilter("2012", "2012"), + CheckBoxFilter("2011", "2011"), + CheckBoxFilter("2010", "2010"), + CheckBoxFilter("2009", "2009"), + CheckBoxFilter("2008", "2008"), + CheckBoxFilter("2007", "2007"), + CheckBoxFilter("2006", "2006"), + CheckBoxFilter("2005", "2005"), + CheckBoxFilter("2004", "2004"), + CheckBoxFilter("2003", "2003"), + CheckBoxFilter("2000s", "2000s"), + CheckBoxFilter("1990s", "1990s"), + CheckBoxFilter("1980s", "1980s"), + CheckBoxFilter("1970s", "1970s"), + CheckBoxFilter("1960s", "1960s"), + CheckBoxFilter("1950s", "1950s"), + CheckBoxFilter("1940s", "1940s"), + CheckBoxFilter("1930s", "1930s"), + CheckBoxFilter("1920s", "1920s"), + CheckBoxFilter("1910s", "1910s") + ]), + GroupFilter("TypeFilter", "Type", [ + CheckBoxFilter("Movie", "movie"), + CheckBoxFilter("TV", "tv"), + CheckBoxFilter("OVA", "ova"), + CheckBoxFilter("ONA", "ona"), + CheckBoxFilter("Special", "special"), + CheckBoxFilter("Music", "music") + ]), + GroupFilter("StatusFilter", "Status", [ + CheckBoxFilter("Not Yet Aired", "info"), + CheckBoxFilter("Releasing", "releasing"), + CheckBoxFilter("Completed", "completed") + ]), + GroupFilter("LanguageFilter", "Language", [ + CheckBoxFilter("Sub and Dub", "subdub"), + CheckBoxFilter("Sub", "sub"), + CheckBoxFilter("Dub", "dub") + ]), + GroupFilter("RatingFilter", "Rating", [ + CheckBoxFilter("G - All Ages", "g"), + CheckBoxFilter("PG - Children", "pg"), + CheckBoxFilter("PG 13 - Teens 13 and Older", "pg_13"), + CheckBoxFilter("R - 17+, Violence & Profanity", "r"), + CheckBoxFilter("R+ - Profanity & Mild Nudity", "r+"), + CheckBoxFilter("Rx - Hentai", "rx") + ]), + ]; + } + + String ll(String url) { + if (url.contains("?")) { + return "&"; + } + return "?"; + } +} + +Map getMirrorPref() { + return { + "aniwave.to": "https://aniwave.to", + "aniwave.bz": "https://aniwave.bz", + "aniwave.ws": "https://aniwave.ws", + }; +} + +Aniwave main() { + return Aniwave(); +} diff --git a/anime/src/en/aniwave/source.dart b/anime/src/en/aniwave/source.dart index 7ae0c8e6..59f257b4 100644 --- a/anime/src/en/aniwave/source.dart +++ b/anime/src/en/aniwave/source.dart @@ -2,7 +2,7 @@ import '../../../../model/source.dart'; import '../../../../utils/utils.dart'; Source get aniwave => _aniwave; -const aniwaveVersion = "0.0.1"; +const aniwaveVersion = "0.0.15"; const aniwaveCodeUrl = "https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/anime/src/en/aniwave/aniwave-v$aniwaveVersion.dart"; Source _aniwave = Source( diff --git a/anime/src/en/gogoanime/gogoanime-v0.0.35.dart b/anime/src/en/gogoanime/gogoanime-v0.0.35.dart deleted file mode 100644 index a6731e88..00000000 --- a/anime/src/en/gogoanime/gogoanime-v0.0.35.dart +++ /dev/null @@ -1,165 +0,0 @@ -import 'package:mangayomi/bridge_lib.dart'; -import 'dart:convert'; - -class GogoAnime extends MProvider { - GogoAnime(); - - @override - Future getPopular(MSource source, int page) async { - final data = {"url": "${source.baseUrl}/popular.html?page=$page"}; - final res = await http('GET', json.encode(data)); - - List animeList = []; - final urls = xpath(res, '//*[@class="img"]/a/@href'); - final names = xpath(res, '//*[@class="img"]/a/@title'); - final images = xpath(res, '//*[@class="img"]/a/img/@src'); - - 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, true); - } - - @override - Future getLatestUpdates(MSource source, int page) async { - final data = { - "url": - "https://ajax.gogo-load.com/ajax/page-recent-release-ongoing.html?page=$page&type=1" - }; - final res = await http('GET', json.encode(data)); - - List animeList = []; - final urls = - xpath(res, '//*[@class="added_series_body popular"]/ul/li/a[1]/@href'); - final names = xpath( - res, '//*[//*[@class="added_series_body popular"]/ul/li/a[1]/@title'); - List images = []; - List imagess = xpath(res, - '//*[//*[@class="added_series_body popular"]/ul/li/a/div[@class="thumbnail-popular"]/@style'); - for (var url in imagess) { - images.add(url.replaceAll("background: url('", "").replaceAll("');", "")); - } - - 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, true); - } - - @override - Future search(MSource source, String query, int page) async { - final data = { - "url": "${source.baseUrl}/search.html?keyword=$query&page=$page" - }; - final res = await http('GET', json.encode(data)); - - List animeList = []; - final urls = xpath(res, '//*[@class="img"]/a/@href'); - final names = xpath(res, '//*[@class="img"]/a/@title'); - final images = xpath(res, '//*[@class="img"]/a/img/@src'); - - 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, true); - } - - @override - Future getDetail(MSource source, String url) async { - final statusList = [ - { - "Ongoing": 0, - "Completed": 1, - } - ]; - final data = {"url": "${source.baseUrl}$url"}; - final res = await http('GET', json.encode(data)); - MManga anime = MManga(); - final status = xpath( - res, '//*[@class="anime_info_body_bg"]/p[@class="type"][5]/text()') - .first - .replaceAll("Status: ", ""); - anime.description = xpath( - res, '//*[@class="anime_info_body_bg"]/p[@class="type"][2]/text()') - .first - .replaceAll("Plot Summary: ", ""); - anime.status = parseStatus(status, statusList); - anime.genre = xpath( - res, '//*[@class="anime_info_body_bg"]/p[@class="type"][3]/text()') - .first - .replaceAll("Genre: ", "") - .split(","); - - final id = xpath(res, '//*[@id="movie_id"]/@value').first; - final urlEp = - "https://ajax.gogo-load.com/ajax/load-list-episode?ep_start=0&ep_end=4000&id=$id"; - final dataEp = {"url": urlEp}; - final resEp = await http('GET', json.encode(dataEp)); - - final epUrls = xpath(resEp, '//*[@id="episode_related"]/li/a/@href'); - final names = xpath( - resEp, '//*[@id="episode_related"]/li/a/div[@class="name"]/text()'); - List episodes = []; - - for (var a in names) { - episodes.add("Episode ${substringAfterLast(a, ' ')}"); - } - List? episodesList = []; - for (var i = 0; i < episodes.length; i++) { - MChapter episode = MChapter(); - episode.name = episodes[i]; - episode.url = epUrls[i]; - episodesList.add(episode); - } - - anime.chapters = episodesList; - return anime; - } - - @override - Future> getVideoList(MSource source, String url) async { - final datas = {"url": "${source.baseUrl}$url"}; - - final res = await http('GET', json.encode(datas)); - final serverUrls = - xpath(res, '//*[@class="anime_muti_link"]/ul/li/a/@data-video'); - final classNames = xpath(res, '//*[@class="anime_muti_link"]/ul/li/@class'); - List videos = []; - for (var i = 0; i < classNames.length; i++) { - final name = classNames[i]; - final url = serverUrls[i]; - List a = []; - if (name.contains("anime")) { - a = await gogoCdnExtractor(url); - } else if (name.contains("vidcdn")) { - a = await gogoCdnExtractor(url); - } else if (name.contains("doodstream")) { - a = await doodExtractor(url); - } else if (name.contains("mp4upload")) { - a = await mp4UploadExtractor(url, null, "", ""); - } else if (name.contains("streamsb")) {} - videos.addAll(a); - } - - return videos; - } -} - -GogoAnime main() { - return GogoAnime(); -} diff --git a/anime/src/en/gogoanime/gogoanime-v0.0.4.dart b/anime/src/en/gogoanime/gogoanime-v0.0.4.dart new file mode 100644 index 00000000..dc0ba8dd --- /dev/null +++ b/anime/src/en/gogoanime/gogoanime-v0.0.4.dart @@ -0,0 +1,1031 @@ +import 'package:mangayomi/bridge_lib.dart'; +import 'dart:convert'; + +class GogoAnime extends MProvider { + GogoAnime(); + + @override + Future getPopular(MSource source, int page) async { + final data = {"url": "${source.baseUrl}/popular.html?page=$page"}; + final res = await http('GET', json.encode(data)); + + List animeList = []; + final urls = xpath(res, '//*[@class="img"]/a/@href'); + final names = xpath(res, '//*[@class="img"]/a/@title'); + final images = xpath(res, '//*[@class="img"]/a/img/@src'); + + 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, true); + } + + @override + Future getLatestUpdates(MSource source, int page) async { + final data = { + "url": + "https://ajax.gogo-load.com/ajax/page-recent-release-ongoing.html?page=$page&type=1" + }; + final res = await http('GET', json.encode(data)); + + List animeList = []; + final urls = + xpath(res, '//*[@class="added_series_body popular"]/ul/li/a[1]/@href'); + final names = xpath( + res, '//*[//*[@class="added_series_body popular"]/ul/li/a[1]/@title'); + List images = []; + List imagess = xpath(res, + '//*[//*[@class="added_series_body popular"]/ul/li/a/div[@class="thumbnail-popular"]/@style'); + for (var url in imagess) { + images.add(url.replaceAll("background: url('", "").replaceAll("');", "")); + } + + 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, true); + } + + @override + Future search( + MSource source, String query, int page, FilterList filterList) async { + final filters = filterList.filters; + String filterStr = ""; + String url = ""; + + String genre = ""; + String recent = ""; + String season = ""; + + for (var filter in filters) { + if (filter.type == "SortFilter") { + final sort = filter.values[filter.state].value; + filterStr += "&sort=$sort"; + } else if (filter.type == "GenreFilter") { + final genre = (filter.state as List).where((e) => e.state).toList(); + if (genre.isNotEmpty) { + for (var st in genre) { + filterStr += "&genre[]=${st.value}"; + } + } + } else if (filter.type == "CountryFilter") { + final country = (filter.state as List).where((e) => e.state).toList(); + if (country.isNotEmpty) { + for (var st in country) { + filterStr += "&country[]=${st.value}"; + } + } + } else if (filter.type == "SeasonFilter") { + final season = (filter.state as List).where((e) => e.state).toList(); + if (season.isNotEmpty) { + for (var st in season) { + filterStr += "&season[]=${st.value}"; + } + } + } else if (filter.type == "YearFilter") { + final year = (filter.state as List).where((e) => e.state).toList(); + if (year.isNotEmpty) { + for (var st in year) { + filterStr += "&year[]=${st.value}"; + } + } + } else if (filter.type == "TypeFilter") { + final type = (filter.state as List).where((e) => e.state).toList(); + if (type.isNotEmpty) { + for (var st in type) { + filterStr += "&type[]=${st.value}"; + } + } + } else if (filter.type == "StatusFilter") { + final status = (filter.state as List).where((e) => e.state).toList(); + if (status.isNotEmpty) { + for (var st in status) { + filterStr += "&status[]=${st.value}"; + } + } + } else if (filter.type == "LanguageFilter") { + final language = (filter.state as List).where((e) => e.state).toList(); + if (language.isNotEmpty) { + for (var st in language) { + filterStr += "&language[]=${st.value}"; + } + } + } + if (filter.type == "GenreIFilter") { + genre = filter.values[filter.state].value; + } else if (filter.type == "RecentFilter") { + recent = filter.values[filter.state].value; + } else if (filter.type == "SeasonIFilter") { + season = filter.values[filter.state].value; + } + } + if (genre.isNotEmpty) { + url = "${source.baseUrl}/genre/$genre?page=$page"; + } else if (recent.isNotEmpty) { + url = + "https://ajax.gogo-load.com/ajax/page-recent-release.html?page=$page&type=$recent"; + } else if (season.isNotEmpty) { + url = "${source.baseUrl}/$season?page=$page"; + } else { + url = "${source.baseUrl}/filter.html?keyword=$query$filterStr&page=$page"; + } + + final data = {"url": url}; + final res = await http('GET', json.encode(data)); + + List animeList = []; + final urls = xpath(res, '//*[@class="img"]/a/@href'); + final names = xpath(res, '//*[@class="img"]/a/@title'); + final images = xpath(res, '//*[@class="img"]/a/img/@src'); + + 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, true); + } + + @override + Future getDetail(MSource source, String url) async { + final statusList = [ + { + "Ongoing": 0, + "Completed": 1, + } + ]; + final data = {"url": "${source.baseUrl}$url"}; + final res = await http('GET', json.encode(data)); + MManga anime = MManga(); + final status = xpath( + res, '//*[@class="anime_info_body_bg"]/p[@class="type"][5]/text()') + .first + .replaceAll("Status: ", ""); + anime.description = xpath( + res, '//*[@class="anime_info_body_bg"]/p[@class="type"][2]/text()') + .first + .replaceAll("Plot Summary: ", ""); + anime.status = parseStatus(status, statusList); + anime.genre = xpath( + res, '//*[@class="anime_info_body_bg"]/p[@class="type"][3]/text()') + .first + .replaceAll("Genre: ", "") + .split(","); + + final id = xpath(res, '//*[@id="movie_id"]/@value').first; + final urlEp = + "https://ajax.gogo-load.com/ajax/load-list-episode?ep_start=0&ep_end=4000&id=$id"; + final dataEp = {"url": urlEp}; + final resEp = await http('GET', json.encode(dataEp)); + + final epUrls = xpath(resEp, '//*[@id="episode_related"]/li/a/@href'); + final names = xpath( + resEp, '//*[@id="episode_related"]/li/a/div[@class="name"]/text()'); + List episodes = []; + + for (var a in names) { + episodes.add("Episode ${substringAfterLast(a, ' ')}"); + } + List? episodesList = []; + for (var i = 0; i < episodes.length; i++) { + MChapter episode = MChapter(); + episode.name = episodes[i]; + episode.url = epUrls[i]; + episodesList.add(episode); + } + + anime.chapters = episodesList; + return anime; + } + + @override + Future> getVideoList(MSource source, String url) async { + final datas = {"url": "${source.baseUrl}$url"}; + + final res = await http('GET', json.encode(datas)); + final serverUrls = + xpath(res, '//*[@class="anime_muti_link"]/ul/li/a/@data-video'); + final serverNames = + xpath(res, '//*[@class="anime_muti_link"]/ul/li/@class'); + List videos = []; + for (var i = 0; i < serverNames.length; i++) { + final name = serverNames[i]; + final url = serverUrls[i]; + List a = []; + if (name.contains("anime")) { + a = await gogoCdnExtractor(url); + } else if (name.contains("vidcdn")) { + a = await gogoCdnExtractor(url); + } else if (name.contains("doodstream")) { + a = await doodExtractor(url); + } else if (name.contains("mp4upload")) { + a = await mp4UploadExtractor(url, null, "", ""); + } else if (name.contains("filelions")) { + a = await streamWishExtractor(url, "FileLions"); + } else if (name.contains("streamwish")) { + a = await streamWishExtractor(url, "StreamWish"); + } + videos.addAll(a); + } + + return videos; + } + + List getFilterList() { + return [ + HeaderFilter("Advanced search"), + GroupFilter("GenreFilter", "Genre", [ + { + "type": "CheckBox", + "filter": {"name": "Action", "value": "action"} + }, + { + "type": "CheckBox", + "filter": {"name": "Adult Cast", "value": "adult-cast"} + }, + { + "type": "CheckBox", + "filter": {"name": "Adventure", "value": "adventure"} + }, + { + "type": "CheckBox", + "filter": {"name": "Anthropomorphic", "value": "anthropomorphic"} + }, + { + "type": "CheckBox", + "filter": {"name": "Avant Garde", "value": "avant-garde"} + }, + { + "type": "CheckBox", + "filter": {"name": "Boys Love", "value": "shounen-ai"} + }, + { + "type": "CheckBox", + "filter": {"name": "Cars", "value": "cars"} + }, + { + "type": "CheckBox", + "filter": {"name": "CGDCT", "value": "cgdct"} + }, + { + "type": "CheckBox", + "filter": {"name": "Childcare", "value": "childcare"} + }, + { + "type": "CheckBox", + "filter": {"name": "Comedy", "value": "comedy"} + }, + { + "type": "CheckBox", + "filter": {"name": "Comic", "value": "comic"} + }, + { + "type": "CheckBox", + "filter": {"name": "Crime", "value": "crime"} + }, + { + "type": "CheckBox", + "filter": {"name": "Crossdressing", "value": "crossdressing"} + }, + { + "type": "CheckBox", + "filter": {"name": "Delinquents", "value": "delinquents"} + }, + { + "type": "CheckBox", + "filter": {"name": "Dementia", "value": "dementia"} + }, + { + "type": "CheckBox", + "filter": {"name": "Demons", "value": "demons"} + }, + { + "type": "CheckBox", + "filter": {"name": "Detective", "value": "detective"} + }, + { + "type": "CheckBox", + "filter": {"name": "Drama", "value": "drama"} + }, + { + "type": "CheckBox", + "filter": {"name": "Dub", "value": "dub"} + }, + { + "type": "CheckBox", + "filter": {"name": "Ecchi", "value": "ecchi"} + }, + { + "type": "CheckBox", + "filter": {"name": "Erotica", "value": "erotica"} + }, + { + "type": "CheckBox", + "filter": {"name": "Family", "value": "family"} + }, + { + "type": "CheckBox", + "filter": {"name": "Fantasy", "value": "fantasy"} + }, + { + "type": "CheckBox", + "filter": {"name": "Gag Humor", "value": "gag-humor"} + }, + { + "type": "CheckBox", + "filter": {"name": "Game", "value": "game"} + }, + { + "type": "CheckBox", + "filter": {"name": "Gender Bender", "value": "gender-bender"} + }, + { + "type": "CheckBox", + "filter": {"name": "Gore", "value": "gore"} + }, + { + "type": "CheckBox", + "filter": {"name": "Gourmet", "value": "gourmet"} + }, + { + "type": "CheckBox", + "filter": {"name": "Harem", "value": "harem"} + }, + { + "type": "CheckBox", + "filter": {"name": "Hentai", "value": "hentai"} + }, + { + "type": "CheckBox", + "filter": {"name": "High Stakes Game", "value": "high-stakes-game"} + }, + { + "type": "CheckBox", + "filter": {"name": "Historical", "value": "historical"} + }, + { + "type": "CheckBox", + "filter": {"name": "Horror", "value": "horror"} + }, + { + "type": "CheckBox", + "filter": {"name": "Isekai", "value": "isekai"} + }, + { + "type": "CheckBox", + "filter": {"name": "Iyashikei", "value": "iyashikei"} + }, + { + "type": "CheckBox", + "filter": {"name": "Josei", "value": "josei"} + }, + { + "type": "CheckBox", + "filter": {"name": "Kids", "value": "kids"} + }, + { + "type": "CheckBox", + "filter": {"name": "Magic", "value": "magic"} + }, + { + "type": "CheckBox", + "filter": {"name": "Magical Sex Shift", "value": "magical-sex-shift"} + }, + { + "type": "CheckBox", + "filter": {"name": "Mahou Shoujo", "value": "mahou-shoujo"} + }, + { + "type": "CheckBox", + "filter": {"name": "Martial Arts", "value": "martial-arts"} + }, + { + "type": "CheckBox", + "filter": {"name": "Mecha", "value": "mecha"} + }, + { + "type": "CheckBox", + "filter": {"name": "Medical", "value": "medical"} + }, + { + "type": "CheckBox", + "filter": {"name": "Military", "value": "military"} + }, + { + "type": "CheckBox", + "filter": {"name": "Music", "value": "music"} + }, + { + "type": "CheckBox", + "filter": {"name": "Mystery", "value": "mystery"} + }, + { + "type": "CheckBox", + "filter": {"name": "Mythology", "value": "mythology"} + }, + { + "type": "CheckBox", + "filter": {"name": "Organized Crime", "value": "organized-crime"} + }, + { + "type": "CheckBox", + "filter": {"name": "Parody", "value": "parody"} + }, + { + "type": "CheckBox", + "filter": {"name": "Performing Arts", "value": "performing-arts"} + }, + { + "type": "CheckBox", + "filter": {"name": "Pets", "value": "pets"} + }, + { + "type": "CheckBox", + "filter": {"name": "Police", "value": "police"} + }, + { + "type": "CheckBox", + "filter": {"name": "Psychological", "value": "psychological"} + }, + { + "type": "CheckBox", + "filter": {"name": "Racing", "value": "racing"} + }, + { + "type": "CheckBox", + "filter": {"name": "Reincarnation", "value": "reincarnation"} + }, + { + "type": "CheckBox", + "filter": {"name": "Romance", "value": "romance"} + }, + { + "type": "CheckBox", + "filter": {"name": "Romantic Subtext", "value": "romantic-subtext"} + }, + { + "type": "CheckBox", + "filter": {"name": "Samurai", "value": "samurai"} + }, + { + "type": "CheckBox", + "filter": {"name": "School", "value": "school"} + }, + { + "type": "CheckBox", + "filter": {"name": "Sci-Fi", "value": "sci-fi"} + }, + { + "type": "CheckBox", + "filter": {"name": "Seinen", "value": "seinen"} + }, + { + "type": "CheckBox", + "filter": {"name": "Shoujo", "value": "shoujo"} + }, + { + "type": "CheckBox", + "filter": {"name": "Shoujo Ai", "value": "shoujo-ai"} + }, + { + "type": "CheckBox", + "filter": {"name": "Shounen", "value": "shounen"} + }, + { + "type": "CheckBox", + "filter": {"name": "Showbiz", "value": "showbiz"} + }, + { + "type": "CheckBox", + "filter": {"name": "Slice of Life", "value": "slice-of-life"} + }, + { + "type": "CheckBox", + "filter": {"name": "Space", "value": "space"} + }, + { + "type": "CheckBox", + "filter": {"name": "Sports", "value": "sports"} + }, + { + "type": "CheckBox", + "filter": {"name": "Strategy Game", "value": "strategy-game"} + }, + { + "type": "CheckBox", + "filter": {"name": "Super Power", "value": "super-power"} + }, + { + "type": "CheckBox", + "filter": {"name": "Supernatural", "value": "supernatural"} + }, + { + "type": "CheckBox", + "filter": {"name": "Survival", "value": "survival"} + }, + { + "type": "CheckBox", + "filter": {"name": "Suspense", "value": "suspense"} + }, + { + "type": "CheckBox", + "filter": {"name": "Team Sports", "value": "team-sports"} + }, + { + "type": "CheckBox", + "filter": {"name": "Thriller", "value": "thriller"} + }, + { + "type": "CheckBox", + "filter": {"name": "Time Travel", "value": "time-travel"} + }, + { + "type": "CheckBox", + "filter": {"name": "Vampire", "value": "vampire"} + }, + { + "type": "CheckBox", + "filter": {"name": "Visual Arts", "value": "visual-arts"} + }, + { + "type": "CheckBox", + "filter": {"name": "Work Life", "value": "work-life"} + }, + { + "type": "CheckBox", + "filter": {"name": "Workplace", "value": "workplace"} + }, + { + "type": "CheckBox", + "filter": {"name": "Yaoi", "value": "yaoi"} + }, + { + "type": "CheckBox", + "filter": {"name": "Yuri", "value": "yuri"} + } + ]), + GroupFilter("CountryFilter", "Country", + [CheckBoxFilter("China", "5"), CheckBoxFilter("Japan", "2")]), + GroupFilter("SeasonFilter", "Season", [ + CheckBoxFilter("Fall", "fall"), + CheckBoxFilter("Summer", "summer"), + CheckBoxFilter("Spring", "spring"), + CheckBoxFilter("Winter", "winter"), + ]), + GroupFilter("YearFilter", "Year", [ + CheckBoxFilter("2023", "2023"), + CheckBoxFilter("2022", "2022"), + CheckBoxFilter("2021", "2021"), + CheckBoxFilter("2020", "2020"), + CheckBoxFilter("2019", "2019"), + CheckBoxFilter("2018", "2018"), + CheckBoxFilter("2017", "2017"), + CheckBoxFilter("2016", "2016"), + CheckBoxFilter("2015", "2015"), + CheckBoxFilter("2014", "2014"), + CheckBoxFilter("2013", "2013"), + CheckBoxFilter("2012", "2012"), + CheckBoxFilter("2011", "2011"), + CheckBoxFilter("2010", "2010"), + CheckBoxFilter("2009", "2009"), + CheckBoxFilter("2008", "2008"), + CheckBoxFilter("2007", "2007"), + CheckBoxFilter("2006", "2006"), + CheckBoxFilter("2005", "2005"), + CheckBoxFilter("2004", "2004"), + CheckBoxFilter("2003", "2003"), + CheckBoxFilter("2002", "2002"), + CheckBoxFilter("2001", "2001"), + CheckBoxFilter("2000", "2000"), + CheckBoxFilter("1999", "1999"), + ]), + GroupFilter("LanguageFilter", "Language", [ + CheckBoxFilter("Sub & Dub", "subdub"), + CheckBoxFilter("Sub", "sub"), + CheckBoxFilter("Dub", "dub"), + ]), + GroupFilter("TypeFilter", "Type", [ + CheckBoxFilter("Movie", "3"), + CheckBoxFilter("TV", "1"), + CheckBoxFilter("OVA", "26"), + CheckBoxFilter("ONA", "30"), + CheckBoxFilter("Special", "2"), + CheckBoxFilter("Music", "32"), + ]), + GroupFilter("StatusFilter", "Status", [ + CheckBoxFilter("Not Yet Aired", "Upcoming"), + CheckBoxFilter("Ongoing", "Ongoing"), + CheckBoxFilter("Completed", "Completed") + ]), + SelectFilter("SortFilter", "Sort by", 0, [ + SelectFilterOption("Name A-Z", "title_az"), + SelectFilterOption("Recently updated", "recently_updated"), + SelectFilterOption("Recently added", "recently_added"), + SelectFilterOption("Release date", "release_date") + ]), + SeparatorFilter(), + HeaderFilter("Select sub-page"), + HeaderFilter("Note: Ignores search & other filters"), + SelectFilter("GenreIFilter", "Genre", 0, [ + { + "type": "SelectOption", + "filter": {"name": "", "value": ""} + }, + { + "type": "SelectOption", + "filter": {"name": "Action", "value": "action"} + }, + { + "type": "SelectOption", + "filter": {"name": "Adult Cast", "value": "adult-cast"} + }, + { + "type": "SelectOption", + "filter": {"name": "Adventure", "value": "adventure"} + }, + { + "type": "SelectOption", + "filter": {"name": "Anthropomorphic", "value": "anthropomorphic"} + }, + { + "type": "SelectOption", + "filter": {"name": "Avant Garde", "value": "avant-garde"} + }, + { + "type": "SelectOption", + "filter": {"name": "Boys Love", "value": "shounen-ai"} + }, + { + "type": "SelectOption", + "filter": {"name": "Cars", "value": "cars"} + }, + { + "type": "SelectOption", + "filter": {"name": "CGDCT", "value": "cgdct"} + }, + { + "type": "SelectOption", + "filter": {"name": "Childcare", "value": "childcare"} + }, + { + "type": "SelectOption", + "filter": {"name": "Comedy", "value": "comedy"} + }, + { + "type": "SelectOption", + "filter": {"name": "Comic", "value": "comic"} + }, + { + "type": "SelectOption", + "filter": {"name": "Crime", "value": "crime"} + }, + { + "type": "SelectOption", + "filter": {"name": "Crossdressing", "value": "crossdressing"} + }, + { + "type": "SelectOption", + "filter": {"name": "Delinquents", "value": "delinquents"} + }, + { + "type": "SelectOption", + "filter": {"name": "Dementia", "value": "dementia"} + }, + { + "type": "SelectOption", + "filter": {"name": "Demons", "value": "demons"} + }, + { + "type": "SelectOption", + "filter": {"name": "Detective", "value": "detective"} + }, + { + "type": "SelectOption", + "filter": {"name": "Drama", "value": "drama"} + }, + { + "type": "SelectOption", + "filter": {"name": "Dub", "value": "dub"} + }, + { + "type": "SelectOption", + "filter": {"name": "Ecchi", "value": "ecchi"} + }, + { + "type": "SelectOption", + "filter": {"name": "Erotica", "value": "erotica"} + }, + { + "type": "SelectOption", + "filter": {"name": "Family", "value": "family"} + }, + { + "type": "SelectOption", + "filter": {"name": "Fantasy", "value": "fantasy"} + }, + { + "type": "SelectOption", + "filter": {"name": "Gag Humor", "value": "gag-humor"} + }, + { + "type": "SelectOption", + "filter": {"name": "Game", "value": "game"} + }, + { + "type": "SelectOption", + "filter": {"name": "Gender Bender", "value": "gender-bender"} + }, + { + "type": "SelectOption", + "filter": {"name": "Gore", "value": "gore"} + }, + { + "type": "SelectOption", + "filter": {"name": "Gourmet", "value": "gourmet"} + }, + { + "type": "SelectOption", + "filter": {"name": "Harem", "value": "harem"} + }, + { + "type": "SelectOption", + "filter": {"name": "Hentai", "value": "hentai"} + }, + { + "type": "SelectOption", + "filter": {"name": "High Stakes Game", "value": "high-stakes-game"} + }, + { + "type": "SelectOption", + "filter": {"name": "Historical", "value": "historical"} + }, + { + "type": "SelectOption", + "filter": {"name": "Horror", "value": "horror"} + }, + { + "type": "SelectOption", + "filter": {"name": "Isekai", "value": "isekai"} + }, + { + "type": "SelectOption", + "filter": {"name": "Iyashikei", "value": "iyashikei"} + }, + { + "type": "SelectOption", + "filter": {"name": "Josei", "value": "josei"} + }, + { + "type": "SelectOption", + "filter": {"name": "Kids", "value": "kids"} + }, + { + "type": "SelectOption", + "filter": {"name": "Magic", "value": "magic"} + }, + { + "type": "SelectOption", + "filter": {"name": "Magical Sex Shift", "value": "magical-sex-shift"} + }, + { + "type": "SelectOption", + "filter": {"name": "Mahou Shoujo", "value": "mahou-shoujo"} + }, + { + "type": "SelectOption", + "filter": {"name": "Martial Arts", "value": "martial-arts"} + }, + { + "type": "SelectOption", + "filter": {"name": "Mecha", "value": "mecha"} + }, + { + "type": "SelectOption", + "filter": {"name": "Medical", "value": "medical"} + }, + { + "type": "SelectOption", + "filter": {"name": "Military", "value": "military"} + }, + { + "type": "SelectOption", + "filter": {"name": "Music", "value": "music"} + }, + { + "type": "SelectOption", + "filter": {"name": "Mystery", "value": "mystery"} + }, + { + "type": "SelectOption", + "filter": {"name": "Mythology", "value": "mythology"} + }, + { + "type": "SelectOption", + "filter": {"name": "Organized Crime", "value": "organized-crime"} + }, + { + "type": "SelectOption", + "filter": {"name": "Parody", "value": "parody"} + }, + { + "type": "SelectOption", + "filter": {"name": "Performing Arts", "value": "performing-arts"} + }, + { + "type": "SelectOption", + "filter": {"name": "Pets", "value": "pets"} + }, + { + "type": "SelectOption", + "filter": {"name": "Police", "value": "police"} + }, + { + "type": "SelectOption", + "filter": {"name": "Psychological", "value": "psychological"} + }, + { + "type": "SelectOption", + "filter": {"name": "Racing", "value": "racing"} + }, + { + "type": "SelectOption", + "filter": {"name": "Reincarnation", "value": "reincarnation"} + }, + { + "type": "SelectOption", + "filter": {"name": "Romance", "value": "romance"} + }, + { + "type": "SelectOption", + "filter": {"name": "Romantic Subtext", "value": "romantic-subtext"} + }, + { + "type": "SelectOption", + "filter": {"name": "Samurai", "value": "samurai"} + }, + { + "type": "SelectOption", + "filter": {"name": "School", "value": "school"} + }, + { + "type": "SelectOption", + "filter": {"name": "Sci-Fi", "value": "sci-fi"} + }, + { + "type": "SelectOption", + "filter": {"name": "Seinen", "value": "seinen"} + }, + { + "type": "SelectOption", + "filter": {"name": "Shoujo", "value": "shoujo"} + }, + { + "type": "SelectOption", + "filter": {"name": "Shoujo Ai", "value": "shoujo-ai"} + }, + { + "type": "SelectOption", + "filter": {"name": "Shounen", "value": "shounen"} + }, + { + "type": "SelectOption", + "filter": {"name": "Showbiz", "value": "showbiz"} + }, + { + "type": "SelectOption", + "filter": {"name": "Slice of Life", "value": "slice-of-life"} + }, + { + "type": "SelectOption", + "filter": {"name": "Space", "value": "space"} + }, + { + "type": "SelectOption", + "filter": {"name": "Sports", "value": "sports"} + }, + { + "type": "SelectOption", + "filter": {"name": "Strategy Game", "value": "strategy-game"} + }, + { + "type": "SelectOption", + "filter": {"name": "Super Power", "value": "super-power"} + }, + { + "type": "SelectOption", + "filter": {"name": "Supernatural", "value": "supernatural"} + }, + { + "type": "SelectOption", + "filter": {"name": "Survival", "value": "survival"} + }, + { + "type": "SelectOption", + "filter": {"name": "Suspense", "value": "suspense"} + }, + { + "type": "SelectOption", + "filter": {"name": "Team Sports", "value": "team-sports"} + }, + { + "type": "SelectOption", + "filter": {"name": "Thriller", "value": "thriller"} + }, + { + "type": "SelectOption", + "filter": {"name": "Time Travel", "value": "time-travel"} + }, + { + "type": "SelectOption", + "filter": {"name": "Vampire", "value": "vampire"} + }, + { + "type": "SelectOption", + "filter": {"name": "Visual Arts", "value": "visual-arts"} + }, + { + "type": "SelectOption", + "filter": {"name": "Work Life", "value": "work-life"} + }, + { + "type": "SelectOption", + "filter": {"name": "Workplace", "value": "workplace"} + }, + { + "type": "SelectOption", + "filter": {"name": "Yaoi", "value": "yaoi"} + }, + { + "type": "SelectOption", + "filter": {"name": "Yuri", "value": "yuri"} + } + ]), + SelectFilter("RecentFilter", "Recent", 0, [ + SelectFilterOption("", ""), + SelectFilterOption("Recent Release", "1"), + SelectFilterOption("Recent Dub", "2"), + SelectFilterOption("Recent Chinese", "3") + ]), + SelectFilter("SeasonIFilter", "Season", 0, [ + SelectFilterOption("", ""), + SelectFilterOption("Latest season", "new-season.html"), + SelectFilterOption("Summer 2023", "sub-category/summer-2023-anime"), + SelectFilterOption("Spring 2023", "sub-category/spring-2023-anime"), + SelectFilterOption("Winter 2023", "sub-category/winter-2023-anime"), + SelectFilterOption("Fall 2022", "sub-category/fall-2022-anime"), + SelectFilterOption("Summer 2022", "sub-category/summer-2022-anime"), + SelectFilterOption("Spring 2022", "sub-category/spring-2022-anime"), + SelectFilterOption("Winter 2022", "sub-category/winter-2022-anime"), + SelectFilterOption("Fall 2021", "sub-category/fall-2021-anime"), + SelectFilterOption("Summer 2021", "sub-category/summer-2021-anime"), + SelectFilterOption("Spring 2021", "sub-category/spring-2021-anime"), + SelectFilterOption("Winter 2021", "sub-category/winter-2021-anime"), + SelectFilterOption("Fall 2020", "sub-category/fall-2020-anime"), + SelectFilterOption("Summer 2020", "sub-category/summer-2020-anime"), + SelectFilterOption("Spring 2020", "sub-category/spring-2020-anime"), + SelectFilterOption("Winter 2020", "sub-category/winter-2020-anime"), + SelectFilterOption("Fall 2019", "sub-category/fall-2019-anime"), + SelectFilterOption("Summer 2019", "sub-category/summer-2019-anime"), + SelectFilterOption("Spring 2019", "sub-category/spring-2019-anime"), + SelectFilterOption("Winter 2019", "sub-category/winter-2019-anime"), + SelectFilterOption("Fall 2018", "sub-category/fall-2018-anime"), + SelectFilterOption("Summer 2018", "sub-category/summer-2018-anime"), + SelectFilterOption("Spring 2018", "sub-category/spring-2018-anime"), + SelectFilterOption("Winter 2018", "sub-category/winter-2018-anime"), + SelectFilterOption("Fall 2017", "sub-category/fall-2017-anime"), + SelectFilterOption("Summer 2017", "sub-category/summer-2017-anime"), + SelectFilterOption("Spring 2017", "sub-category/spring-2017-anime"), + SelectFilterOption("Winter 2017", "sub-category/winter-2017-anime"), + SelectFilterOption("Fall 2016", "sub-category/fall-2016-anime"), + SelectFilterOption("Summer 2016", "sub-category/summer-2016-anime"), + SelectFilterOption("Spring 2016", "sub-category/spring-2016-anime"), + SelectFilterOption("Winter 2016", "sub-category/winter-2016-anime"), + SelectFilterOption("Fall 2015", "sub-category/fall-2015-anime"), + SelectFilterOption("Summer 2015", "sub-category/summer-2015-anime"), + SelectFilterOption("Spring 2015", "sub-category/spring-2015-anime"), + SelectFilterOption("Winter 2015", "sub-category/winter-2015-anime"), + SelectFilterOption("Fall 2014", "sub-category/fall-2014-anime"), + SelectFilterOption("Summer 2014", "sub-category/summer-2014-anime"), + SelectFilterOption("Spring 2014", "sub-category/spring-2014-anime"), + SelectFilterOption("Winter 2014", "sub-category/winter-2014-anime") + ]), + ]; + } +} + +GogoAnime main() { + return GogoAnime(); +} diff --git a/anime/src/en/gogoanime/source.dart b/anime/src/en/gogoanime/source.dart index f375e6b8..88ef15c7 100644 --- a/anime/src/en/gogoanime/source.dart +++ b/anime/src/en/gogoanime/source.dart @@ -2,12 +2,12 @@ import '../../../../model/source.dart'; import '../../../../utils/utils.dart'; Source get gogoanimeSource => _gogoanimeSource; -const gogoanimeVersion = "0.0.35"; +const gogoanimeVersion = "0.0.4"; const gogoanimeSourceCodeUrl = "https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/anime/src/en/gogoanime/gogoanime-v$gogoanimeVersion.dart"; Source _gogoanimeSource = Source( name: "Gogoanime", - baseUrl: "https://gogoanime.tel", + baseUrl: "https://gogoanime3.net", lang: "en", typeSource: "single", iconUrl: getIconUrl("gogoanime", "en"), diff --git a/anime/src/en/kisskh/kisskh-v0.0.3.dart b/anime/src/en/kisskh/kisskh-v0.0.35.dart similarity index 97% rename from anime/src/en/kisskh/kisskh-v0.0.3.dart rename to anime/src/en/kisskh/kisskh-v0.0.35.dart index 2362f09c..8eadfa3f 100644 --- a/anime/src/en/kisskh/kisskh-v0.0.3.dart +++ b/anime/src/en/kisskh/kisskh-v0.0.35.dart @@ -57,7 +57,8 @@ class KissKh extends MProvider { } @override - Future search(MSource source, String query, int page) async { + Future search( + MSource source, String query, int page, FilterList filterList) async { final data = { "url": "${source.baseUrl}/api/DramaList/Search?q=$query&type=0" }; diff --git a/anime/src/en/kisskh/source.dart b/anime/src/en/kisskh/source.dart index 04801528..079ccc11 100644 --- a/anime/src/en/kisskh/source.dart +++ b/anime/src/en/kisskh/source.dart @@ -2,7 +2,7 @@ import '../../../../model/source.dart'; import '../../../../utils/utils.dart'; Source get kisskhSource => _kisskhSource; -const kisskhVersion = "0.0.3"; +const kisskhVersion = "0.0.35"; const kisskhSourceCodeUrl = "https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/anime/src/en/kisskh/kisskh-v$kisskhVersion.dart"; Source _kisskhSource = Source( diff --git a/anime/src/fr/animesultra/animesultra-v0.0.35.dart b/anime/src/fr/animesultra/animesultra-v0.0.4.dart similarity index 98% rename from anime/src/fr/animesultra/animesultra-v0.0.35.dart rename to anime/src/fr/animesultra/animesultra-v0.0.4.dart index eff595f1..b4c3b89e 100644 --- a/anime/src/fr/animesultra/animesultra-v0.0.35.dart +++ b/anime/src/fr/animesultra/animesultra-v0.0.4.dart @@ -53,7 +53,8 @@ class AnimesUltra extends MProvider { } @override - Future search(MSource source, String query, int page) async { + Future search( + MSource source, String query, int page, FilterList filterList) async { final data = {"url": "${source.baseUrl}/"}; final res = await http('GET', json.encode(data)); diff --git a/anime/src/fr/animesultra/source.dart b/anime/src/fr/animesultra/source.dart index 9f6dd51a..d4c4d0cd 100644 --- a/anime/src/fr/animesultra/source.dart +++ b/anime/src/fr/animesultra/source.dart @@ -2,7 +2,7 @@ import '../../../../model/source.dart'; import '../../../../utils/utils.dart'; Source get animesultraSource => _animesultraSource; -const animesultraVersion = "0.0.35"; +const animesultraVersion = "0.0.4"; const animesultraSourceCodeUrl = "https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/anime/src/fr/animesultra/animesultra-v$animesultraVersion.dart"; Source _animesultraSource = Source( diff --git a/anime/src/fr/franime/franime-v0.0.35.dart b/anime/src/fr/franime/franime-v0.0.4.dart similarity index 99% rename from anime/src/fr/franime/franime-v0.0.35.dart rename to anime/src/fr/franime/franime-v0.0.4.dart index 0174b04c..9aedeb81 100644 --- a/anime/src/fr/franime/franime-v0.0.35.dart +++ b/anime/src/fr/franime/franime-v0.0.4.dart @@ -24,7 +24,8 @@ class FrAnime extends MProvider { } @override - Future search(MSource source, String query, int page) async { + Future search( + MSource source, String query, int page, FilterList filterList) async { final res = await dataBase(); return animeSeachFetch(res, query); diff --git a/anime/src/fr/franime/source.dart b/anime/src/fr/franime/source.dart index a0030b38..0643414b 100644 --- a/anime/src/fr/franime/source.dart +++ b/anime/src/fr/franime/source.dart @@ -2,7 +2,7 @@ import '../../../../model/source.dart'; import '../../../../utils/utils.dart'; Source get franimeSource => _franimeSource; -const franimeVersion = "0.0.35"; +const franimeVersion = "0.0.4"; const franimeSourceCodeUrl = "https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/anime/src/fr/franime/franime-v$franimeVersion.dart"; Source _franimeSource = Source( diff --git a/anime/src/fr/otakufr/otakufr-v0.0.35.dart b/anime/src/fr/otakufr/otakufr-v0.0.4.dart similarity index 98% rename from anime/src/fr/otakufr/otakufr-v0.0.35.dart rename to anime/src/fr/otakufr/otakufr-v0.0.4.dart index bf5853e8..5e0d0cc3 100644 --- a/anime/src/fr/otakufr/otakufr-v0.0.35.dart +++ b/anime/src/fr/otakufr/otakufr-v0.0.4.dart @@ -71,7 +71,8 @@ class OtakuFr extends MProvider { } @override - Future search(MSource source, String query, int page) async { + Future search( + MSource source, String query, int page, FilterList filterList) async { final data = { "url": "${source.baseUrl}/toute-la-liste-affiches/page/$page/?q=$query" }; diff --git a/anime/src/fr/otakufr/source.dart b/anime/src/fr/otakufr/source.dart index 5c45aca1..c9495929 100644 --- a/anime/src/fr/otakufr/source.dart +++ b/anime/src/fr/otakufr/source.dart @@ -2,7 +2,7 @@ import '../../../../model/source.dart'; import '../../../../utils/utils.dart'; Source get otakufr => _otakufr; -const otakufrVersion = "0.0.35"; +const otakufrVersion = "0.0.4"; const otakufrCodeUrl = "https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/anime/src/fr/otakufr/otakufr-v$otakufrVersion.dart"; Source _otakufr = Source( diff --git a/anime/src/id/nimegami/nimegami-v0.0.2.dart b/anime/src/id/nimegami/nimegami-v0.0.25.dart similarity index 98% rename from anime/src/id/nimegami/nimegami-v0.0.2.dart rename to anime/src/id/nimegami/nimegami-v0.0.25.dart index ebf36fbf..61bc269e 100644 --- a/anime/src/id/nimegami/nimegami-v0.0.2.dart +++ b/anime/src/id/nimegami/nimegami-v0.0.25.dart @@ -46,7 +46,8 @@ class NimeGami extends MProvider { } @override - Future search(MSource source, String query, int page) async { + Future search( + MSource source, String query, int page, FilterList filterList) async { final data = { "url": "${source.baseUrl}/page/$page/?s=$query&post_type=post" }; diff --git a/anime/src/id/nimegami/source.dart b/anime/src/id/nimegami/source.dart index 02224d21..afe74542 100644 --- a/anime/src/id/nimegami/source.dart +++ b/anime/src/id/nimegami/source.dart @@ -2,7 +2,7 @@ import '../../../../model/source.dart'; import '../../../../utils/utils.dart'; Source get nimegami => _nimegami; -const nimegamiVersion = "0.0.2"; +const nimegamiVersion = "0.0.25"; const nimegamiCodeUrl = "https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/anime/src/id/nimegami/nimegami-v$nimegamiVersion.dart"; Source _nimegami = Source( diff --git a/anime/src/id/oploverz/oploverz-v0.0.1.dart b/anime/src/id/oploverz/oploverz-v0.0.15.dart similarity index 93% rename from anime/src/id/oploverz/oploverz-v0.0.1.dart rename to anime/src/id/oploverz/oploverz-v0.0.15.dart index 4884749b..d2e00156 100644 --- a/anime/src/id/oploverz/oploverz-v0.0.1.dart +++ b/anime/src/id/oploverz/oploverz-v0.0.15.dart @@ -23,7 +23,8 @@ class OploVerz extends MProvider { } @override - Future search(MSource source, String query, int page) async { + Future search( + MSource source, String query, int page, FilterList filterList) async { final data = { "url": "${source.baseUrl}/anime-list/page/$page/?title=$query" }; @@ -95,15 +96,14 @@ class OploVerz extends MProvider { })); final playerLink = xpath(ress, '//iframe[@class="playeriframe"]/@src').first; - print(playerLink); final resPlayer = await http('GET', json.encode({"url": playerLink})); var resJson = substringBefore(substringAfter(resPlayer, "= "), "<"); - var streams = json.decode(resJson)["streams"] as List; + var streams = + json.decode(getMapValue(resJson, "streams", encode: true)) as List; List videos = []; for (var stream in streams) { - print(stream["play_url"]); - final videoUrl = stream["play_url"]; - final quality = getQuality(stream["format_id"]); + final videoUrl = getMapValue(stream, "play_url"); + final quality = getQuality(getMapValue(stream, "format_id")); MVideo video = MVideo(); video diff --git a/anime/src/id/oploverz/source.dart b/anime/src/id/oploverz/source.dart index 8a43fbd3..8b184b9e 100644 --- a/anime/src/id/oploverz/source.dart +++ b/anime/src/id/oploverz/source.dart @@ -2,7 +2,7 @@ import '../../../../model/source.dart'; import '../../../../utils/utils.dart'; Source get oploverz => _oploverz; -const oploverzVersion = "0.0.1"; +const oploverzVersion = "0.0.15"; const oploverzCodeUrl = "https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/anime/src/id/oploverz/oploverz-v$oploverzVersion.dart"; Source _oploverz = Source( diff --git a/anime/src/id/otakudesu/otakudesu-v0.0.2.dart b/anime/src/id/otakudesu/otakudesu-v0.0.25.dart similarity index 98% rename from anime/src/id/otakudesu/otakudesu-v0.0.2.dart rename to anime/src/id/otakudesu/otakudesu-v0.0.25.dart index 3e811601..66e36dc8 100644 --- a/anime/src/id/otakudesu/otakudesu-v0.0.2.dart +++ b/anime/src/id/otakudesu/otakudesu-v0.0.25.dart @@ -19,7 +19,8 @@ class OtakuDesu extends MProvider { } @override - Future search(MSource source, String query, int page) async { + Future search( + MSource source, String query, int page, FilterList filterList) async { final data = {"url": "${source.baseUrl}/?s=$query&post_type=anime"}; final res = await http('GET', json.encode(data)); List animeList = []; diff --git a/anime/src/id/otakudesu/source.dart b/anime/src/id/otakudesu/source.dart index 7c47291a..4c30ad29 100644 --- a/anime/src/id/otakudesu/source.dart +++ b/anime/src/id/otakudesu/source.dart @@ -2,7 +2,7 @@ import '../../../../model/source.dart'; import '../../../../utils/utils.dart'; Source get otakudesu => _otakudesu; -const otakudesuVersion = "0.0.2"; +const otakudesuVersion = "0.0.25"; const otakudesuCodeUrl = "https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/anime/src/id/otakudesu/otakudesu-v$otakudesuVersion.dart"; Source _otakudesu = Source( diff --git a/manga/multisrc/nepnep/nepnep-v0.0.4.dart b/manga/multisrc/nepnep/nepnep-v0.0.4.dart index 4e203c1b..524dd4aa 100644 --- a/manga/multisrc/nepnep/nepnep-v0.0.4.dart +++ b/manga/multisrc/nepnep/nepnep-v0.0.4.dart @@ -60,39 +60,39 @@ class NepNep extends MProvider { if (filter.type == "ScanStatusFilter") { if (filter.state != 0) { queryRes = queryRes.where((e) { - final name = getMapValue(json.encode(e), 'ss'); - return name.toLowerCase().contains( + final value = getMapValue(json.encode(e), 'ss'); + return value.toLowerCase().contains( (filter.values[filter.state].value as String).toLowerCase()); }).toList(); } } else if (filter.type == "PublishStatusFilter") { if (filter.state != 0) { queryRes = queryRes.where((e) { - final name = getMapValue(json.encode(e), 'ps'); - return name.toLowerCase().contains( + final value = getMapValue(json.encode(e), 'ps'); + return value.toLowerCase().contains( (filter.values[filter.state].value as String).toLowerCase()); }).toList(); } } else if (filter.type == "TypeFilter") { if (filter.state != 0) { queryRes = queryRes.where((e) { - final name = getMapValue(json.encode(e), 't'); - return name.toLowerCase().contains( + final value = getMapValue(json.encode(e), 't'); + return value.toLowerCase().contains( (filter.values[filter.state].value as String).toLowerCase()); }).toList(); } } else if (filter.type == "TranslationFilter") { if (filter.state != 0) { queryRes = queryRes.where((e) { - final name = getMapValue(json.encode(e), 'o'); - return name.toLowerCase().contains("yes"); + final value = getMapValue(json.encode(e), 'o'); + return value.toLowerCase().contains("yes"); }).toList(); } } else if (filter.type == "YearFilter") { if (filter.state.isNotEmpty) { queryRes = queryRes.where((e) { - final name = getMapValue(json.encode(e), 'y'); - return name + final value = getMapValue(json.encode(e), 'y'); + return value .toLowerCase() .contains((filter.name as String).toLowerCase()); }).toList(); @@ -100,8 +100,8 @@ class NepNep extends MProvider { } else if (filter.type == "AuthorFilter") { if (filter.state.isNotEmpty) { queryRes = queryRes.where((e) { - final name = getMapValue(json.encode(e), 'a'); - return name + final value = getMapValue(json.encode(e), 'a'); + return value .toLowerCase() .contains((filter.name as String).toLowerCase()); }).toList(); @@ -116,8 +116,8 @@ class NepNep extends MProvider { if (included.isNotEmpty) { for (var val in included) { queryRes = queryRes.where((e) { - final name = getMapValue(json.encode(e), 'g'); - return name + final value = getMapValue(json.encode(e), 'g'); + return value .toLowerCase() .contains((val.value as String).toLowerCase()); }).toList(); @@ -126,8 +126,8 @@ class NepNep extends MProvider { if (excluded.isNotEmpty) { for (var val in excluded) { queryRes = queryRes.where((e) { - final name = getMapValue(json.encode(e), 'g'); - return !(name + final value = getMapValue(json.encode(e), 'g'); + return !(value .toLowerCase() .contains((val.value as String).toLowerCase())); }).toList(); From 5599c9f8a315364b3a706a2a871ca6968937a39a Mon Sep 17 00:00:00 2001 From: kodjomoustapha <107993382+kodjodevf@users.noreply.github.com> Date: Tue, 28 Nov 2023 17:56:26 +0100 Subject: [PATCH 6/7] Update --- anime/src/en/aniwave/source.dart | 1 - anime/src/id/nimegami/source.dart | 1 - anime/src/id/oploverz/source.dart | 1 - anime/src/id/otakudesu/source.dart | 2 -- index.json | 2 +- model/source.dart | 2 +- 6 files changed, 2 insertions(+), 7 deletions(-) diff --git a/anime/src/en/aniwave/source.dart b/anime/src/en/aniwave/source.dart index 59f257b4..f0e53a31 100644 --- a/anime/src/en/aniwave/source.dart +++ b/anime/src/en/aniwave/source.dart @@ -13,5 +13,4 @@ Source _aniwave = Source( iconUrl: getIconUrl("aniwave", "en"), sourceCodeUrl: aniwaveCodeUrl, version: aniwaveVersion, - appMinVerReq: "0.0.8", isManga: false); diff --git a/anime/src/id/nimegami/source.dart b/anime/src/id/nimegami/source.dart index afe74542..4ab64615 100644 --- a/anime/src/id/nimegami/source.dart +++ b/anime/src/id/nimegami/source.dart @@ -13,5 +13,4 @@ Source _nimegami = Source( iconUrl: getIconUrl("nimegami", "id"), sourceCodeUrl: nimegamiCodeUrl, version: nimegamiVersion, - appMinVerReq: "0.0.8", isManga: false); diff --git a/anime/src/id/oploverz/source.dart b/anime/src/id/oploverz/source.dart index 8b184b9e..290be7f0 100644 --- a/anime/src/id/oploverz/source.dart +++ b/anime/src/id/oploverz/source.dart @@ -13,5 +13,4 @@ Source _oploverz = Source( iconUrl: getIconUrl("oploverz", "id"), sourceCodeUrl: oploverzCodeUrl, version: oploverzVersion, - appMinVerReq: "0.0.7", isManga: false); diff --git a/anime/src/id/otakudesu/source.dart b/anime/src/id/otakudesu/source.dart index 4c30ad29..86725950 100644 --- a/anime/src/id/otakudesu/source.dart +++ b/anime/src/id/otakudesu/source.dart @@ -12,6 +12,4 @@ Source _otakudesu = Source( typeSource: "single", iconUrl: getIconUrl("otakudesu", "id"), sourceCodeUrl: otakudesuCodeUrl, - version: otakudesuVersion, - appMinVerReq: "0.0.8", isManga: false); diff --git a/index.json b/index.json index 94cb6036..61c38be7 100644 --- a/index.json +++ b/index.json @@ -1 +1 @@ -[{"name":"FR-Scan","id":669019889,"baseUrl":"https://fr-scan.com","lang":"fr","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-fr-frscan.png","dateFormat":"MMMM d, yyyy","dateFormatLocale":"fr","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/multisrc/madara/madara-v0.0.35.dart","apiUrl":"","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"AstralManga","id":1028022993,"baseUrl":"https://astral-manga.fr","lang":"fr","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-fr-astralmanga.png","dateFormat":"dd/mm/yyyy","dateFormatLocale":"fr","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/multisrc/madara/madara-v0.0.35.dart","apiUrl":"","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Akuma no Tenshi","id":556872410,"baseUrl":"https://akumanotenshi.com","lang":"pt-BR","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-pt-akumanotenshi.png","dateFormat":"dd/MM/yyyy","dateFormatLocale":"pt-BR","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/multisrc/madara/madara-v0.0.35.dart","apiUrl":"","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Adult Webtoon","id":772321498,"baseUrl":"https://adultwebtoon.com","lang":"en","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-en-adultwebtoon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"en_US","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/multisrc/madara/madara-v0.0.35.dart","apiUrl":"","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"ArazNovel","id":966932111,"baseUrl":"https://www.araznovel.com","lang":"tr","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-tr-araznovel.png","dateFormat":"d MMMM yyyy","dateFormatLocale":"en","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/multisrc/madara/madara-v0.0.35.dart","apiUrl":"","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"BestManga","id":926276360,"baseUrl":"https://bestmanga.club","lang":"ru","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-ru-bestmanga.png","dateFormat":"dd.MM.yyyy","dateFormatLocale":"ru","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/multisrc/madara/madara-v0.0.35.dart","apiUrl":"","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Chibi Manga","id":105430403,"baseUrl":"https://www.cmreader.info","lang":"en","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-en-chibimanga.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"en_US","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/multisrc/madara/madara-v0.0.35.dart","apiUrl":"","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"EvaScans","id":439004766,"baseUrl":"https://evascans.com","lang":"tr","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-tr-evascans.png","dateFormat":"MMM d, yyy","dateFormatLocale":"tr","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/multisrc/madara/madara-v0.0.35.dart","apiUrl":"","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Final Scans","id":477960837,"baseUrl":"https://finalscans.com","lang":"pt-br","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-pt-finalscans.png","dateFormat":"MMMM d, yyyy","dateFormatLocale":"pt-BR","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/multisrc/madara/madara-v0.0.35.dart","apiUrl":"","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Glory Manga","id":284318957,"baseUrl":"https://glorymanga.com","lang":"tr","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-tr-glorymanga.png","dateFormat":"dd/MM/yyy","dateFormatLocale":"tr","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/multisrc/madara/madara-v0.0.35.dart","apiUrl":"","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Its Your Right Manhua","id":71580703,"baseUrl":"https://itsyourightmanhua.com/","lang":"en","typeSource":"madara","iconUrl":"","dateFormat":"MMMM d, yyyy","dateFormatLocale":"en_US","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/multisrc/madara/madara-v0.0.35.dart","apiUrl":"","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"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/icons/mangayomi-pt-kamisamaexplorer.png","dateFormat":"dd 'de' MMMM 'de' yyyy","dateFormatLocale":"pt-BR","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/multisrc/madara/madara-v0.0.35.dart","apiUrl":"","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"KSGroupScans","id":374902680,"baseUrl":"https://ksgroupscans.com","lang":"en","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-en-ksgroupscans.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"en_US","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/multisrc/madara/madara-v0.0.35.dart","apiUrl":"","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"LHTranslation","id":21247797,"baseUrl":"https://lhtranslation.net","lang":"en","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-en-lhtranslation.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"en_US","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/multisrc/madara/madara-v0.0.35.dart","apiUrl":"","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Lolicon","id":526980015,"baseUrl":"https://lolicon.mobi","lang":"en","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-en-lolicon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"en_US","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/multisrc/madara/madara-v0.0.35.dart","apiUrl":"","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"MangaVisa","id":433907810,"baseUrl":"https://mangavisa.com","lang":"en","typeSource":"madara","iconUrl":"","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"en_US","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/multisrc/madara/madara-v0.0.35.dart","apiUrl":"","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Manga District","id":281100270,"baseUrl":"https://mangadistrict.com","lang":"en","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-en-mangadistrict.png","dateFormat":"MMMM d, yyyy","dateFormatLocale":"en_US","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/multisrc/madara/madara-v0.0.35.dart","apiUrl":"","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"MangaFreak.online","id":223793266,"baseUrl":"https://mangafreak.online","lang":"en","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-en-mangafreakonline.png","dateFormat":"d MMMM، yyy","dateFormatLocale":"en_US","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/multisrc/madara/madara-v0.0.35.dart","apiUrl":"","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"MangaGreat","id":1054806605,"baseUrl":"https://mangagreat.com","lang":"en","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-en-mangagreat.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"en_US","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/multisrc/madara/madara-v0.0.35.dart","apiUrl":"","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Manga Read","id":256879643,"baseUrl":"https://mangaread.co","lang":"en","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-en-mangaread.png","dateFormat":"yyyy-MM-dd","dateFormatLocale":"en_US","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/multisrc/madara/madara-v0.0.35.dart","apiUrl":"","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"MangaRolls","id":720109919,"baseUrl":"https://mangarolls.com","lang":"en","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-en-mangarolls.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"en_US","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/multisrc/madara/madara-v0.0.35.dart","apiUrl":"","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Manga Şehri","id":865354788,"baseUrl":"https://mangasehri.com","lang":"tr","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-tr-mangasehri.png","dateFormat":"dd/MM/yyy","dateFormatLocale":"tr","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/multisrc/madara/madara-v0.0.35.dart","apiUrl":"","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Mangasushi","id":224429716,"baseUrl":"https://mangasushi.org","lang":"en","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-en-mangasushi.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"en_US","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/multisrc/madara/madara-v0.0.35.dart","apiUrl":"","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Manhwa68","id":1002141127,"baseUrl":"https://manhwa68.com","lang":"en","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-en-manhwa68.png","dateFormat":"MMMM d, yyyy","dateFormatLocale":"en_US","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/multisrc/madara/madara-v0.0.35.dart","apiUrl":"","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Milftoon","id":381914974,"baseUrl":"https://milftoon.xxx","lang":"en","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-en-milftoon.png","dateFormat":"d MMMM, yyyy","dateFormatLocale":"en_US","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/multisrc/madara/madara-v0.0.35.dart","apiUrl":"","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"NovelCrow","id":768834856,"baseUrl":"https://novelcrow.com","lang":"en","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-en-novelcrow.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"en_US","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/multisrc/madara/madara-v0.0.35.dart","apiUrl":"","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Rio2 Manga","id":110090511,"baseUrl":"https://rio2manga.com","lang":"en","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-en-rio2manga.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"en_US","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/multisrc/madara/madara-v0.0.35.dart","apiUrl":"","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Romantik Manga","id":944131896,"baseUrl":"https://romantikmanga.com","lang":"tr","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-tr-romantikmanga.png","dateFormat":"MMM d, yyy","dateFormatLocale":"tr","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/multisrc/madara/madara-v0.0.35.dart","apiUrl":"","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Taurus Fansub","id":1036726988,"baseUrl":"https://taurusfansub.com","lang":"es","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-es-taurusfansub.png","dateFormat":"dd/MM/yyy","dateFormatLocale":"es","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/multisrc/madara/madara-v0.0.35.dart","apiUrl":"","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Tatakae Scan","id":296744306,"baseUrl":"https://tatakaescan.com","lang":"pt-BR","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-pt-tatakaescan.png","dateFormat":"dd 'de' MMMMM 'de' yyyy","dateFormatLocale":"pt-BR","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/multisrc/madara/madara-v0.0.35.dart","apiUrl":"","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Tortuga Ceviri","id":294602572,"baseUrl":"https://tortuga-ceviri.com","lang":"tr","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-tr-tortugaceviri.png","dateFormat":"MMMM d, yyyy","dateFormatLocale":"tr","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/multisrc/madara/madara-v0.0.35.dart","apiUrl":"","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Yuri Verso","id":756257030,"baseUrl":"https://yuri.live","lang":"pt-br","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-pt-yuriverso.png","dateFormat":"dd/MM/yyyy","dateFormatLocale":"pt-BR","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/multisrc/madara/madara-v0.0.35.dart","apiUrl":"","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Zero Scan","id":637786379,"baseUrl":"https://zeroscan.com.br","lang":"pt-br","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-pt-zeroscan.png","dateFormat":"dd/MM/yyyy","dateFormatLocale":"pt-BR","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/multisrc/madara/madara-v0.0.35.dart","apiUrl":"","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Comick","id":370890607,"baseUrl":"https://comick.app","lang":"all","typeSource":"comick","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-comickfun.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/manga/src/all/comick/comick-v0.0.35.dart","apiUrl":"https://api.comick.fun","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Comick","id":955190069,"baseUrl":"https://comick.app","lang":"en","typeSource":"comick","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-comickfun.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/manga/src/all/comick/comick-v0.0.35.dart","apiUrl":"https://api.comick.fun","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Comick","id":494197461,"baseUrl":"https://comick.app","lang":"pt-br","typeSource":"comick","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-comickfun.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/manga/src/all/comick/comick-v0.0.35.dart","apiUrl":"https://api.comick.fun","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Comick","id":1050814052,"baseUrl":"https://comick.app","lang":"ru","typeSource":"comick","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-comickfun.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/manga/src/all/comick/comick-v0.0.35.dart","apiUrl":"https://api.comick.fun","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Comick","id":380505196,"baseUrl":"https://comick.app","lang":"fr","typeSource":"comick","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-comickfun.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/manga/src/all/comick/comick-v0.0.35.dart","apiUrl":"https://api.comick.fun","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Comick","id":296390197,"baseUrl":"https://comick.app","lang":"es-419","typeSource":"comick","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-comickfun.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/manga/src/all/comick/comick-v0.0.35.dart","apiUrl":"https://api.comick.fun","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Comick","id":242913014,"baseUrl":"https://comick.app","lang":"pl","typeSource":"comick","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-comickfun.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/manga/src/all/comick/comick-v0.0.35.dart","apiUrl":"https://api.comick.fun","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Comick","id":507059585,"baseUrl":"https://comick.app","lang":"tr","typeSource":"comick","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-comickfun.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/manga/src/all/comick/comick-v0.0.35.dart","apiUrl":"https://api.comick.fun","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Comick","id":851891714,"baseUrl":"https://comick.app","lang":"it","typeSource":"comick","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-comickfun.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/manga/src/all/comick/comick-v0.0.35.dart","apiUrl":"https://api.comick.fun","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Comick","id":115169439,"baseUrl":"https://comick.app","lang":"es","typeSource":"comick","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-comickfun.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/manga/src/all/comick/comick-v0.0.35.dart","apiUrl":"https://api.comick.fun","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Comick","id":719269008,"baseUrl":"https://comick.app","lang":"id","typeSource":"comick","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-comickfun.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/manga/src/all/comick/comick-v0.0.35.dart","apiUrl":"https://api.comick.fun","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Comick","id":719759654,"baseUrl":"https://comick.app","lang":"hu","typeSource":"comick","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-comickfun.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/manga/src/all/comick/comick-v0.0.35.dart","apiUrl":"https://api.comick.fun","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Comick","id":301477894,"baseUrl":"https://comick.app","lang":"vi","typeSource":"comick","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-comickfun.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/manga/src/all/comick/comick-v0.0.35.dart","apiUrl":"https://api.comick.fun","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Comick","id":113594984,"baseUrl":"https://comick.app","lang":"zh-hk","typeSource":"comick","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-comickfun.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/manga/src/all/comick/comick-v0.0.35.dart","apiUrl":"https://api.comick.fun","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Comick","id":602472856,"baseUrl":"https://comick.app","lang":"ar","typeSource":"comick","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-comickfun.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/manga/src/all/comick/comick-v0.0.35.dart","apiUrl":"https://api.comick.fun","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Comick","id":401493183,"baseUrl":"https://comick.app","lang":"de","typeSource":"comick","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-comickfun.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/manga/src/all/comick/comick-v0.0.35.dart","apiUrl":"https://api.comick.fun","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Comick","id":752155292,"baseUrl":"https://comick.app","lang":"zh","typeSource":"comick","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-comickfun.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/manga/src/all/comick/comick-v0.0.35.dart","apiUrl":"https://api.comick.fun","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Comick","id":1069764002,"baseUrl":"https://comick.app","lang":"ca","typeSource":"comick","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-comickfun.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/manga/src/all/comick/comick-v0.0.35.dart","apiUrl":"https://api.comick.fun","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Comick","id":678531099,"baseUrl":"https://comick.app","lang":"bg","typeSource":"comick","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-comickfun.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/manga/src/all/comick/comick-v0.0.35.dart","apiUrl":"https://api.comick.fun","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Comick","id":311480598,"baseUrl":"https://comick.app","lang":"th","typeSource":"comick","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-comickfun.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/manga/src/all/comick/comick-v0.0.35.dart","apiUrl":"https://api.comick.fun","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Comick","id":141560456,"baseUrl":"https://comick.app","lang":"fa","typeSource":"comick","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-comickfun.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/manga/src/all/comick/comick-v0.0.35.dart","apiUrl":"https://api.comick.fun","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Comick","id":8261465,"baseUrl":"https://comick.app","lang":"uk","typeSource":"comick","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-comickfun.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/manga/src/all/comick/comick-v0.0.35.dart","apiUrl":"https://api.comick.fun","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Comick","id":565474938,"baseUrl":"https://comick.app","lang":"mn","typeSource":"comick","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-comickfun.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/manga/src/all/comick/comick-v0.0.35.dart","apiUrl":"https://api.comick.fun","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Comick","id":533803532,"baseUrl":"https://comick.app","lang":"ro","typeSource":"comick","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-comickfun.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/manga/src/all/comick/comick-v0.0.35.dart","apiUrl":"https://api.comick.fun","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Comick","id":459976450,"baseUrl":"https://comick.app","lang":"he","typeSource":"comick","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-comickfun.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/manga/src/all/comick/comick-v0.0.35.dart","apiUrl":"https://api.comick.fun","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Comick","id":375702775,"baseUrl":"https://comick.app","lang":"ms","typeSource":"comick","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-comickfun.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/manga/src/all/comick/comick-v0.0.35.dart","apiUrl":"https://api.comick.fun","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Comick","id":737984097,"baseUrl":"https://comick.app","lang":"tl","typeSource":"comick","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-comickfun.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/manga/src/all/comick/comick-v0.0.35.dart","apiUrl":"https://api.comick.fun","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Comick","id":796489006,"baseUrl":"https://comick.app","lang":"ja","typeSource":"comick","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-comickfun.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/manga/src/all/comick/comick-v0.0.35.dart","apiUrl":"https://api.comick.fun","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Comick","id":683471552,"baseUrl":"https://comick.app","lang":"hi","typeSource":"comick","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-comickfun.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/manga/src/all/comick/comick-v0.0.35.dart","apiUrl":"https://api.comick.fun","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Comick","id":778623467,"baseUrl":"https://comick.app","lang":"my","typeSource":"comick","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-comickfun.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/manga/src/all/comick/comick-v0.0.35.dart","apiUrl":"https://api.comick.fun","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Comick","id":1065236294,"baseUrl":"https://comick.app","lang":"ko","typeSource":"comick","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-comickfun.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/manga/src/all/comick/comick-v0.0.35.dart","apiUrl":"https://api.comick.fun","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Comick","id":422767524,"baseUrl":"https://comick.app","lang":"cs","typeSource":"comick","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-comickfun.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/manga/src/all/comick/comick-v0.0.35.dart","apiUrl":"https://api.comick.fun","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Comick","id":678647945,"baseUrl":"https://comick.app","lang":"pt","typeSource":"comick","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-comickfun.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/manga/src/all/comick/comick-v0.0.35.dart","apiUrl":"https://api.comick.fun","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Comick","id":698202010,"baseUrl":"https://comick.app","lang":"nl","typeSource":"comick","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-comickfun.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/manga/src/all/comick/comick-v0.0.35.dart","apiUrl":"https://api.comick.fun","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Comick","id":359879447,"baseUrl":"https://comick.app","lang":"sv","typeSource":"comick","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-comickfun.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/manga/src/all/comick/comick-v0.0.35.dart","apiUrl":"https://api.comick.fun","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Comick","id":532878423,"baseUrl":"https://comick.app","lang":"bn","typeSource":"comick","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-comickfun.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/manga/src/all/comick/comick-v0.0.35.dart","apiUrl":"https://api.comick.fun","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Comick","id":481504622,"baseUrl":"https://comick.app","lang":"no","typeSource":"comick","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-comickfun.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/manga/src/all/comick/comick-v0.0.35.dart","apiUrl":"https://api.comick.fun","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Comick","id":112887841,"baseUrl":"https://comick.app","lang":"lt","typeSource":"comick","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-comickfun.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/manga/src/all/comick/comick-v0.0.35.dart","apiUrl":"https://api.comick.fun","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Comick","id":824905526,"baseUrl":"https://comick.app","lang":"el","typeSource":"comick","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-comickfun.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/manga/src/all/comick/comick-v0.0.35.dart","apiUrl":"https://api.comick.fun","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Comick","id":373675453,"baseUrl":"https://comick.app","lang":"sr","typeSource":"comick","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-comickfun.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/manga/src/all/comick/comick-v0.0.35.dart","apiUrl":"https://api.comick.fun","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Comick","id":574420905,"baseUrl":"https://comick.app","lang":"da","typeSource":"comick","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-comickfun.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/manga/src/all/comick/comick-v0.0.35.dart","apiUrl":"https://api.comick.fun","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"MangaDex","id":202373705,"baseUrl":"https://mangadex.org","lang":"ar","typeSource":"mangadex","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-mangadex.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/manga/src/all/mangadex/mangadex-v0.0.4.dart","apiUrl":"https://api.mangadex.org","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"MangaDex","id":860658373,"baseUrl":"https://mangadex.org","lang":"bn","typeSource":"mangadex","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-mangadex.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/manga/src/all/mangadex/mangadex-v0.0.4.dart","apiUrl":"https://api.mangadex.org","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"MangaDex","id":722270529,"baseUrl":"https://mangadex.org","lang":"bg","typeSource":"mangadex","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-mangadex.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/manga/src/all/mangadex/mangadex-v0.0.4.dart","apiUrl":"https://api.mangadex.org","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"MangaDex","id":978675083,"baseUrl":"https://mangadex.org","lang":"my","typeSource":"mangadex","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-mangadex.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/manga/src/all/mangadex/mangadex-v0.0.4.dart","apiUrl":"https://api.mangadex.org","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"MangaDex","id":689496451,"baseUrl":"https://mangadex.org","lang":"ca","typeSource":"mangadex","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-mangadex.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/manga/src/all/mangadex/mangadex-v0.0.4.dart","apiUrl":"https://api.mangadex.org","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"MangaDex","id":593575397,"baseUrl":"https://mangadex.org","lang":"zh","typeSource":"mangadex","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-mangadex.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/manga/src/all/mangadex/mangadex-v0.0.4.dart","apiUrl":"https://api.mangadex.org","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"MangaDex","id":115179159,"baseUrl":"https://mangadex.org","lang":"zh-hk","typeSource":"mangadex","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-mangadex.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/manga/src/all/mangadex/mangadex-v0.0.4.dart","apiUrl":"https://api.mangadex.org","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"MangaDex","id":869144666,"baseUrl":"https://mangadex.org","lang":"cs","typeSource":"mangadex","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-mangadex.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/manga/src/all/mangadex/mangadex-v0.0.4.dart","apiUrl":"https://api.mangadex.org","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"MangaDex","id":846142909,"baseUrl":"https://mangadex.org","lang":"da","typeSource":"mangadex","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-mangadex.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/manga/src/all/mangadex/mangadex-v0.0.4.dart","apiUrl":"https://api.mangadex.org","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"MangaDex","id":841149659,"baseUrl":"https://mangadex.org","lang":"nl","typeSource":"mangadex","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-mangadex.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/manga/src/all/mangadex/mangadex-v0.0.4.dart","apiUrl":"https://api.mangadex.org","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"MangaDex","id":810342358,"baseUrl":"https://mangadex.org","lang":"en","typeSource":"mangadex","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-mangadex.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/manga/src/all/mangadex/mangadex-v0.0.4.dart","apiUrl":"https://api.mangadex.org","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"MangaDex","id":309024312,"baseUrl":"https://mangadex.org","lang":"tl","typeSource":"mangadex","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-mangadex.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/manga/src/all/mangadex/mangadex-v0.0.4.dart","apiUrl":"https://api.mangadex.org","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"MangaDex","id":164642544,"baseUrl":"https://mangadex.org","lang":"fi","typeSource":"mangadex","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-mangadex.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/manga/src/all/mangadex/mangadex-v0.0.4.dart","apiUrl":"https://api.mangadex.org","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"MangaDex","id":545017689,"baseUrl":"https://mangadex.org","lang":"fr","typeSource":"mangadex","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-mangadex.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/manga/src/all/mangadex/mangadex-v0.0.4.dart","apiUrl":"https://api.mangadex.org","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"MangaDex","id":110023605,"baseUrl":"https://mangadex.org","lang":"de","typeSource":"mangadex","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-mangadex.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/manga/src/all/mangadex/mangadex-v0.0.4.dart","apiUrl":"https://api.mangadex.org","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"MangaDex","id":767687578,"baseUrl":"https://mangadex.org","lang":"el","typeSource":"mangadex","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-mangadex.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/manga/src/all/mangadex/mangadex-v0.0.4.dart","apiUrl":"https://api.mangadex.org","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"MangaDex","id":511907642,"baseUrl":"https://mangadex.org","lang":"he","typeSource":"mangadex","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-mangadex.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/manga/src/all/mangadex/mangadex-v0.0.4.dart","apiUrl":"https://api.mangadex.org","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"MangaDex","id":986826068,"baseUrl":"https://mangadex.org","lang":"hi","typeSource":"mangadex","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-mangadex.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/manga/src/all/mangadex/mangadex-v0.0.4.dart","apiUrl":"https://api.mangadex.org","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"MangaDex","id":128441350,"baseUrl":"https://mangadex.org","lang":"hu","typeSource":"mangadex","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-mangadex.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/manga/src/all/mangadex/mangadex-v0.0.4.dart","apiUrl":"https://api.mangadex.org","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"MangaDex","id":183977130,"baseUrl":"https://mangadex.org","lang":"id","typeSource":"mangadex","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-mangadex.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/manga/src/all/mangadex/mangadex-v0.0.4.dart","apiUrl":"https://api.mangadex.org","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"MangaDex","id":127887438,"baseUrl":"https://mangadex.org","lang":"it","typeSource":"mangadex","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-mangadex.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/manga/src/all/mangadex/mangadex-v0.0.4.dart","apiUrl":"https://api.mangadex.org","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"MangaDex","id":204112007,"baseUrl":"https://mangadex.org","lang":"ja","typeSource":"mangadex","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-mangadex.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/manga/src/all/mangadex/mangadex-v0.0.4.dart","apiUrl":"https://api.mangadex.org","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"MangaDex","id":1063442064,"baseUrl":"https://mangadex.org","lang":"kk","typeSource":"mangadex","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-mangadex.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/manga/src/all/mangadex/mangadex-v0.0.4.dart","apiUrl":"https://api.mangadex.org","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"MangaDex","id":898061477,"baseUrl":"https://mangadex.org","lang":"ko","typeSource":"mangadex","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-mangadex.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/manga/src/all/mangadex/mangadex-v0.0.4.dart","apiUrl":"https://api.mangadex.org","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"MangaDex","id":387646759,"baseUrl":"https://mangadex.org","lang":"la","typeSource":"mangadex","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-mangadex.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/manga/src/all/mangadex/mangadex-v0.0.4.dart","apiUrl":"https://api.mangadex.org","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"MangaDex","id":270482698,"baseUrl":"https://mangadex.org","lang":"lt","typeSource":"mangadex","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-mangadex.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/manga/src/all/mangadex/mangadex-v0.0.4.dart","apiUrl":"https://api.mangadex.org","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"MangaDex","id":284400542,"baseUrl":"https://mangadex.org","lang":"ms","typeSource":"mangadex","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-mangadex.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/manga/src/all/mangadex/mangadex-v0.0.4.dart","apiUrl":"https://api.mangadex.org","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"MangaDex","id":525041874,"baseUrl":"https://mangadex.org","lang":"mn","typeSource":"mangadex","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-mangadex.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/manga/src/all/mangadex/mangadex-v0.0.4.dart","apiUrl":"https://api.mangadex.org","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"MangaDex","id":613632949,"baseUrl":"https://mangadex.org","lang":"ne","typeSource":"mangadex","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-mangadex.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/manga/src/all/mangadex/mangadex-v0.0.4.dart","apiUrl":"https://api.mangadex.org","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"MangaDex","id":441032670,"baseUrl":"https://mangadex.org","lang":"no","typeSource":"mangadex","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-mangadex.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/manga/src/all/mangadex/mangadex-v0.0.4.dart","apiUrl":"https://api.mangadex.org","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"MangaDex","id":693311514,"baseUrl":"https://mangadex.org","lang":"fa","typeSource":"mangadex","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-mangadex.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/manga/src/all/mangadex/mangadex-v0.0.4.dart","apiUrl":"https://api.mangadex.org","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"MangaDex","id":683661227,"baseUrl":"https://mangadex.org","lang":"pl","typeSource":"mangadex","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-mangadex.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/manga/src/all/mangadex/mangadex-v0.0.4.dart","apiUrl":"https://api.mangadex.org","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"MangaDex","id":417850874,"baseUrl":"https://mangadex.org","lang":"pt-br","typeSource":"mangadex","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-mangadex.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/manga/src/all/mangadex/mangadex-v0.0.4.dart","apiUrl":"https://api.mangadex.org","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"MangaDex","id":1027115198,"baseUrl":"https://mangadex.org","lang":"pt","typeSource":"mangadex","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-mangadex.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/manga/src/all/mangadex/mangadex-v0.0.4.dart","apiUrl":"https://api.mangadex.org","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"MangaDex","id":399589398,"baseUrl":"https://mangadex.org","lang":"ro","typeSource":"mangadex","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-mangadex.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/manga/src/all/mangadex/mangadex-v0.0.4.dart","apiUrl":"https://api.mangadex.org","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"MangaDex","id":367421943,"baseUrl":"https://mangadex.org","lang":"ru","typeSource":"mangadex","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-mangadex.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/manga/src/all/mangadex/mangadex-v0.0.4.dart","apiUrl":"https://api.mangadex.org","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"MangaDex","id":254140838,"baseUrl":"https://mangadex.org","lang":"sh","typeSource":"mangadex","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-mangadex.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/manga/src/all/mangadex/mangadex-v0.0.4.dart","apiUrl":"https://api.mangadex.org","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"MangaDex","id":823535267,"baseUrl":"https://mangadex.org","lang":"es-419","typeSource":"mangadex","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-mangadex.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/manga/src/all/mangadex/mangadex-v0.0.4.dart","apiUrl":"https://api.mangadex.org","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"MangaDex","id":736630443,"baseUrl":"https://mangadex.org","lang":"es","typeSource":"mangadex","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-mangadex.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/manga/src/all/mangadex/mangadex-v0.0.4.dart","apiUrl":"https://api.mangadex.org","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"MangaDex","id":146351677,"baseUrl":"https://mangadex.org","lang":"sv","typeSource":"mangadex","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-mangadex.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/manga/src/all/mangadex/mangadex-v0.0.4.dart","apiUrl":"https://api.mangadex.org","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"MangaDex","id":739930809,"baseUrl":"https://mangadex.org","lang":"ta","typeSource":"mangadex","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-mangadex.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/manga/src/all/mangadex/mangadex-v0.0.4.dart","apiUrl":"https://api.mangadex.org","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"MangaDex","id":385031783,"baseUrl":"https://mangadex.org","lang":"th","typeSource":"mangadex","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-mangadex.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/manga/src/all/mangadex/mangadex-v0.0.4.dart","apiUrl":"https://api.mangadex.org","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"MangaDex","id":1008587213,"baseUrl":"https://mangadex.org","lang":"tr","typeSource":"mangadex","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-mangadex.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/manga/src/all/mangadex/mangadex-v0.0.4.dart","apiUrl":"https://api.mangadex.org","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"MangaDex","id":778357609,"baseUrl":"https://mangadex.org","lang":"uk","typeSource":"mangadex","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-mangadex.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/manga/src/all/mangadex/mangadex-v0.0.4.dart","apiUrl":"https://api.mangadex.org","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"MangaDex","id":88174952,"baseUrl":"https://mangadex.org","lang":"vi","typeSource":"mangadex","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-mangadex.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/manga/src/all/mangadex/mangadex-v0.0.4.dart","apiUrl":"https://api.mangadex.org","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Beast Scans","id":1051043161,"baseUrl":"https://beast-scans.com","lang":"ar","typeSource":"","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-ar-beastscans.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"ar","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/multisrc/mangareader/mangareader-v0.0.45.dart","apiUrl":"","version":"0.0.45","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Lelmanga","id":35877276,"baseUrl":"https://www.lelmanga.com","lang":"fr","typeSource":"","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-fr-lelmanga.png","dateFormat":"MMMM d, yyyy","dateFormatLocale":"en","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/multisrc/mangareader/mangareader-v0.0.45.dart","apiUrl":"","version":"0.0.45","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Asura Scans","id":524070078,"baseUrl":"https://asuratoon.com/","lang":"en","typeSource":"","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-en-asurascans.png","dateFormat":"MMM d, yyyy","dateFormatLocale":"en_US","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/multisrc/mangareader/mangareader-v0.0.45.dart","apiUrl":"","version":"0.0.45","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"KomikLab Scans","id":932554594,"baseUrl":"https://komiklab.com","lang":"en","typeSource":"","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-komiklab.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"en_US","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/multisrc/mangareader/mangareader-v0.0.45.dart","apiUrl":"","version":"0.0.45","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Azure Scans","id":316512590,"baseUrl":"https://azuremanga.com","lang":"en","typeSource":"","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-en-azurescans.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"en_US","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/multisrc/mangareader/mangareader-v0.0.45.dart","apiUrl":"","version":"0.0.45","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Cosmic Scans","id":938687459,"baseUrl":"https://cosmicscans.com","lang":"en","typeSource":"","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-en-cosmicscans.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"en_US","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/multisrc/mangareader/mangareader-v0.0.45.dart","apiUrl":"","version":"0.0.45","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"CosmicScans.id","id":1053293978,"baseUrl":"https://cosmicscans.id","lang":"id","typeSource":"","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-id-cosmicscansid.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"en_US","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/multisrc/mangareader/mangareader-v0.0.45.dart","apiUrl":"","version":"0.0.45","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Dojing.net","id":725568407,"baseUrl":"https://dojing.net","lang":"id","typeSource":"","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-id-dojingnet.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"en_US","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/multisrc/mangareader/mangareader-v0.0.45.dart","apiUrl":"","version":"0.0.45","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"DuniaKomik.id","id":326969052,"baseUrl":"https://duniakomik.id","lang":"id","typeSource":"","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-id-duniakomikid.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"id","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/multisrc/mangareader/mangareader-v0.0.45.dart","apiUrl":"","version":"0.0.45","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Gecenin Lordu","id":622207049,"baseUrl":"https://geceninlordu.com","lang":"tr","typeSource":"","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-tr-geceninlordu.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"en_US","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/multisrc/mangareader/mangareader-v0.0.45.dart","apiUrl":"","version":"0.0.45","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Infernal Void Scans","id":460393112,"baseUrl":"https://void-scans.com","lang":"en","typeSource":"","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-en-infernalvoidscans.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"en_US","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/multisrc/mangareader/mangareader-v0.0.45.dart","apiUrl":"","version":"0.0.45","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"KataKomik","id":61302571,"baseUrl":"https://katakomik.online","lang":"id","typeSource":"","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-id-katakomik.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"en_US","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/multisrc/mangareader/mangareader-v0.0.45.dart","apiUrl":"","version":"0.0.45","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Kanzenin","id":729954705,"baseUrl":"https://kanzenin.xyz","lang":"id","typeSource":"","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-id-kanzenin.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"en_US","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/multisrc/mangareader/mangareader-v0.0.45.dart","apiUrl":"","version":"0.0.45","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Komik Station","id":866615506,"baseUrl":"https://komikstation.co","lang":"id","typeSource":"","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-id-komikstation.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"id","isNsfw":false,"hasCloudflare":true,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/multisrc/mangareader/mangareader-v0.0.45.dart","apiUrl":"","version":"0.0.45","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"KomikMama","id":148959602,"baseUrl":"https://komikmama.co","lang":"id","typeSource":"","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-id-komikmama.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"id","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/multisrc/mangareader/mangareader-v0.0.45.dart","apiUrl":"","version":"0.0.45","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"KumaPoi","id":855502386,"baseUrl":"https://kumapoi.club","lang":"id","typeSource":"","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-id-kumapoi.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"id","isNsfw":true,"hasCloudflare":true,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/multisrc/mangareader/mangareader-v0.0.45.dart","apiUrl":"","version":"0.0.45","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Komiku.com","id":869906392,"baseUrl":"https://komiku.com","lang":"id","typeSource":"","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-id-komikucom.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"id","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/multisrc/mangareader/mangareader-v0.0.45.dart","apiUrl":"","version":"0.0.45","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Legacy Scans","id":310973833,"baseUrl":"https://legacy-scans.com","lang":"fr","typeSource":"","iconUrl":"","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"en_US","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/multisrc/mangareader/mangareader-v0.0.45.dart","apiUrl":"","version":"0.0.45","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Magus Manga","id":487156426,"baseUrl":"https://magusmanga.com","lang":"ar","typeSource":"","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-ar-magusmanga.png","dateFormat":"MMMMM d, yyyy","dateFormatLocale":"ar","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/multisrc/mangareader/mangareader-v0.0.45.dart","apiUrl":"","version":"0.0.45","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Manga Indo.me","id":425166803,"baseUrl":"https://mangaindo.me","lang":"id","typeSource":"","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-id-mangaindome.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"en_US","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/multisrc/mangareader/mangareader-v0.0.45.dart","apiUrl":"","version":"0.0.45","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Mangacim","id":642410916,"baseUrl":"https://www.mangacim.com","lang":"tr","typeSource":"","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-tr-mangacim.png","dateFormat":"MMM d, yyy","dateFormatLocale":"tr","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/multisrc/mangareader/mangareader-v0.0.45.dart","apiUrl":"","version":"0.0.45","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"MangaTale","id":343986734,"baseUrl":"https://mangatale.co","lang":"id","typeSource":"","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-id-mangatale.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"id","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/multisrc/mangareader/mangareader-v0.0.45.dart","apiUrl":"","version":"0.0.45","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"MangaWT","id":1014190199,"baseUrl":"https://mangawt.com","lang":"tr","typeSource":"","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-tr-mangawt.png","dateFormat":"MMM d, yyyy","dateFormatLocale":"tr","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/multisrc/mangareader/mangareader-v0.0.45.dart","apiUrl":"","version":"0.0.45","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Manhwax","id":188130307,"baseUrl":"https://manhwax.com","lang":"en","typeSource":"","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-en-manhwax.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"en_US","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/multisrc/mangareader/mangareader-v0.0.45.dart","apiUrl":"","version":"0.0.45","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"MELOKOMIK","id":532392938,"baseUrl":"https://melokomik.xyz","lang":"id","typeSource":"","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-id-melokomik.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"id","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/multisrc/mangareader/mangareader-v0.0.45.dart","apiUrl":"","version":"0.0.45","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Mihentai","id":59058359,"baseUrl":"https://mihentai.com","lang":"all","typeSource":"","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-mihentai.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"en_US","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/multisrc/mangareader/mangareader-v0.0.45.dart","apiUrl":"","version":"0.0.45","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Mundo Mangá-Kun","id":870058031,"baseUrl":"https://mundomangakun.com.br","lang":"pt-br","typeSource":"","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-pt-mundomangakun.png","dateFormat":"MMMMM dd, yyyy","dateFormatLocale":"pt-BR","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/multisrc/mangareader/mangareader-v0.0.45.dart","apiUrl":"","version":"0.0.45","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Origami Orpheans","id":261849744,"baseUrl":"https://origami-orpheans.com.br","lang":"pt-br","typeSource":"","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-pt-origamiorpheans.png","dateFormat":"MMMMM dd, yyyy","dateFormatLocale":"pt-BR","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/multisrc/mangareader/mangareader-v0.0.45.dart","apiUrl":"","version":"0.0.45","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"PhenixScans","id":984162065,"baseUrl":"https://phenixscans.fr","lang":"fr","typeSource":"","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-fr-phenixscans.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"fr","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/multisrc/mangareader/mangareader-v0.0.45.dart","apiUrl":"","version":"0.0.45","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Pi Scans","id":548699583,"baseUrl":"https://piscans.in","lang":"id","typeSource":"","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-id-piscans.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"en_US","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/multisrc/mangareader/mangareader-v0.0.45.dart","apiUrl":"","version":"0.0.45","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Raiki Scan","id":550138305,"baseUrl":"https://raikiscan.com","lang":"es","typeSource":"","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-es-raikiscan.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"en_US","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/multisrc/mangareader/mangareader-v0.0.45.dart","apiUrl":"","version":"0.0.45","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Raven Scans","id":299682436,"baseUrl":"https://ravenscans.com","lang":"en","typeSource":"","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-en-ravenscans.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"en_US","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/multisrc/mangareader/mangareader-v0.0.45.dart","apiUrl":"","version":"0.0.45","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Shadow Mangas","id":229424731,"baseUrl":"https://shadowmangas.com","lang":"es","typeSource":"","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-es-shadowmangas.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"es","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/multisrc/mangareader/mangareader-v0.0.45.dart","apiUrl":"","version":"0.0.45","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Surya Scans","id":935389321,"baseUrl":"https://suryascans.com","lang":"en","typeSource":"","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-en-suryascans.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"en_US","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/multisrc/mangareader/mangareader-v0.0.45.dart","apiUrl":"","version":"0.0.45","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Sushi-Scans","id":1036140988,"baseUrl":"https://sushiscan.fr","lang":"fr","typeSource":"","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-fr-sushiscans.png","dateFormat":"MMMM d, yyyy","dateFormatLocale":"fr","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/multisrc/mangareader/mangareader-v0.0.45.dart","apiUrl":"","version":"0.0.45","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Sushi-Scan","id":972784612,"baseUrl":"https://sushiscan.net","lang":"fr","typeSource":"","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-fr-sushiscan.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"fr","isNsfw":false,"hasCloudflare":true,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/multisrc/mangareader/mangareader-v0.0.45.dart","apiUrl":"","version":"0.0.45","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Tarot Scans","id":347606260,"baseUrl":"https://www.tarotscans.com","lang":"tr","typeSource":"","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-tr-tarotscans.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"tr","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/multisrc/mangareader/mangareader-v0.0.45.dart","apiUrl":"","version":"0.0.45","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"TukangKomik","id":884904192,"baseUrl":"https://tukangkomik.id","lang":"id","typeSource":"","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-id-tukangkomik.png","dateFormat":"MMM d, yyyy","dateFormatLocale":"tr","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/multisrc/mangareader/mangareader-v0.0.45.dart","apiUrl":"","version":"0.0.45","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"TurkToon","id":579681001,"baseUrl":"https://turktoon.com","lang":"tr","typeSource":"","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-tr-turktoon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"en_US","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/multisrc/mangareader/mangareader-v0.0.45.dart","apiUrl":"","version":"0.0.45","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Uzay Manga","id":762273201,"baseUrl":"https://uzaymanga.com","lang":"tr","typeSource":"","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-tr-uzaymanga.png","dateFormat":"MMM d, yyyy","dateFormatLocale":"tr","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/multisrc/mangareader/mangareader-v0.0.45.dart","apiUrl":"","version":"0.0.45","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"xCaliBR Scans","id":699314250,"baseUrl":"https://xcalibrscans.com","lang":"en","typeSource":"","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-en-xcalibrscans.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"en_US","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/multisrc/mangareader/mangareader-v0.0.45.dart","apiUrl":"","version":"0.0.45","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Scan VF","id":929253523,"baseUrl":"https://www.scan-vf.net","lang":"fr","typeSource":"mmrcms","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-fr-scanvf.png","dateFormat":"d MMM. yyyy","dateFormatLocale":"en_US","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/multisrc/mmrcms/mmrcms-v0.0.35.dart","apiUrl":"","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Komikid","id":400330220,"baseUrl":"https://www.komikid.com","lang":"id","typeSource":"mmrcms","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-id-komikid.png","dateFormat":"d MMM. yyyy","dateFormatLocale":"en_US","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/multisrc/mmrcms/mmrcms-v0.0.35.dart","apiUrl":"","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"MangaID","id":181458486,"baseUrl":"https://mangaid.click","lang":"id","typeSource":"mmrcms","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-id-mangaid.png","dateFormat":"d MMM. yyyy","dateFormatLocale":"en_US","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/multisrc/mmrcms/mmrcms-v0.0.35.dart","apiUrl":"","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Jpmangas","id":1009609900,"baseUrl":"https://jpmangas.cc","lang":"fr","typeSource":"mmrcms","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-fr-jpmangas.png","dateFormat":"d MMM. yyyy","dateFormatLocale":"en_US","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/multisrc/mmrcms/mmrcms-v0.0.35.dart","apiUrl":"","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"مانجا اون لاين","id":19018595,"baseUrl":"https://onma.top","lang":"ar","typeSource":"mmrcms","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-ar-onma.png","dateFormat":"d MMM. yyyy","dateFormatLocale":"en_US","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/multisrc/mmrcms/mmrcms-v0.0.35.dart","apiUrl":"","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Read Comics Online","id":1021546729,"baseUrl":"https://readcomicsonline.ru","lang":"en","typeSource":"mmrcms","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-en-readcomicsonline.png","dateFormat":"d MMM. yyyy","dateFormatLocale":"en_US","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/multisrc/mmrcms/mmrcms-v0.0.35.dart","apiUrl":"","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Lelscan-VF","id":529915550,"baseUrl":"https://www.lelscanvf.cc/","lang":"fr","typeSource":"mmrcms","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-fr-lelscanvf.png","dateFormat":"d MMM. yyyy","dateFormatLocale":"en_US","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/multisrc/mmrcms/mmrcms-v0.0.35.dart","apiUrl":"","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Manga-FR","id":410779276,"baseUrl":"https://manga-fr.me","lang":"fr","typeSource":"mmrcms","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-fr-mangafr.png","dateFormat":"d MMM. yyyy","dateFormatLocale":"en_US","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/multisrc/mmrcms/mmrcms-v0.0.35.dart","apiUrl":"","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"YugenMangas","id":719565854,"baseUrl":"https://yugenmangas.lat","lang":"es","typeSource":"heancms","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-es-yugenmangas.png","dateFormat":"yyyy-MM-dd'T'HH:mm:ss.SSSZZZZZ","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/multisrc/heancms/heancms-v0.0.35.dart","apiUrl":"https://api.yugenmangas.net","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"OmegaScans","id":555665028,"baseUrl":"https://omegascans.org","lang":"en","typeSource":"heancms","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-en-omegascans.png","dateFormat":"yyyy-MM-dd'T'HH:mm:ss.SSSZZZZZ","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/multisrc/heancms/heancms-v0.0.35.dart","apiUrl":"https://api.omegascans.org","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Perf Scan","id":452473272,"baseUrl":"https://perf-scan.fr","lang":"fr","typeSource":"heancms","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-fr-perfscan.png","dateFormat":"yyyy-MM-dd'T'HH:mm:ss.SSSZZZZZ","dateFormatLocale":"en","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/multisrc/heancms/heancms-v0.0.35.dart","apiUrl":"https://api.perf-scan.fr","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"MangaHere","id":434984458,"baseUrl":"http://www.mangahere.cc","lang":"en","typeSource":"single","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-en-mangahere.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/en/mangahere/mangahere-v0.0.35.dart","apiUrl":"","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Bato.to","id":108983442,"baseUrl":"https://bato.to","lang":"all","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.35.dart","apiUrl":"","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Bato.to","id":219967156,"baseUrl":"https://bato.to","lang":"en","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.35.dart","apiUrl":"","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Bato.to","id":946539390,"baseUrl":"https://bato.to","lang":"ar","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.35.dart","apiUrl":"","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Bato.to","id":1009090494,"baseUrl":"https://bato.to","lang":"bg","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.35.dart","apiUrl":"","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Bato.to","id":49344864,"baseUrl":"https://bato.to","lang":"zh","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.35.dart","apiUrl":"","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Bato.to","id":413792936,"baseUrl":"https://bato.to","lang":"cs","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.35.dart","apiUrl":"","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Bato.to","id":127120581,"baseUrl":"https://bato.to","lang":"da","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.35.dart","apiUrl":"","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Bato.to","id":897709680,"baseUrl":"https://bato.to","lang":"nl","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.35.dart","apiUrl":"","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Bato.to","id":454148350,"baseUrl":"https://bato.to","lang":"fil","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.35.dart","apiUrl":"","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Bato.to","id":174179665,"baseUrl":"https://bato.to","lang":"fi","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.35.dart","apiUrl":"","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Bato.to","id":318824497,"baseUrl":"https://bato.to","lang":"fr","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.35.dart","apiUrl":"","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Bato.to","id":1030715262,"baseUrl":"https://bato.to","lang":"de","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.35.dart","apiUrl":"","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Bato.to","id":395270492,"baseUrl":"https://bato.to","lang":"el","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.35.dart","apiUrl":"","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Bato.to","id":714199973,"baseUrl":"https://bato.to","lang":"he","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.35.dart","apiUrl":"","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Bato.to","id":596730405,"baseUrl":"https://bato.to","lang":"hi","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.35.dart","apiUrl":"","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Bato.to","id":1062815490,"baseUrl":"https://bato.to","lang":"hu","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.35.dart","apiUrl":"","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Bato.to","id":551583074,"baseUrl":"https://bato.to","lang":"id","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.35.dart","apiUrl":"","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Bato.to","id":627608115,"baseUrl":"https://bato.to","lang":"it","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.35.dart","apiUrl":"","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Bato.to","id":709143604,"baseUrl":"https://bato.to","lang":"ja","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.35.dart","apiUrl":"","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Bato.to","id":42724933,"baseUrl":"https://bato.to","lang":"ko","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.35.dart","apiUrl":"","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Bato.to","id":900155911,"baseUrl":"https://bato.to","lang":"ms","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.35.dart","apiUrl":"","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Bato.to","id":945309998,"baseUrl":"https://bato.to","lang":"pl","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.35.dart","apiUrl":"","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Bato.to","id":791127366,"baseUrl":"https://bato.to","lang":"pt","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.35.dart","apiUrl":"","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Bato.to","id":364027455,"baseUrl":"https://bato.to","lang":"pt-br","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.35.dart","apiUrl":"","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Bato.to","id":604327151,"baseUrl":"https://bato.to","lang":"ro","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.35.dart","apiUrl":"","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Bato.to","id":1057708733,"baseUrl":"https://bato.to","lang":"ru","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.35.dart","apiUrl":"","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Bato.to","id":106846058,"baseUrl":"https://bato.to","lang":"es","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.35.dart","apiUrl":"","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Bato.to","id":994364326,"baseUrl":"https://bato.to","lang":"es-419","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.35.dart","apiUrl":"","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Bato.to","id":214830540,"baseUrl":"https://bato.to","lang":"sv","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.35.dart","apiUrl":"","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Bato.to","id":375150025,"baseUrl":"https://bato.to","lang":"th","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.35.dart","apiUrl":"","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Bato.to","id":975805389,"baseUrl":"https://bato.to","lang":"tr","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.35.dart","apiUrl":"","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Bato.to","id":159356975,"baseUrl":"https://bato.to","lang":"uk","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.35.dart","apiUrl":"","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Bato.to","id":719702196,"baseUrl":"https://bato.to","lang":"vi","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.35.dart","apiUrl":"","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Bato.to","id":605330389,"baseUrl":"https://bato.to","lang":"af","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.35.dart","apiUrl":"","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Bato.to","id":500354556,"baseUrl":"https://bato.to","lang":"sq","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.35.dart","apiUrl":"","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Bato.to","id":364708326,"baseUrl":"https://bato.to","lang":"am","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.35.dart","apiUrl":"","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Bato.to","id":579132190,"baseUrl":"https://bato.to","lang":"hy","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.35.dart","apiUrl":"","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Bato.to","id":704228914,"baseUrl":"https://bato.to","lang":"az","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.35.dart","apiUrl":"","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Bato.to","id":465187235,"baseUrl":"https://bato.to","lang":"be","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.35.dart","apiUrl":"","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Bato.to","id":996023306,"baseUrl":"https://bato.to","lang":"bn","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.35.dart","apiUrl":"","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Bato.to","id":240943151,"baseUrl":"https://bato.to","lang":"bs","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.35.dart","apiUrl":"","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Bato.to","id":716816408,"baseUrl":"https://bato.to","lang":"my","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.35.dart","apiUrl":"","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Bato.to","id":539580717,"baseUrl":"https://bato.to","lang":"km","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.35.dart","apiUrl":"","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Bato.to","id":227037230,"baseUrl":"https://bato.to","lang":"ca","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.35.dart","apiUrl":"","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Bato.to","id":179733992,"baseUrl":"https://bato.to","lang":"ceb","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.35.dart","apiUrl":"","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Bato.to","id":419966767,"baseUrl":"https://bato.to","lang":"zh-hk","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.35.dart","apiUrl":"","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Bato.to","id":775604375,"baseUrl":"https://bato.to","lang":"zh-tw","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.35.dart","apiUrl":"","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Bato.to","id":741957110,"baseUrl":"https://bato.to","lang":"hr","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.35.dart","apiUrl":"","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Bato.to","id":65918010,"baseUrl":"https://bato.to","lang":"en-us","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.35.dart","apiUrl":"","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Bato.to","id":48306365,"baseUrl":"https://bato.to","lang":"eo","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.35.dart","apiUrl":"","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Bato.to","id":591213520,"baseUrl":"https://bato.to","lang":"et","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.35.dart","apiUrl":"","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Bato.to","id":208056920,"baseUrl":"https://bato.to","lang":"fo","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.35.dart","apiUrl":"","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Bato.to","id":304199459,"baseUrl":"https://bato.to","lang":"ka","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.35.dart","apiUrl":"","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Bato.to","id":281640882,"baseUrl":"https://bato.to","lang":"gn","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.35.dart","apiUrl":"","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Bato.to","id":94882230,"baseUrl":"https://bato.to","lang":"gu","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.35.dart","apiUrl":"","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Bato.to","id":218756163,"baseUrl":"https://bato.to","lang":"ht","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.35.dart","apiUrl":"","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Bato.to","id":683264032,"baseUrl":"https://bato.to","lang":"ha","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.35.dart","apiUrl":"","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Bato.to","id":461776450,"baseUrl":"https://bato.to","lang":"is","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.35.dart","apiUrl":"","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Bato.to","id":508086706,"baseUrl":"https://bato.to","lang":"ig","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.35.dart","apiUrl":"","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Bato.to","id":73117126,"baseUrl":"https://bato.to","lang":"ga","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.35.dart","apiUrl":"","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Bato.to","id":930639709,"baseUrl":"https://bato.to","lang":"jv","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.35.dart","apiUrl":"","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Bato.to","id":530409414,"baseUrl":"https://bato.to","lang":"kn","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.35.dart","apiUrl":"","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Bato.to","id":998225990,"baseUrl":"https://bato.to","lang":"kk","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.35.dart","apiUrl":"","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Bato.to","id":1041723980,"baseUrl":"https://bato.to","lang":"ku","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.35.dart","apiUrl":"","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Bato.to","id":126099954,"baseUrl":"https://bato.to","lang":"ky","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.35.dart","apiUrl":"","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Bato.to","id":887942732,"baseUrl":"https://bato.to","lang":"lo","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.35.dart","apiUrl":"","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Bato.to","id":842729597,"baseUrl":"https://bato.to","lang":"lv","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.35.dart","apiUrl":"","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Bato.to","id":634440809,"baseUrl":"https://bato.to","lang":"lt","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.35.dart","apiUrl":"","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Bato.to","id":180153330,"baseUrl":"https://bato.to","lang":"lb","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.35.dart","apiUrl":"","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Bato.to","id":954223541,"baseUrl":"https://bato.to","lang":"mk","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.35.dart","apiUrl":"","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Bato.to","id":90956400,"baseUrl":"https://bato.to","lang":"mg","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.35.dart","apiUrl":"","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Bato.to","id":495467192,"baseUrl":"https://bato.to","lang":"ml","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.35.dart","apiUrl":"","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Bato.to","id":543265972,"baseUrl":"https://bato.to","lang":"mt","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.35.dart","apiUrl":"","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Bato.to","id":707155829,"baseUrl":"https://bato.to","lang":"mi","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.35.dart","apiUrl":"","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Bato.to","id":707060384,"baseUrl":"https://bato.to","lang":"mr","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.35.dart","apiUrl":"","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Bato.to","id":284683165,"baseUrl":"https://bato.to","lang":"mn","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.35.dart","apiUrl":"","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Bato.to","id":984326467,"baseUrl":"https://bato.to","lang":"ne","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.35.dart","apiUrl":"","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Bato.to","id":131491491,"baseUrl":"https://bato.to","lang":"no","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.35.dart","apiUrl":"","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Bato.to","id":778635885,"baseUrl":"https://bato.to","lang":"ny","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.35.dart","apiUrl":"","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Bato.to","id":963992548,"baseUrl":"https://bato.to","lang":"ps","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.35.dart","apiUrl":"","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Bato.to","id":679819356,"baseUrl":"https://bato.to","lang":"fa","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.35.dart","apiUrl":"","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Bato.to","id":661882861,"baseUrl":"https://bato.to","lang":"rm","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.35.dart","apiUrl":"","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Bato.to","id":48526565,"baseUrl":"https://bato.to","lang":"sm","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.35.dart","apiUrl":"","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Bato.to","id":175814547,"baseUrl":"https://bato.to","lang":"sr","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.35.dart","apiUrl":"","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Bato.to","id":45175594,"baseUrl":"https://bato.to","lang":"sh","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.35.dart","apiUrl":"","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Bato.to","id":1066078403,"baseUrl":"https://bato.to","lang":"st","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.35.dart","apiUrl":"","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Bato.to","id":314138671,"baseUrl":"https://bato.to","lang":"sn","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.35.dart","apiUrl":"","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Bato.to","id":1034525411,"baseUrl":"https://bato.to","lang":"sd","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.35.dart","apiUrl":"","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Bato.to","id":756819764,"baseUrl":"https://bato.to","lang":"si","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.35.dart","apiUrl":"","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Bato.to","id":1009716343,"baseUrl":"https://bato.to","lang":"sk","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.35.dart","apiUrl":"","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Bato.to","id":468154856,"baseUrl":"https://bato.to","lang":"sl","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.35.dart","apiUrl":"","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Bato.to","id":601076648,"baseUrl":"https://bato.to","lang":"so","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.35.dart","apiUrl":"","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Bato.to","id":713165767,"baseUrl":"https://bato.to","lang":"sw","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.35.dart","apiUrl":"","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Bato.to","id":999603530,"baseUrl":"https://bato.to","lang":"tg","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.35.dart","apiUrl":"","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Bato.to","id":215668101,"baseUrl":"https://bato.to","lang":"ta","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.35.dart","apiUrl":"","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Bato.to","id":349639462,"baseUrl":"https://bato.to","lang":"ti","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.35.dart","apiUrl":"","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Bato.to","id":101342233,"baseUrl":"https://bato.to","lang":"to","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.35.dart","apiUrl":"","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Bato.to","id":308642475,"baseUrl":"https://bato.to","lang":"tk","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.35.dart","apiUrl":"","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Bato.to","id":49360269,"baseUrl":"https://bato.to","lang":"ur","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.35.dart","apiUrl":"","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Bato.to","id":110209479,"baseUrl":"https://bato.to","lang":"uz","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.35.dart","apiUrl":"","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Bato.to","id":335757198,"baseUrl":"https://bato.to","lang":"yo","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.35.dart","apiUrl":"","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Bato.to","id":955608975,"baseUrl":"https://bato.to","lang":"zu","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.35.dart","apiUrl":"","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Bato.to","id":98386892,"baseUrl":"https://bato.to","lang":"eu","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.35.dart","apiUrl":"","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"Bato.to","id":664604703,"baseUrl":"https://bato.to","lang":"pt-PT","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.35.dart","apiUrl":"","version":"0.0.35","isManga":true,"isFullData":false,"appMinVerReq":"0.0.6"},{"name":"MangaSee","id":531216751,"baseUrl":"https://mangasee123.com","lang":"en","typeSource":"nepnep","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-en-mangasee.png","dateFormat":"yyyy-MM-dd HH:mm:ss","dateFormatLocale":"en","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/multisrc/nepnep/nepnep-v0.0.35.dart","apiUrl":"","version":"0.0.35","isManga":true,"isFullData":true,"appMinVerReq":"0.0.6"},{"name":"MangaLife","id":434747478,"baseUrl":"https://manga4life.com","lang":"en","typeSource":"nepnep","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-en-mangalife.png","dateFormat":"yyyy-MM-dd HH:mm:ss","dateFormatLocale":"en","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/multisrc/nepnep/nepnep-v0.0.35.dart","apiUrl":"","version":"0.0.35","isManga":true,"isFullData":true,"appMinVerReq":"0.0.6"}] \ No newline at end of file +[{"name":"FR-Scan","id":669019889,"baseUrl":"https://fr-scan.com","lang":"fr","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-fr-frscan.png","dateFormat":"MMMM d, yyyy","dateFormatLocale":"fr","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/multisrc/madara/madara-v0.0.4.dart","apiUrl":"","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"AstralManga","id":1028022993,"baseUrl":"https://astral-manga.fr","lang":"fr","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-fr-astralmanga.png","dateFormat":"dd/mm/yyyy","dateFormatLocale":"fr","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/multisrc/madara/madara-v0.0.4.dart","apiUrl":"","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Akuma no Tenshi","id":556872410,"baseUrl":"https://akumanotenshi.com","lang":"pt-BR","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-pt-akumanotenshi.png","dateFormat":"dd/MM/yyyy","dateFormatLocale":"pt-BR","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/multisrc/madara/madara-v0.0.4.dart","apiUrl":"","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Adult Webtoon","id":772321498,"baseUrl":"https://adultwebtoon.com","lang":"en","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-en-adultwebtoon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"en_US","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/multisrc/madara/madara-v0.0.4.dart","apiUrl":"","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"ArazNovel","id":966932111,"baseUrl":"https://www.araznovel.com","lang":"tr","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-tr-araznovel.png","dateFormat":"d MMMM yyyy","dateFormatLocale":"en","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/multisrc/madara/madara-v0.0.4.dart","apiUrl":"","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"BestManga","id":926276360,"baseUrl":"https://bestmanga.club","lang":"ru","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-ru-bestmanga.png","dateFormat":"dd.MM.yyyy","dateFormatLocale":"ru","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/multisrc/madara/madara-v0.0.4.dart","apiUrl":"","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Chibi Manga","id":105430403,"baseUrl":"https://www.cmreader.info","lang":"en","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-en-chibimanga.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"en_US","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/multisrc/madara/madara-v0.0.4.dart","apiUrl":"","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"EvaScans","id":439004766,"baseUrl":"https://evascans.com","lang":"tr","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-tr-evascans.png","dateFormat":"MMM d, yyy","dateFormatLocale":"tr","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/multisrc/madara/madara-v0.0.4.dart","apiUrl":"","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Final Scans","id":477960837,"baseUrl":"https://finalscans.com","lang":"pt-br","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-pt-finalscans.png","dateFormat":"MMMM d, yyyy","dateFormatLocale":"pt-BR","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/multisrc/madara/madara-v0.0.4.dart","apiUrl":"","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Glory Manga","id":284318957,"baseUrl":"https://glorymanga.com","lang":"tr","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-tr-glorymanga.png","dateFormat":"dd/MM/yyy","dateFormatLocale":"tr","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/multisrc/madara/madara-v0.0.4.dart","apiUrl":"","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Its Your Right Manhua","id":71580703,"baseUrl":"https://itsyourightmanhua.com/","lang":"en","typeSource":"madara","iconUrl":"","dateFormat":"MMMM d, yyyy","dateFormatLocale":"en_US","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/multisrc/madara/madara-v0.0.4.dart","apiUrl":"","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"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/icons/mangayomi-pt-kamisamaexplorer.png","dateFormat":"dd 'de' MMMM 'de' yyyy","dateFormatLocale":"pt-BR","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/multisrc/madara/madara-v0.0.4.dart","apiUrl":"","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"KSGroupScans","id":374902680,"baseUrl":"https://ksgroupscans.com","lang":"en","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-en-ksgroupscans.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"en_US","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/multisrc/madara/madara-v0.0.4.dart","apiUrl":"","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"LHTranslation","id":21247797,"baseUrl":"https://lhtranslation.net","lang":"en","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-en-lhtranslation.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"en_US","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/multisrc/madara/madara-v0.0.4.dart","apiUrl":"","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Lolicon","id":526980015,"baseUrl":"https://lolicon.mobi","lang":"en","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-en-lolicon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"en_US","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/multisrc/madara/madara-v0.0.4.dart","apiUrl":"","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"MangaVisa","id":433907810,"baseUrl":"https://mangavisa.com","lang":"en","typeSource":"madara","iconUrl":"","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"en_US","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/multisrc/madara/madara-v0.0.4.dart","apiUrl":"","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Manga District","id":281100270,"baseUrl":"https://mangadistrict.com","lang":"en","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-en-mangadistrict.png","dateFormat":"MMMM d, yyyy","dateFormatLocale":"en_US","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/multisrc/madara/madara-v0.0.4.dart","apiUrl":"","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"MangaFreak.online","id":223793266,"baseUrl":"https://mangafreak.online","lang":"en","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-en-mangafreakonline.png","dateFormat":"d MMMM، yyy","dateFormatLocale":"en_US","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/multisrc/madara/madara-v0.0.4.dart","apiUrl":"","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"MangaGreat","id":1054806605,"baseUrl":"https://mangagreat.com","lang":"en","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-en-mangagreat.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"en_US","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/multisrc/madara/madara-v0.0.4.dart","apiUrl":"","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Manga Read","id":256879643,"baseUrl":"https://mangaread.co","lang":"en","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-en-mangaread.png","dateFormat":"yyyy-MM-dd","dateFormatLocale":"en_US","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/multisrc/madara/madara-v0.0.4.dart","apiUrl":"","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"MangaRolls","id":720109919,"baseUrl":"https://mangarolls.com","lang":"en","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-en-mangarolls.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"en_US","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/multisrc/madara/madara-v0.0.4.dart","apiUrl":"","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Manga Şehri","id":865354788,"baseUrl":"https://mangasehri.com","lang":"tr","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-tr-mangasehri.png","dateFormat":"dd/MM/yyy","dateFormatLocale":"tr","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/multisrc/madara/madara-v0.0.4.dart","apiUrl":"","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Mangasushi","id":224429716,"baseUrl":"https://mangasushi.org","lang":"en","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-en-mangasushi.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"en_US","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/multisrc/madara/madara-v0.0.4.dart","apiUrl":"","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Manhwa68","id":1002141127,"baseUrl":"https://manhwa68.com","lang":"en","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-en-manhwa68.png","dateFormat":"MMMM d, yyyy","dateFormatLocale":"en_US","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/multisrc/madara/madara-v0.0.4.dart","apiUrl":"","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Milftoon","id":381914974,"baseUrl":"https://milftoon.xxx","lang":"en","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-en-milftoon.png","dateFormat":"d MMMM, yyyy","dateFormatLocale":"en_US","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/multisrc/madara/madara-v0.0.4.dart","apiUrl":"","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"NovelCrow","id":768834856,"baseUrl":"https://novelcrow.com","lang":"en","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-en-novelcrow.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"en_US","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/multisrc/madara/madara-v0.0.4.dart","apiUrl":"","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Rio2 Manga","id":110090511,"baseUrl":"https://rio2manga.com","lang":"en","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-en-rio2manga.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"en_US","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/multisrc/madara/madara-v0.0.4.dart","apiUrl":"","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Romantik Manga","id":944131896,"baseUrl":"https://romantikmanga.com","lang":"tr","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-tr-romantikmanga.png","dateFormat":"MMM d, yyy","dateFormatLocale":"tr","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/multisrc/madara/madara-v0.0.4.dart","apiUrl":"","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Taurus Fansub","id":1036726988,"baseUrl":"https://taurusfansub.com","lang":"es","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-es-taurusfansub.png","dateFormat":"dd/MM/yyy","dateFormatLocale":"es","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/multisrc/madara/madara-v0.0.4.dart","apiUrl":"","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Tatakae Scan","id":296744306,"baseUrl":"https://tatakaescan.com","lang":"pt-BR","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-pt-tatakaescan.png","dateFormat":"dd 'de' MMMMM 'de' yyyy","dateFormatLocale":"pt-BR","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/multisrc/madara/madara-v0.0.4.dart","apiUrl":"","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Tortuga Ceviri","id":294602572,"baseUrl":"https://tortuga-ceviri.com","lang":"tr","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-tr-tortugaceviri.png","dateFormat":"MMMM d, yyyy","dateFormatLocale":"tr","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/multisrc/madara/madara-v0.0.4.dart","apiUrl":"","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Yuri Verso","id":756257030,"baseUrl":"https://yuri.live","lang":"pt-br","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-pt-yuriverso.png","dateFormat":"dd/MM/yyyy","dateFormatLocale":"pt-BR","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/multisrc/madara/madara-v0.0.4.dart","apiUrl":"","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Zero Scan","id":637786379,"baseUrl":"https://zeroscan.com.br","lang":"pt-br","typeSource":"madara","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-pt-zeroscan.png","dateFormat":"dd/MM/yyyy","dateFormatLocale":"pt-BR","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/multisrc/madara/madara-v0.0.4.dart","apiUrl":"","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Comick","id":370890607,"baseUrl":"https://comick.app","lang":"all","typeSource":"comick","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-comickfun.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/manga/src/all/comick/comick-v0.0.4.dart","apiUrl":"https://api.comick.fun","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Comick","id":955190069,"baseUrl":"https://comick.app","lang":"en","typeSource":"comick","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-comickfun.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/manga/src/all/comick/comick-v0.0.4.dart","apiUrl":"https://api.comick.fun","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Comick","id":494197461,"baseUrl":"https://comick.app","lang":"pt-br","typeSource":"comick","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-comickfun.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/manga/src/all/comick/comick-v0.0.4.dart","apiUrl":"https://api.comick.fun","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Comick","id":1050814052,"baseUrl":"https://comick.app","lang":"ru","typeSource":"comick","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-comickfun.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/manga/src/all/comick/comick-v0.0.4.dart","apiUrl":"https://api.comick.fun","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Comick","id":380505196,"baseUrl":"https://comick.app","lang":"fr","typeSource":"comick","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-comickfun.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/manga/src/all/comick/comick-v0.0.4.dart","apiUrl":"https://api.comick.fun","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Comick","id":296390197,"baseUrl":"https://comick.app","lang":"es-419","typeSource":"comick","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-comickfun.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/manga/src/all/comick/comick-v0.0.4.dart","apiUrl":"https://api.comick.fun","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Comick","id":242913014,"baseUrl":"https://comick.app","lang":"pl","typeSource":"comick","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-comickfun.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/manga/src/all/comick/comick-v0.0.4.dart","apiUrl":"https://api.comick.fun","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Comick","id":507059585,"baseUrl":"https://comick.app","lang":"tr","typeSource":"comick","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-comickfun.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/manga/src/all/comick/comick-v0.0.4.dart","apiUrl":"https://api.comick.fun","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Comick","id":851891714,"baseUrl":"https://comick.app","lang":"it","typeSource":"comick","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-comickfun.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/manga/src/all/comick/comick-v0.0.4.dart","apiUrl":"https://api.comick.fun","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Comick","id":115169439,"baseUrl":"https://comick.app","lang":"es","typeSource":"comick","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-comickfun.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/manga/src/all/comick/comick-v0.0.4.dart","apiUrl":"https://api.comick.fun","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Comick","id":719269008,"baseUrl":"https://comick.app","lang":"id","typeSource":"comick","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-comickfun.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/manga/src/all/comick/comick-v0.0.4.dart","apiUrl":"https://api.comick.fun","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Comick","id":719759654,"baseUrl":"https://comick.app","lang":"hu","typeSource":"comick","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-comickfun.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/manga/src/all/comick/comick-v0.0.4.dart","apiUrl":"https://api.comick.fun","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Comick","id":301477894,"baseUrl":"https://comick.app","lang":"vi","typeSource":"comick","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-comickfun.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/manga/src/all/comick/comick-v0.0.4.dart","apiUrl":"https://api.comick.fun","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Comick","id":113594984,"baseUrl":"https://comick.app","lang":"zh-hk","typeSource":"comick","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-comickfun.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/manga/src/all/comick/comick-v0.0.4.dart","apiUrl":"https://api.comick.fun","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Comick","id":602472856,"baseUrl":"https://comick.app","lang":"ar","typeSource":"comick","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-comickfun.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/manga/src/all/comick/comick-v0.0.4.dart","apiUrl":"https://api.comick.fun","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Comick","id":401493183,"baseUrl":"https://comick.app","lang":"de","typeSource":"comick","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-comickfun.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/manga/src/all/comick/comick-v0.0.4.dart","apiUrl":"https://api.comick.fun","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Comick","id":752155292,"baseUrl":"https://comick.app","lang":"zh","typeSource":"comick","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-comickfun.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/manga/src/all/comick/comick-v0.0.4.dart","apiUrl":"https://api.comick.fun","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Comick","id":1069764002,"baseUrl":"https://comick.app","lang":"ca","typeSource":"comick","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-comickfun.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/manga/src/all/comick/comick-v0.0.4.dart","apiUrl":"https://api.comick.fun","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Comick","id":678531099,"baseUrl":"https://comick.app","lang":"bg","typeSource":"comick","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-comickfun.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/manga/src/all/comick/comick-v0.0.4.dart","apiUrl":"https://api.comick.fun","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Comick","id":311480598,"baseUrl":"https://comick.app","lang":"th","typeSource":"comick","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-comickfun.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/manga/src/all/comick/comick-v0.0.4.dart","apiUrl":"https://api.comick.fun","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Comick","id":141560456,"baseUrl":"https://comick.app","lang":"fa","typeSource":"comick","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-comickfun.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/manga/src/all/comick/comick-v0.0.4.dart","apiUrl":"https://api.comick.fun","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Comick","id":8261465,"baseUrl":"https://comick.app","lang":"uk","typeSource":"comick","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-comickfun.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/manga/src/all/comick/comick-v0.0.4.dart","apiUrl":"https://api.comick.fun","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Comick","id":565474938,"baseUrl":"https://comick.app","lang":"mn","typeSource":"comick","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-comickfun.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/manga/src/all/comick/comick-v0.0.4.dart","apiUrl":"https://api.comick.fun","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Comick","id":533803532,"baseUrl":"https://comick.app","lang":"ro","typeSource":"comick","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-comickfun.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/manga/src/all/comick/comick-v0.0.4.dart","apiUrl":"https://api.comick.fun","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Comick","id":459976450,"baseUrl":"https://comick.app","lang":"he","typeSource":"comick","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-comickfun.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/manga/src/all/comick/comick-v0.0.4.dart","apiUrl":"https://api.comick.fun","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Comick","id":375702775,"baseUrl":"https://comick.app","lang":"ms","typeSource":"comick","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-comickfun.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/manga/src/all/comick/comick-v0.0.4.dart","apiUrl":"https://api.comick.fun","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Comick","id":737984097,"baseUrl":"https://comick.app","lang":"tl","typeSource":"comick","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-comickfun.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/manga/src/all/comick/comick-v0.0.4.dart","apiUrl":"https://api.comick.fun","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Comick","id":796489006,"baseUrl":"https://comick.app","lang":"ja","typeSource":"comick","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-comickfun.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/manga/src/all/comick/comick-v0.0.4.dart","apiUrl":"https://api.comick.fun","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Comick","id":683471552,"baseUrl":"https://comick.app","lang":"hi","typeSource":"comick","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-comickfun.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/manga/src/all/comick/comick-v0.0.4.dart","apiUrl":"https://api.comick.fun","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Comick","id":778623467,"baseUrl":"https://comick.app","lang":"my","typeSource":"comick","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-comickfun.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/manga/src/all/comick/comick-v0.0.4.dart","apiUrl":"https://api.comick.fun","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Comick","id":1065236294,"baseUrl":"https://comick.app","lang":"ko","typeSource":"comick","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-comickfun.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/manga/src/all/comick/comick-v0.0.4.dart","apiUrl":"https://api.comick.fun","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Comick","id":422767524,"baseUrl":"https://comick.app","lang":"cs","typeSource":"comick","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-comickfun.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/manga/src/all/comick/comick-v0.0.4.dart","apiUrl":"https://api.comick.fun","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Comick","id":678647945,"baseUrl":"https://comick.app","lang":"pt","typeSource":"comick","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-comickfun.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/manga/src/all/comick/comick-v0.0.4.dart","apiUrl":"https://api.comick.fun","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Comick","id":698202010,"baseUrl":"https://comick.app","lang":"nl","typeSource":"comick","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-comickfun.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/manga/src/all/comick/comick-v0.0.4.dart","apiUrl":"https://api.comick.fun","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Comick","id":359879447,"baseUrl":"https://comick.app","lang":"sv","typeSource":"comick","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-comickfun.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/manga/src/all/comick/comick-v0.0.4.dart","apiUrl":"https://api.comick.fun","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Comick","id":532878423,"baseUrl":"https://comick.app","lang":"bn","typeSource":"comick","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-comickfun.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/manga/src/all/comick/comick-v0.0.4.dart","apiUrl":"https://api.comick.fun","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Comick","id":481504622,"baseUrl":"https://comick.app","lang":"no","typeSource":"comick","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-comickfun.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/manga/src/all/comick/comick-v0.0.4.dart","apiUrl":"https://api.comick.fun","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Comick","id":112887841,"baseUrl":"https://comick.app","lang":"lt","typeSource":"comick","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-comickfun.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/manga/src/all/comick/comick-v0.0.4.dart","apiUrl":"https://api.comick.fun","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Comick","id":824905526,"baseUrl":"https://comick.app","lang":"el","typeSource":"comick","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-comickfun.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/manga/src/all/comick/comick-v0.0.4.dart","apiUrl":"https://api.comick.fun","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Comick","id":373675453,"baseUrl":"https://comick.app","lang":"sr","typeSource":"comick","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-comickfun.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/manga/src/all/comick/comick-v0.0.4.dart","apiUrl":"https://api.comick.fun","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Comick","id":574420905,"baseUrl":"https://comick.app","lang":"da","typeSource":"comick","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-comickfun.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/manga/src/all/comick/comick-v0.0.4.dart","apiUrl":"https://api.comick.fun","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"MangaDex","id":202373705,"baseUrl":"https://mangadex.org","lang":"ar","typeSource":"mangadex","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-mangadex.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/manga/src/all/mangadex/mangadex-v0.0.45.dart","apiUrl":"https://api.mangadex.org","version":"0.0.45","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"MangaDex","id":860658373,"baseUrl":"https://mangadex.org","lang":"bn","typeSource":"mangadex","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-mangadex.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/manga/src/all/mangadex/mangadex-v0.0.45.dart","apiUrl":"https://api.mangadex.org","version":"0.0.45","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"MangaDex","id":722270529,"baseUrl":"https://mangadex.org","lang":"bg","typeSource":"mangadex","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-mangadex.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/manga/src/all/mangadex/mangadex-v0.0.45.dart","apiUrl":"https://api.mangadex.org","version":"0.0.45","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"MangaDex","id":978675083,"baseUrl":"https://mangadex.org","lang":"my","typeSource":"mangadex","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-mangadex.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/manga/src/all/mangadex/mangadex-v0.0.45.dart","apiUrl":"https://api.mangadex.org","version":"0.0.45","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"MangaDex","id":689496451,"baseUrl":"https://mangadex.org","lang":"ca","typeSource":"mangadex","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-mangadex.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/manga/src/all/mangadex/mangadex-v0.0.45.dart","apiUrl":"https://api.mangadex.org","version":"0.0.45","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"MangaDex","id":593575397,"baseUrl":"https://mangadex.org","lang":"zh","typeSource":"mangadex","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-mangadex.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/manga/src/all/mangadex/mangadex-v0.0.45.dart","apiUrl":"https://api.mangadex.org","version":"0.0.45","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"MangaDex","id":115179159,"baseUrl":"https://mangadex.org","lang":"zh-hk","typeSource":"mangadex","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-mangadex.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/manga/src/all/mangadex/mangadex-v0.0.45.dart","apiUrl":"https://api.mangadex.org","version":"0.0.45","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"MangaDex","id":869144666,"baseUrl":"https://mangadex.org","lang":"cs","typeSource":"mangadex","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-mangadex.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/manga/src/all/mangadex/mangadex-v0.0.45.dart","apiUrl":"https://api.mangadex.org","version":"0.0.45","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"MangaDex","id":846142909,"baseUrl":"https://mangadex.org","lang":"da","typeSource":"mangadex","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-mangadex.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/manga/src/all/mangadex/mangadex-v0.0.45.dart","apiUrl":"https://api.mangadex.org","version":"0.0.45","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"MangaDex","id":841149659,"baseUrl":"https://mangadex.org","lang":"nl","typeSource":"mangadex","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-mangadex.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/manga/src/all/mangadex/mangadex-v0.0.45.dart","apiUrl":"https://api.mangadex.org","version":"0.0.45","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"MangaDex","id":810342358,"baseUrl":"https://mangadex.org","lang":"en","typeSource":"mangadex","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-mangadex.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/manga/src/all/mangadex/mangadex-v0.0.45.dart","apiUrl":"https://api.mangadex.org","version":"0.0.45","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"MangaDex","id":309024312,"baseUrl":"https://mangadex.org","lang":"tl","typeSource":"mangadex","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-mangadex.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/manga/src/all/mangadex/mangadex-v0.0.45.dart","apiUrl":"https://api.mangadex.org","version":"0.0.45","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"MangaDex","id":164642544,"baseUrl":"https://mangadex.org","lang":"fi","typeSource":"mangadex","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-mangadex.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/manga/src/all/mangadex/mangadex-v0.0.45.dart","apiUrl":"https://api.mangadex.org","version":"0.0.45","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"MangaDex","id":545017689,"baseUrl":"https://mangadex.org","lang":"fr","typeSource":"mangadex","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-mangadex.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/manga/src/all/mangadex/mangadex-v0.0.45.dart","apiUrl":"https://api.mangadex.org","version":"0.0.45","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"MangaDex","id":110023605,"baseUrl":"https://mangadex.org","lang":"de","typeSource":"mangadex","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-mangadex.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/manga/src/all/mangadex/mangadex-v0.0.45.dart","apiUrl":"https://api.mangadex.org","version":"0.0.45","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"MangaDex","id":767687578,"baseUrl":"https://mangadex.org","lang":"el","typeSource":"mangadex","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-mangadex.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/manga/src/all/mangadex/mangadex-v0.0.45.dart","apiUrl":"https://api.mangadex.org","version":"0.0.45","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"MangaDex","id":511907642,"baseUrl":"https://mangadex.org","lang":"he","typeSource":"mangadex","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-mangadex.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/manga/src/all/mangadex/mangadex-v0.0.45.dart","apiUrl":"https://api.mangadex.org","version":"0.0.45","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"MangaDex","id":986826068,"baseUrl":"https://mangadex.org","lang":"hi","typeSource":"mangadex","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-mangadex.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/manga/src/all/mangadex/mangadex-v0.0.45.dart","apiUrl":"https://api.mangadex.org","version":"0.0.45","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"MangaDex","id":128441350,"baseUrl":"https://mangadex.org","lang":"hu","typeSource":"mangadex","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-mangadex.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/manga/src/all/mangadex/mangadex-v0.0.45.dart","apiUrl":"https://api.mangadex.org","version":"0.0.45","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"MangaDex","id":183977130,"baseUrl":"https://mangadex.org","lang":"id","typeSource":"mangadex","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-mangadex.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/manga/src/all/mangadex/mangadex-v0.0.45.dart","apiUrl":"https://api.mangadex.org","version":"0.0.45","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"MangaDex","id":127887438,"baseUrl":"https://mangadex.org","lang":"it","typeSource":"mangadex","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-mangadex.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/manga/src/all/mangadex/mangadex-v0.0.45.dart","apiUrl":"https://api.mangadex.org","version":"0.0.45","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"MangaDex","id":204112007,"baseUrl":"https://mangadex.org","lang":"ja","typeSource":"mangadex","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-mangadex.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/manga/src/all/mangadex/mangadex-v0.0.45.dart","apiUrl":"https://api.mangadex.org","version":"0.0.45","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"MangaDex","id":1063442064,"baseUrl":"https://mangadex.org","lang":"kk","typeSource":"mangadex","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-mangadex.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/manga/src/all/mangadex/mangadex-v0.0.45.dart","apiUrl":"https://api.mangadex.org","version":"0.0.45","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"MangaDex","id":898061477,"baseUrl":"https://mangadex.org","lang":"ko","typeSource":"mangadex","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-mangadex.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/manga/src/all/mangadex/mangadex-v0.0.45.dart","apiUrl":"https://api.mangadex.org","version":"0.0.45","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"MangaDex","id":387646759,"baseUrl":"https://mangadex.org","lang":"la","typeSource":"mangadex","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-mangadex.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/manga/src/all/mangadex/mangadex-v0.0.45.dart","apiUrl":"https://api.mangadex.org","version":"0.0.45","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"MangaDex","id":270482698,"baseUrl":"https://mangadex.org","lang":"lt","typeSource":"mangadex","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-mangadex.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/manga/src/all/mangadex/mangadex-v0.0.45.dart","apiUrl":"https://api.mangadex.org","version":"0.0.45","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"MangaDex","id":284400542,"baseUrl":"https://mangadex.org","lang":"ms","typeSource":"mangadex","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-mangadex.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/manga/src/all/mangadex/mangadex-v0.0.45.dart","apiUrl":"https://api.mangadex.org","version":"0.0.45","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"MangaDex","id":525041874,"baseUrl":"https://mangadex.org","lang":"mn","typeSource":"mangadex","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-mangadex.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/manga/src/all/mangadex/mangadex-v0.0.45.dart","apiUrl":"https://api.mangadex.org","version":"0.0.45","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"MangaDex","id":613632949,"baseUrl":"https://mangadex.org","lang":"ne","typeSource":"mangadex","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-mangadex.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/manga/src/all/mangadex/mangadex-v0.0.45.dart","apiUrl":"https://api.mangadex.org","version":"0.0.45","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"MangaDex","id":441032670,"baseUrl":"https://mangadex.org","lang":"no","typeSource":"mangadex","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-mangadex.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/manga/src/all/mangadex/mangadex-v0.0.45.dart","apiUrl":"https://api.mangadex.org","version":"0.0.45","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"MangaDex","id":693311514,"baseUrl":"https://mangadex.org","lang":"fa","typeSource":"mangadex","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-mangadex.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/manga/src/all/mangadex/mangadex-v0.0.45.dart","apiUrl":"https://api.mangadex.org","version":"0.0.45","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"MangaDex","id":683661227,"baseUrl":"https://mangadex.org","lang":"pl","typeSource":"mangadex","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-mangadex.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/manga/src/all/mangadex/mangadex-v0.0.45.dart","apiUrl":"https://api.mangadex.org","version":"0.0.45","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"MangaDex","id":417850874,"baseUrl":"https://mangadex.org","lang":"pt-br","typeSource":"mangadex","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-mangadex.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/manga/src/all/mangadex/mangadex-v0.0.45.dart","apiUrl":"https://api.mangadex.org","version":"0.0.45","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"MangaDex","id":1027115198,"baseUrl":"https://mangadex.org","lang":"pt","typeSource":"mangadex","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-mangadex.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/manga/src/all/mangadex/mangadex-v0.0.45.dart","apiUrl":"https://api.mangadex.org","version":"0.0.45","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"MangaDex","id":399589398,"baseUrl":"https://mangadex.org","lang":"ro","typeSource":"mangadex","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-mangadex.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/manga/src/all/mangadex/mangadex-v0.0.45.dart","apiUrl":"https://api.mangadex.org","version":"0.0.45","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"MangaDex","id":367421943,"baseUrl":"https://mangadex.org","lang":"ru","typeSource":"mangadex","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-mangadex.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/manga/src/all/mangadex/mangadex-v0.0.45.dart","apiUrl":"https://api.mangadex.org","version":"0.0.45","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"MangaDex","id":254140838,"baseUrl":"https://mangadex.org","lang":"sh","typeSource":"mangadex","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-mangadex.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/manga/src/all/mangadex/mangadex-v0.0.45.dart","apiUrl":"https://api.mangadex.org","version":"0.0.45","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"MangaDex","id":823535267,"baseUrl":"https://mangadex.org","lang":"es-419","typeSource":"mangadex","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-mangadex.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/manga/src/all/mangadex/mangadex-v0.0.45.dart","apiUrl":"https://api.mangadex.org","version":"0.0.45","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"MangaDex","id":736630443,"baseUrl":"https://mangadex.org","lang":"es","typeSource":"mangadex","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-mangadex.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/manga/src/all/mangadex/mangadex-v0.0.45.dart","apiUrl":"https://api.mangadex.org","version":"0.0.45","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"MangaDex","id":146351677,"baseUrl":"https://mangadex.org","lang":"sv","typeSource":"mangadex","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-mangadex.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/manga/src/all/mangadex/mangadex-v0.0.45.dart","apiUrl":"https://api.mangadex.org","version":"0.0.45","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"MangaDex","id":739930809,"baseUrl":"https://mangadex.org","lang":"ta","typeSource":"mangadex","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-mangadex.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/manga/src/all/mangadex/mangadex-v0.0.45.dart","apiUrl":"https://api.mangadex.org","version":"0.0.45","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"MangaDex","id":385031783,"baseUrl":"https://mangadex.org","lang":"th","typeSource":"mangadex","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-mangadex.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/manga/src/all/mangadex/mangadex-v0.0.45.dart","apiUrl":"https://api.mangadex.org","version":"0.0.45","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"MangaDex","id":1008587213,"baseUrl":"https://mangadex.org","lang":"tr","typeSource":"mangadex","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-mangadex.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/manga/src/all/mangadex/mangadex-v0.0.45.dart","apiUrl":"https://api.mangadex.org","version":"0.0.45","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"MangaDex","id":778357609,"baseUrl":"https://mangadex.org","lang":"uk","typeSource":"mangadex","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-mangadex.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/manga/src/all/mangadex/mangadex-v0.0.45.dart","apiUrl":"https://api.mangadex.org","version":"0.0.45","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"MangaDex","id":88174952,"baseUrl":"https://mangadex.org","lang":"vi","typeSource":"mangadex","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-mangadex.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/manga/src/all/mangadex/mangadex-v0.0.45.dart","apiUrl":"https://api.mangadex.org","version":"0.0.45","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Beast Scans","id":1051043161,"baseUrl":"https://beast-scans.com","lang":"ar","typeSource":"","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-ar-beastscans.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"ar","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/multisrc/mangareader/mangareader-v0.0.5.dart","apiUrl":"","version":"0.0.5","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Lelmanga","id":35877276,"baseUrl":"https://www.lelmanga.com","lang":"fr","typeSource":"","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-fr-lelmanga.png","dateFormat":"MMMM d, yyyy","dateFormatLocale":"en","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/multisrc/mangareader/mangareader-v0.0.5.dart","apiUrl":"","version":"0.0.5","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Asura Scans","id":524070078,"baseUrl":"https://asuratoon.com/","lang":"en","typeSource":"","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-en-asurascans.png","dateFormat":"MMM d, yyyy","dateFormatLocale":"en_US","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/multisrc/mangareader/mangareader-v0.0.5.dart","apiUrl":"","version":"0.0.5","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"KomikLab Scans","id":932554594,"baseUrl":"https://komiklab.com","lang":"en","typeSource":"","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-komiklab.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"en_US","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/multisrc/mangareader/mangareader-v0.0.5.dart","apiUrl":"","version":"0.0.5","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Azure Scans","id":316512590,"baseUrl":"https://azuremanga.com","lang":"en","typeSource":"","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-en-azurescans.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"en_US","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/multisrc/mangareader/mangareader-v0.0.5.dart","apiUrl":"","version":"0.0.5","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Cosmic Scans","id":938687459,"baseUrl":"https://cosmicscans.com","lang":"en","typeSource":"","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-en-cosmicscans.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"en_US","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/multisrc/mangareader/mangareader-v0.0.5.dart","apiUrl":"","version":"0.0.5","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"CosmicScans.id","id":1053293978,"baseUrl":"https://cosmicscans.id","lang":"id","typeSource":"","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-id-cosmicscansid.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"en_US","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/multisrc/mangareader/mangareader-v0.0.5.dart","apiUrl":"","version":"0.0.5","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Dojing.net","id":725568407,"baseUrl":"https://dojing.net","lang":"id","typeSource":"","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-id-dojingnet.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"en_US","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/multisrc/mangareader/mangareader-v0.0.5.dart","apiUrl":"","version":"0.0.5","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"DuniaKomik.id","id":326969052,"baseUrl":"https://duniakomik.id","lang":"id","typeSource":"","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-id-duniakomikid.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"id","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/multisrc/mangareader/mangareader-v0.0.5.dart","apiUrl":"","version":"0.0.5","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Gecenin Lordu","id":622207049,"baseUrl":"https://geceninlordu.com","lang":"tr","typeSource":"","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-tr-geceninlordu.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"en_US","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/multisrc/mangareader/mangareader-v0.0.5.dart","apiUrl":"","version":"0.0.5","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Infernal Void Scans","id":460393112,"baseUrl":"https://void-scans.com","lang":"en","typeSource":"","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-en-infernalvoidscans.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"en_US","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/multisrc/mangareader/mangareader-v0.0.5.dart","apiUrl":"","version":"0.0.5","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"KataKomik","id":61302571,"baseUrl":"https://katakomik.online","lang":"id","typeSource":"","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-id-katakomik.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"en_US","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/multisrc/mangareader/mangareader-v0.0.5.dart","apiUrl":"","version":"0.0.5","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Kanzenin","id":729954705,"baseUrl":"https://kanzenin.xyz","lang":"id","typeSource":"","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-id-kanzenin.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"en_US","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/multisrc/mangareader/mangareader-v0.0.5.dart","apiUrl":"","version":"0.0.5","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Komik Station","id":866615506,"baseUrl":"https://komikstation.co","lang":"id","typeSource":"","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-id-komikstation.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"id","isNsfw":false,"hasCloudflare":true,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/multisrc/mangareader/mangareader-v0.0.5.dart","apiUrl":"","version":"0.0.5","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"KomikMama","id":148959602,"baseUrl":"https://komikmama.co","lang":"id","typeSource":"","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-id-komikmama.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"id","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/multisrc/mangareader/mangareader-v0.0.5.dart","apiUrl":"","version":"0.0.5","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"KumaPoi","id":855502386,"baseUrl":"https://kumapoi.club","lang":"id","typeSource":"","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-id-kumapoi.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"id","isNsfw":true,"hasCloudflare":true,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/multisrc/mangareader/mangareader-v0.0.5.dart","apiUrl":"","version":"0.0.5","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Komiku.com","id":869906392,"baseUrl":"https://komiku.com","lang":"id","typeSource":"","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-id-komikucom.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"id","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/multisrc/mangareader/mangareader-v0.0.5.dart","apiUrl":"","version":"0.0.5","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Legacy Scans","id":310973833,"baseUrl":"https://legacy-scans.com","lang":"fr","typeSource":"","iconUrl":"","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"en_US","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/multisrc/mangareader/mangareader-v0.0.5.dart","apiUrl":"","version":"0.0.5","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Magus Manga","id":487156426,"baseUrl":"https://magusmanga.com","lang":"ar","typeSource":"","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-ar-magusmanga.png","dateFormat":"MMMMM d, yyyy","dateFormatLocale":"ar","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/multisrc/mangareader/mangareader-v0.0.5.dart","apiUrl":"","version":"0.0.5","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Manga Indo.me","id":425166803,"baseUrl":"https://mangaindo.me","lang":"id","typeSource":"","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-id-mangaindome.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"en_US","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/multisrc/mangareader/mangareader-v0.0.5.dart","apiUrl":"","version":"0.0.5","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Mangacim","id":642410916,"baseUrl":"https://www.mangacim.com","lang":"tr","typeSource":"","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-tr-mangacim.png","dateFormat":"MMM d, yyy","dateFormatLocale":"tr","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/multisrc/mangareader/mangareader-v0.0.5.dart","apiUrl":"","version":"0.0.5","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"MangaTale","id":343986734,"baseUrl":"https://mangatale.co","lang":"id","typeSource":"","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-id-mangatale.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"id","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/multisrc/mangareader/mangareader-v0.0.5.dart","apiUrl":"","version":"0.0.5","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"MangaWT","id":1014190199,"baseUrl":"https://mangawt.com","lang":"tr","typeSource":"","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-tr-mangawt.png","dateFormat":"MMM d, yyyy","dateFormatLocale":"tr","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/multisrc/mangareader/mangareader-v0.0.5.dart","apiUrl":"","version":"0.0.5","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Manhwax","id":188130307,"baseUrl":"https://manhwax.com","lang":"en","typeSource":"","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-en-manhwax.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"en_US","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/multisrc/mangareader/mangareader-v0.0.5.dart","apiUrl":"","version":"0.0.5","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"MELOKOMIK","id":532392938,"baseUrl":"https://melokomik.xyz","lang":"id","typeSource":"","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-id-melokomik.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"id","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/multisrc/mangareader/mangareader-v0.0.5.dart","apiUrl":"","version":"0.0.5","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Mihentai","id":59058359,"baseUrl":"https://mihentai.com","lang":"all","typeSource":"","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-mihentai.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"en_US","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/multisrc/mangareader/mangareader-v0.0.5.dart","apiUrl":"","version":"0.0.5","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Mundo Mangá-Kun","id":870058031,"baseUrl":"https://mundomangakun.com.br","lang":"pt-br","typeSource":"","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-pt-mundomangakun.png","dateFormat":"MMMMM dd, yyyy","dateFormatLocale":"pt-BR","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/multisrc/mangareader/mangareader-v0.0.5.dart","apiUrl":"","version":"0.0.5","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Origami Orpheans","id":261849744,"baseUrl":"https://origami-orpheans.com.br","lang":"pt-br","typeSource":"","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-pt-origamiorpheans.png","dateFormat":"MMMMM dd, yyyy","dateFormatLocale":"pt-BR","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/multisrc/mangareader/mangareader-v0.0.5.dart","apiUrl":"","version":"0.0.5","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"PhenixScans","id":984162065,"baseUrl":"https://phenixscans.fr","lang":"fr","typeSource":"","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-fr-phenixscans.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"fr","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/multisrc/mangareader/mangareader-v0.0.5.dart","apiUrl":"","version":"0.0.5","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Pi Scans","id":548699583,"baseUrl":"https://piscans.in","lang":"id","typeSource":"","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-id-piscans.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"en_US","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/multisrc/mangareader/mangareader-v0.0.5.dart","apiUrl":"","version":"0.0.5","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Raiki Scan","id":550138305,"baseUrl":"https://raikiscan.com","lang":"es","typeSource":"","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-es-raikiscan.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"en_US","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/multisrc/mangareader/mangareader-v0.0.5.dart","apiUrl":"","version":"0.0.5","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Raven Scans","id":299682436,"baseUrl":"https://ravenscans.com","lang":"en","typeSource":"","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-en-ravenscans.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"en_US","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/multisrc/mangareader/mangareader-v0.0.5.dart","apiUrl":"","version":"0.0.5","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Shadow Mangas","id":229424731,"baseUrl":"https://shadowmangas.com","lang":"es","typeSource":"","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-es-shadowmangas.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"es","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/multisrc/mangareader/mangareader-v0.0.5.dart","apiUrl":"","version":"0.0.5","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Surya Scans","id":935389321,"baseUrl":"https://suryascans.com","lang":"en","typeSource":"","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-en-suryascans.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"en_US","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/multisrc/mangareader/mangareader-v0.0.5.dart","apiUrl":"","version":"0.0.5","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Sushi-Scans","id":1036140988,"baseUrl":"https://sushiscan.fr","lang":"fr","typeSource":"","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-fr-sushiscans.png","dateFormat":"MMMM d, yyyy","dateFormatLocale":"fr","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/multisrc/mangareader/mangareader-v0.0.5.dart","apiUrl":"","version":"0.0.5","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Sushi-Scan","id":972784612,"baseUrl":"https://sushiscan.net","lang":"fr","typeSource":"","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-fr-sushiscan.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"fr","isNsfw":false,"hasCloudflare":true,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/multisrc/mangareader/mangareader-v0.0.5.dart","apiUrl":"","version":"0.0.5","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Tarot Scans","id":347606260,"baseUrl":"https://www.tarotscans.com","lang":"tr","typeSource":"","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-tr-tarotscans.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"tr","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/multisrc/mangareader/mangareader-v0.0.5.dart","apiUrl":"","version":"0.0.5","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"TukangKomik","id":884904192,"baseUrl":"https://tukangkomik.id","lang":"id","typeSource":"","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-id-tukangkomik.png","dateFormat":"MMM d, yyyy","dateFormatLocale":"tr","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/multisrc/mangareader/mangareader-v0.0.5.dart","apiUrl":"","version":"0.0.5","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"TurkToon","id":579681001,"baseUrl":"https://turktoon.com","lang":"tr","typeSource":"","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-tr-turktoon.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"en_US","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/multisrc/mangareader/mangareader-v0.0.5.dart","apiUrl":"","version":"0.0.5","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Uzay Manga","id":762273201,"baseUrl":"https://uzaymanga.com","lang":"tr","typeSource":"","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-tr-uzaymanga.png","dateFormat":"MMM d, yyyy","dateFormatLocale":"tr","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/multisrc/mangareader/mangareader-v0.0.5.dart","apiUrl":"","version":"0.0.5","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"xCaliBR Scans","id":699314250,"baseUrl":"https://xcalibrscans.com","lang":"en","typeSource":"","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-en-xcalibrscans.png","dateFormat":"MMMM dd, yyyy","dateFormatLocale":"en_US","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/multisrc/mangareader/mangareader-v0.0.5.dart","apiUrl":"","version":"0.0.5","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Scan VF","id":929253523,"baseUrl":"https://www.scan-vf.net","lang":"fr","typeSource":"mmrcms","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-fr-scanvf.png","dateFormat":"d MMM. yyyy","dateFormatLocale":"en_US","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/multisrc/mmrcms/mmrcms-v0.0.4.dart","apiUrl":"","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Komikid","id":400330220,"baseUrl":"https://www.komikid.com","lang":"id","typeSource":"mmrcms","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-id-komikid.png","dateFormat":"d MMM. yyyy","dateFormatLocale":"en_US","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/multisrc/mmrcms/mmrcms-v0.0.4.dart","apiUrl":"","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"MangaID","id":181458486,"baseUrl":"https://mangaid.click","lang":"id","typeSource":"mmrcms","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-id-mangaid.png","dateFormat":"d MMM. yyyy","dateFormatLocale":"en_US","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/multisrc/mmrcms/mmrcms-v0.0.4.dart","apiUrl":"","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Jpmangas","id":1009609900,"baseUrl":"https://jpmangas.cc","lang":"fr","typeSource":"mmrcms","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-fr-jpmangas.png","dateFormat":"d MMM. yyyy","dateFormatLocale":"en_US","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/multisrc/mmrcms/mmrcms-v0.0.4.dart","apiUrl":"","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"مانجا اون لاين","id":19018595,"baseUrl":"https://onma.top","lang":"ar","typeSource":"mmrcms","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-ar-onma.png","dateFormat":"d MMM. yyyy","dateFormatLocale":"en_US","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/multisrc/mmrcms/mmrcms-v0.0.4.dart","apiUrl":"","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Read Comics Online","id":1021546729,"baseUrl":"https://readcomicsonline.ru","lang":"en","typeSource":"mmrcms","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-en-readcomicsonline.png","dateFormat":"d MMM. yyyy","dateFormatLocale":"en_US","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/multisrc/mmrcms/mmrcms-v0.0.4.dart","apiUrl":"","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Lelscan-VF","id":529915550,"baseUrl":"https://www.lelscanvf.cc/","lang":"fr","typeSource":"mmrcms","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-fr-lelscanvf.png","dateFormat":"d MMM. yyyy","dateFormatLocale":"en_US","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/multisrc/mmrcms/mmrcms-v0.0.4.dart","apiUrl":"","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Manga-FR","id":410779276,"baseUrl":"https://manga-fr.me","lang":"fr","typeSource":"mmrcms","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-fr-mangafr.png","dateFormat":"d MMM. yyyy","dateFormatLocale":"en_US","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/multisrc/mmrcms/mmrcms-v0.0.4.dart","apiUrl":"","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"YugenMangas","id":719565854,"baseUrl":"https://yugenmangas.lat","lang":"es","typeSource":"heancms","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-es-yugenmangas.png","dateFormat":"yyyy-MM-dd'T'HH:mm:ss.SSSZZZZZ","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/multisrc/heancms/heancms-v0.0.4.dart","apiUrl":"https://api.yugenmangas.net","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"OmegaScans","id":555665028,"baseUrl":"https://omegascans.org","lang":"en","typeSource":"heancms","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-en-omegascans.png","dateFormat":"yyyy-MM-dd'T'HH:mm:ss.SSSZZZZZ","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/multisrc/heancms/heancms-v0.0.4.dart","apiUrl":"https://api.omegascans.org","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Perf Scan","id":452473272,"baseUrl":"https://perf-scan.fr","lang":"fr","typeSource":"heancms","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-fr-perfscan.png","dateFormat":"yyyy-MM-dd'T'HH:mm:ss.SSSZZZZZ","dateFormatLocale":"en","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/multisrc/heancms/heancms-v0.0.4.dart","apiUrl":"https://api.perf-scan.fr","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"MangaHere","id":434984458,"baseUrl":"http://www.mangahere.cc","lang":"en","typeSource":"single","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-en-mangahere.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/en/mangahere/mangahere-v0.0.4.dart","apiUrl":"","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Bato.to","id":108983442,"baseUrl":"https://bato.to","lang":"all","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.4.dart","apiUrl":"","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Bato.to","id":219967156,"baseUrl":"https://bato.to","lang":"en","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.4.dart","apiUrl":"","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Bato.to","id":946539390,"baseUrl":"https://bato.to","lang":"ar","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.4.dart","apiUrl":"","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Bato.to","id":1009090494,"baseUrl":"https://bato.to","lang":"bg","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.4.dart","apiUrl":"","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Bato.to","id":49344864,"baseUrl":"https://bato.to","lang":"zh","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.4.dart","apiUrl":"","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Bato.to","id":413792936,"baseUrl":"https://bato.to","lang":"cs","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.4.dart","apiUrl":"","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Bato.to","id":127120581,"baseUrl":"https://bato.to","lang":"da","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.4.dart","apiUrl":"","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Bato.to","id":897709680,"baseUrl":"https://bato.to","lang":"nl","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.4.dart","apiUrl":"","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Bato.to","id":454148350,"baseUrl":"https://bato.to","lang":"fil","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.4.dart","apiUrl":"","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Bato.to","id":174179665,"baseUrl":"https://bato.to","lang":"fi","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.4.dart","apiUrl":"","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Bato.to","id":318824497,"baseUrl":"https://bato.to","lang":"fr","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.4.dart","apiUrl":"","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Bato.to","id":1030715262,"baseUrl":"https://bato.to","lang":"de","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.4.dart","apiUrl":"","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Bato.to","id":395270492,"baseUrl":"https://bato.to","lang":"el","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.4.dart","apiUrl":"","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Bato.to","id":714199973,"baseUrl":"https://bato.to","lang":"he","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.4.dart","apiUrl":"","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Bato.to","id":596730405,"baseUrl":"https://bato.to","lang":"hi","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.4.dart","apiUrl":"","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Bato.to","id":1062815490,"baseUrl":"https://bato.to","lang":"hu","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.4.dart","apiUrl":"","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Bato.to","id":551583074,"baseUrl":"https://bato.to","lang":"id","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.4.dart","apiUrl":"","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Bato.to","id":627608115,"baseUrl":"https://bato.to","lang":"it","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.4.dart","apiUrl":"","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Bato.to","id":709143604,"baseUrl":"https://bato.to","lang":"ja","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.4.dart","apiUrl":"","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Bato.to","id":42724933,"baseUrl":"https://bato.to","lang":"ko","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.4.dart","apiUrl":"","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Bato.to","id":900155911,"baseUrl":"https://bato.to","lang":"ms","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.4.dart","apiUrl":"","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Bato.to","id":945309998,"baseUrl":"https://bato.to","lang":"pl","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.4.dart","apiUrl":"","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Bato.to","id":791127366,"baseUrl":"https://bato.to","lang":"pt","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.4.dart","apiUrl":"","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Bato.to","id":364027455,"baseUrl":"https://bato.to","lang":"pt-br","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.4.dart","apiUrl":"","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Bato.to","id":604327151,"baseUrl":"https://bato.to","lang":"ro","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.4.dart","apiUrl":"","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Bato.to","id":1057708733,"baseUrl":"https://bato.to","lang":"ru","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.4.dart","apiUrl":"","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Bato.to","id":106846058,"baseUrl":"https://bato.to","lang":"es","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.4.dart","apiUrl":"","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Bato.to","id":994364326,"baseUrl":"https://bato.to","lang":"es-419","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.4.dart","apiUrl":"","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Bato.to","id":214830540,"baseUrl":"https://bato.to","lang":"sv","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.4.dart","apiUrl":"","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Bato.to","id":375150025,"baseUrl":"https://bato.to","lang":"th","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.4.dart","apiUrl":"","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Bato.to","id":975805389,"baseUrl":"https://bato.to","lang":"tr","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.4.dart","apiUrl":"","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Bato.to","id":159356975,"baseUrl":"https://bato.to","lang":"uk","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.4.dart","apiUrl":"","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Bato.to","id":719702196,"baseUrl":"https://bato.to","lang":"vi","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.4.dart","apiUrl":"","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Bato.to","id":605330389,"baseUrl":"https://bato.to","lang":"af","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.4.dart","apiUrl":"","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Bato.to","id":500354556,"baseUrl":"https://bato.to","lang":"sq","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.4.dart","apiUrl":"","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Bato.to","id":364708326,"baseUrl":"https://bato.to","lang":"am","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.4.dart","apiUrl":"","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Bato.to","id":579132190,"baseUrl":"https://bato.to","lang":"hy","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.4.dart","apiUrl":"","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Bato.to","id":704228914,"baseUrl":"https://bato.to","lang":"az","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.4.dart","apiUrl":"","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Bato.to","id":465187235,"baseUrl":"https://bato.to","lang":"be","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.4.dart","apiUrl":"","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Bato.to","id":996023306,"baseUrl":"https://bato.to","lang":"bn","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.4.dart","apiUrl":"","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Bato.to","id":240943151,"baseUrl":"https://bato.to","lang":"bs","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.4.dart","apiUrl":"","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Bato.to","id":716816408,"baseUrl":"https://bato.to","lang":"my","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.4.dart","apiUrl":"","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Bato.to","id":539580717,"baseUrl":"https://bato.to","lang":"km","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.4.dart","apiUrl":"","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Bato.to","id":227037230,"baseUrl":"https://bato.to","lang":"ca","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.4.dart","apiUrl":"","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Bato.to","id":179733992,"baseUrl":"https://bato.to","lang":"ceb","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.4.dart","apiUrl":"","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Bato.to","id":419966767,"baseUrl":"https://bato.to","lang":"zh-hk","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.4.dart","apiUrl":"","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Bato.to","id":775604375,"baseUrl":"https://bato.to","lang":"zh-tw","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.4.dart","apiUrl":"","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Bato.to","id":741957110,"baseUrl":"https://bato.to","lang":"hr","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.4.dart","apiUrl":"","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Bato.to","id":65918010,"baseUrl":"https://bato.to","lang":"en-us","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.4.dart","apiUrl":"","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Bato.to","id":48306365,"baseUrl":"https://bato.to","lang":"eo","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.4.dart","apiUrl":"","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Bato.to","id":591213520,"baseUrl":"https://bato.to","lang":"et","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.4.dart","apiUrl":"","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Bato.to","id":208056920,"baseUrl":"https://bato.to","lang":"fo","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.4.dart","apiUrl":"","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Bato.to","id":304199459,"baseUrl":"https://bato.to","lang":"ka","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.4.dart","apiUrl":"","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Bato.to","id":281640882,"baseUrl":"https://bato.to","lang":"gn","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.4.dart","apiUrl":"","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Bato.to","id":94882230,"baseUrl":"https://bato.to","lang":"gu","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.4.dart","apiUrl":"","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Bato.to","id":218756163,"baseUrl":"https://bato.to","lang":"ht","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.4.dart","apiUrl":"","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Bato.to","id":683264032,"baseUrl":"https://bato.to","lang":"ha","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.4.dart","apiUrl":"","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Bato.to","id":461776450,"baseUrl":"https://bato.to","lang":"is","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.4.dart","apiUrl":"","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Bato.to","id":508086706,"baseUrl":"https://bato.to","lang":"ig","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.4.dart","apiUrl":"","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Bato.to","id":73117126,"baseUrl":"https://bato.to","lang":"ga","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.4.dart","apiUrl":"","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Bato.to","id":930639709,"baseUrl":"https://bato.to","lang":"jv","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.4.dart","apiUrl":"","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Bato.to","id":530409414,"baseUrl":"https://bato.to","lang":"kn","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.4.dart","apiUrl":"","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Bato.to","id":998225990,"baseUrl":"https://bato.to","lang":"kk","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.4.dart","apiUrl":"","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Bato.to","id":1041723980,"baseUrl":"https://bato.to","lang":"ku","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.4.dart","apiUrl":"","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Bato.to","id":126099954,"baseUrl":"https://bato.to","lang":"ky","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.4.dart","apiUrl":"","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Bato.to","id":887942732,"baseUrl":"https://bato.to","lang":"lo","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.4.dart","apiUrl":"","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Bato.to","id":842729597,"baseUrl":"https://bato.to","lang":"lv","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.4.dart","apiUrl":"","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Bato.to","id":634440809,"baseUrl":"https://bato.to","lang":"lt","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.4.dart","apiUrl":"","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Bato.to","id":180153330,"baseUrl":"https://bato.to","lang":"lb","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.4.dart","apiUrl":"","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Bato.to","id":954223541,"baseUrl":"https://bato.to","lang":"mk","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.4.dart","apiUrl":"","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Bato.to","id":90956400,"baseUrl":"https://bato.to","lang":"mg","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.4.dart","apiUrl":"","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Bato.to","id":495467192,"baseUrl":"https://bato.to","lang":"ml","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.4.dart","apiUrl":"","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Bato.to","id":543265972,"baseUrl":"https://bato.to","lang":"mt","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.4.dart","apiUrl":"","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Bato.to","id":707155829,"baseUrl":"https://bato.to","lang":"mi","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.4.dart","apiUrl":"","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Bato.to","id":707060384,"baseUrl":"https://bato.to","lang":"mr","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.4.dart","apiUrl":"","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Bato.to","id":284683165,"baseUrl":"https://bato.to","lang":"mn","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.4.dart","apiUrl":"","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Bato.to","id":984326467,"baseUrl":"https://bato.to","lang":"ne","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.4.dart","apiUrl":"","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Bato.to","id":131491491,"baseUrl":"https://bato.to","lang":"no","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.4.dart","apiUrl":"","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Bato.to","id":778635885,"baseUrl":"https://bato.to","lang":"ny","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.4.dart","apiUrl":"","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Bato.to","id":963992548,"baseUrl":"https://bato.to","lang":"ps","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.4.dart","apiUrl":"","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Bato.to","id":679819356,"baseUrl":"https://bato.to","lang":"fa","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.4.dart","apiUrl":"","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Bato.to","id":661882861,"baseUrl":"https://bato.to","lang":"rm","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.4.dart","apiUrl":"","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Bato.to","id":48526565,"baseUrl":"https://bato.to","lang":"sm","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.4.dart","apiUrl":"","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Bato.to","id":175814547,"baseUrl":"https://bato.to","lang":"sr","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.4.dart","apiUrl":"","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Bato.to","id":45175594,"baseUrl":"https://bato.to","lang":"sh","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.4.dart","apiUrl":"","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Bato.to","id":1066078403,"baseUrl":"https://bato.to","lang":"st","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.4.dart","apiUrl":"","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Bato.to","id":314138671,"baseUrl":"https://bato.to","lang":"sn","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.4.dart","apiUrl":"","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Bato.to","id":1034525411,"baseUrl":"https://bato.to","lang":"sd","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.4.dart","apiUrl":"","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Bato.to","id":756819764,"baseUrl":"https://bato.to","lang":"si","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.4.dart","apiUrl":"","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Bato.to","id":1009716343,"baseUrl":"https://bato.to","lang":"sk","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.4.dart","apiUrl":"","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Bato.to","id":468154856,"baseUrl":"https://bato.to","lang":"sl","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.4.dart","apiUrl":"","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Bato.to","id":601076648,"baseUrl":"https://bato.to","lang":"so","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.4.dart","apiUrl":"","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Bato.to","id":713165767,"baseUrl":"https://bato.to","lang":"sw","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.4.dart","apiUrl":"","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Bato.to","id":999603530,"baseUrl":"https://bato.to","lang":"tg","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.4.dart","apiUrl":"","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Bato.to","id":215668101,"baseUrl":"https://bato.to","lang":"ta","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.4.dart","apiUrl":"","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Bato.to","id":349639462,"baseUrl":"https://bato.to","lang":"ti","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.4.dart","apiUrl":"","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Bato.to","id":101342233,"baseUrl":"https://bato.to","lang":"to","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.4.dart","apiUrl":"","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Bato.to","id":308642475,"baseUrl":"https://bato.to","lang":"tk","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.4.dart","apiUrl":"","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Bato.to","id":49360269,"baseUrl":"https://bato.to","lang":"ur","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.4.dart","apiUrl":"","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Bato.to","id":110209479,"baseUrl":"https://bato.to","lang":"uz","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.4.dart","apiUrl":"","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Bato.to","id":335757198,"baseUrl":"https://bato.to","lang":"yo","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.4.dart","apiUrl":"","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Bato.to","id":955608975,"baseUrl":"https://bato.to","lang":"zu","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.4.dart","apiUrl":"","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Bato.to","id":98386892,"baseUrl":"https://bato.to","lang":"eu","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.4.dart","apiUrl":"","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"Bato.to","id":664604703,"baseUrl":"https://bato.to","lang":"pt-PT","typeSource":"bato.to","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-all-batoto.png","dateFormat":"MMM dd,yyyy","dateFormatLocale":"en","isNsfw":true,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/src/all/batoto/batoto-v0.0.4.dart","apiUrl":"","version":"0.0.4","isManga":true,"isFullData":false,"appMinVerReq":"0.1.1"},{"name":"MangaSee","id":531216751,"baseUrl":"https://mangasee123.com","lang":"en","typeSource":"nepnep","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-en-mangasee.png","dateFormat":"yyyy-MM-dd HH:mm:ss","dateFormatLocale":"en","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/multisrc/nepnep/nepnep-v0.0.4.dart","apiUrl":"","version":"0.0.4","isManga":true,"isFullData":true,"appMinVerReq":"0.1.1"},{"name":"MangaLife","id":434747478,"baseUrl":"https://manga4life.com","lang":"en","typeSource":"nepnep","iconUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/icons/mangayomi-en-mangalife.png","dateFormat":"yyyy-MM-dd HH:mm:ss","dateFormatLocale":"en","isNsfw":false,"hasCloudflare":false,"sourceCodeUrl":"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/manga/multisrc/nepnep/nepnep-v0.0.4.dart","apiUrl":"","version":"0.0.4","isManga":true,"isFullData":true,"appMinVerReq":"0.1.1"}] \ No newline at end of file diff --git a/model/source.dart b/model/source.dart index ce1b03fb..ce9b7335 100644 --- a/model/source.dart +++ b/model/source.dart @@ -47,7 +47,7 @@ class Source { this.version = "", this.isManga = true, this.isFullData = false, - this.appMinVerReq = "0.0.6"}); + this.appMinVerReq = "0.1.1"}); Map toJson() { return { From d49a766b3b83ce773e6dee959b80c8d21c50532d Mon Sep 17 00:00:00 2001 From: kodjomoustapha <107993382+kodjodevf@users.noreply.github.com> Date: Wed, 29 Nov 2023 18:16:34 +0100 Subject: [PATCH 7/7] Update --- anime/multisrc/zorotheme/zorotheme-v0.0.5.dart | 2 ++ anime/src/en/aniwave/aniwave-v0.0.15.dart | 1 + anime/src/en/gogoanime/gogoanime-v0.0.4.dart | 1 + manga/multisrc/madara/madara-v0.0.4.dart | 1 + manga/multisrc/mangareader/mangareader-v0.0.5.dart | 1 + manga/multisrc/nepnep/nepnep-v0.0.4.dart | 1 + manga/src/all/batoto/batoto-v0.0.4.dart | 1 + manga/src/all/comick/comick-v0.0.4.dart | 1 + manga/src/all/mangadex/mangadex-v0.0.45.dart | 1 + manga/src/en/mangahere/mangahere-v0.0.4.dart | 1 + 10 files changed, 11 insertions(+) diff --git a/anime/multisrc/zorotheme/zorotheme-v0.0.5.dart b/anime/multisrc/zorotheme/zorotheme-v0.0.5.dart index a4571c21..affc3b4a 100644 --- a/anime/multisrc/zorotheme/zorotheme-v0.0.5.dart +++ b/anime/multisrc/zorotheme/zorotheme-v0.0.5.dart @@ -286,6 +286,8 @@ class ZoroTheme extends MProvider { SelectFilterOption(i.toString(), i.toString()), SelectFilterOption("All", "") ]; + + @override List getFilterList() { return [ SelectFilter("TypeFilter", "Type", 0, [ diff --git a/anime/src/en/aniwave/aniwave-v0.0.15.dart b/anime/src/en/aniwave/aniwave-v0.0.15.dart index 80656999..eacd89e7 100644 --- a/anime/src/en/aniwave/aniwave-v0.0.15.dart +++ b/anime/src/en/aniwave/aniwave-v0.0.15.dart @@ -294,6 +294,7 @@ class Aniwave extends MProvider { return vrf; } + @override List getFilterList() { return [ SelectFilter("OrderFilter", "Sort order", 0, [ diff --git a/anime/src/en/gogoanime/gogoanime-v0.0.4.dart b/anime/src/en/gogoanime/gogoanime-v0.0.4.dart index dc0ba8dd..b6eab5d9 100644 --- a/anime/src/en/gogoanime/gogoanime-v0.0.4.dart +++ b/anime/src/en/gogoanime/gogoanime-v0.0.4.dart @@ -244,6 +244,7 @@ class GogoAnime extends MProvider { return videos; } + @override List getFilterList() { return [ HeaderFilter("Advanced search"), diff --git a/manga/multisrc/madara/madara-v0.0.4.dart b/manga/multisrc/madara/madara-v0.0.4.dart index bcf84a40..7393036b 100644 --- a/manga/multisrc/madara/madara-v0.0.4.dart +++ b/manga/multisrc/madara/madara-v0.0.4.dart @@ -355,6 +355,7 @@ class Madara extends MProvider { return pageUrls; } + @override List getFilterList() { return [ TextFilter("AuthorFilter", "Author"), diff --git a/manga/multisrc/mangareader/mangareader-v0.0.5.dart b/manga/multisrc/mangareader/mangareader-v0.0.5.dart index e4e016e0..20d8bc0f 100644 --- a/manga/multisrc/mangareader/mangareader-v0.0.5.dart +++ b/manga/multisrc/mangareader/mangareader-v0.0.5.dart @@ -235,6 +235,7 @@ class MangaReader extends MProvider { return MPages(mangaList, true); } + @override List getFilterList() { return [ SeparatorFilter(), diff --git a/manga/multisrc/nepnep/nepnep-v0.0.4.dart b/manga/multisrc/nepnep/nepnep-v0.0.4.dart index 524dd4aa..86f4a6cc 100644 --- a/manga/multisrc/nepnep/nepnep-v0.0.4.dart +++ b/manga/multisrc/nepnep/nepnep-v0.0.4.dart @@ -307,6 +307,7 @@ class NepNep extends MProvider { return '-chapter-$n$suffix$index.html'; } + @override List getFilterList() { return [ TextFilter("YearFilter", "Years"), diff --git a/manga/src/all/batoto/batoto-v0.0.4.dart b/manga/src/all/batoto/batoto-v0.0.4.dart index 4cdde503..060f8176 100644 --- a/manga/src/all/batoto/batoto-v0.0.4.dart +++ b/manga/src/all/batoto/batoto-v0.0.4.dart @@ -272,6 +272,7 @@ class Batoto extends MProvider { return "?"; } + @override List getFilterList() { return [ SelectFilter("LetterFilter", "Letter matching mode (Slow)", 0, [ diff --git a/manga/src/all/comick/comick-v0.0.4.dart b/manga/src/all/comick/comick-v0.0.4.dart index 66e37a98..3afbaebc 100644 --- a/manga/src/all/comick/comick-v0.0.4.dart +++ b/manga/src/all/comick/comick-v0.0.4.dart @@ -214,6 +214,7 @@ class ComickFun extends MProvider { return "?"; } + @override List getFilterList() { return [ HeaderFilter("The filter is ignored when using text search."), diff --git a/manga/src/all/mangadex/mangadex-v0.0.45.dart b/manga/src/all/mangadex/mangadex-v0.0.45.dart index 0278beef..3660487d 100644 --- a/manga/src/all/mangadex/mangadex-v0.0.45.dart +++ b/manga/src/all/mangadex/mangadex-v0.0.45.dart @@ -367,6 +367,7 @@ class MangaDex extends MProvider { return coverFileName; } + @override List getFilterList() { return [ CheckBoxFilter( diff --git a/manga/src/en/mangahere/mangahere-v0.0.4.dart b/manga/src/en/mangahere/mangahere-v0.0.4.dart index 1e31a2ac..fb20f8da 100644 --- a/manga/src/en/mangahere/mangahere-v0.0.4.dart +++ b/manga/src/en/mangahere/mangahere-v0.0.4.dart @@ -258,6 +258,7 @@ class MangaHere extends MProvider { return "?"; } + @override List getFilterList() { return [ SelectFilter("TypeList", "Type", 1, [