import 'dart:convert'; import 'package:bridge_lib/bridge_lib.dart'; searchManga(MangaModel manga) async { final headers = getHeader(manga.baseUrl); final url = "${manga.apiUrl}/series/search"; final body = {"term": manga.query}; final data = {"url": url, "headers": headers, "body": body}; final res = await MBridge.http(json.encode(data), 1); if (res.isEmpty) { return manga; } List jsonList = []; List names = []; List urls = []; List images = []; if (res.startsWith("{")) { jsonList = MBridge.jsonPathToList(res, r'$.data[*]'); } else { jsonList = MBridge.jsonDecodeToList(res); } for (var a in jsonList) { final thumbnail = MBridge.getMapValue(a, "thumbnail", 0); if (thumbnail.startsWith("https://")) { images.add(thumbnail); } else { images.add("${manga.apiUrl}/cover/$thumbnail"); } names.add(MBridge.getMapValue(a, "title", 0)); final seriesSlug = MBridge.regExp( MBridge.getMapValue(a, "series_slug", 0), "-\\d+", "", 0, 0); urls.add("/series/$seriesSlug"); } manga.urls = urls; manga.images = images; manga.names = names; return manga; } getPopularManga(MangaModel manga) async { final headers = getHeader(manga.baseUrl); final url = "${manga.apiUrl}/series/querysearch"; final body = { "page": manga.page, "order": "desc", "order_by": "total_views", "series_status": "Ongoing", "series_type": "Comic" }; final data = { "url": url, "headers": headers, "sourceId": manga.sourceId, "body": body }; final res = await MBridge.http(json.encode(data), 1); if (res.isEmpty) { return manga; } List jsonList = []; List names = []; List urls = []; List images = []; if (res.startsWith("{")) { jsonList = MBridge.jsonPathToList(res, r'$.data[*]'); } else { jsonList = MBridge.jsonDecodeToList(res); } for (var a in jsonList) { final thumbnail = MBridge.getMapValue(a, "thumbnail", 0); if (thumbnail.startsWith("https://")) { images.add(thumbnail); } else { images.add("${manga.apiUrl}/cover/$thumbnail"); } names.add(MBridge.getMapValue(a, "title", 0)); final seriesSlug = MBridge.regExp( MBridge.getMapValue(a, "series_slug", 0), "-\\d+", "", 0, 0); urls.add("/series/$seriesSlug"); } manga.urls = urls; manga.images = images; manga.names = names; return manga; } getLatestUpdatesManga(MangaModel manga) async { final headers = getHeader(manga.baseUrl); final url = "${manga.apiUrl}/series/querysearch"; final body = { "page": manga.page, "order": "desc", "order_by": "latest", "series_status": "Ongoing", "series_type": "Comic" }; final data = { "url": url, "headers": headers, "sourceId": manga.sourceId, "body": body }; final res = await MBridge.http(json.encode(data), 1); if (res.isEmpty) { return manga; } List jsonList = []; List names = []; List urls = []; List images = []; if (res.startsWith("{")) { jsonList = MBridge.jsonPathToList(res, r'$.data[*]'); } else { jsonList = MBridge.jsonDecodeToList(res); } for (var a in jsonList) { final thumbnail = MBridge.getMapValue(a, "thumbnail", 0); if (thumbnail.startsWith("https://")) { images.add(thumbnail); } else { images.add("${manga.apiUrl}/cover/$thumbnail"); } names.add(MBridge.getMapValue(a, "title", 0)); final seriesSlug = MBridge.regExp( MBridge.getMapValue(a, "series_slug", 0), "-\\d+", "", 0, 0); urls.add("/series/$seriesSlug"); } manga.urls = urls; manga.images = images; manga.names = names; return manga; } getMangaDetail(MangaModel manga) async { String currentSlug = MBridge.listParse(manga.link.split('/'), 2)[0]; final headers = getHeader(manga.baseUrl); final url = "${manga.apiUrl}/series/$currentSlug"; final data = {"url": url, "headers": headers}; final res = await MBridge.http(json.encode(data), 0); if (res.isEmpty) { return manga; } manga.author = MBridge.getMapValue(res, "author", 0); manga.description = MBridge.getMapValue(res, "description", 0); manga.genre = MBridge.jsonPathToString(res, r"$.tags[*].name", "._").split("._"); final chapters = MBridge.jsonPathToList(res, r"$.chapters[*]"); List chapterTitles = []; List chapterUrls = []; List chapterDates = []; for (var chapter in chapters) { final chapterName = MBridge.getMapValue(chapter, "chapter_name", 0); final chapterSlug = MBridge.getMapValue(chapter, "chapter_slug", 0); final chapterId = MBridge.getMapValue(chapter, "id", 0); final createdAt = MBridge.getMapValue(chapter, "created_at", 0); chapterUrls.add("/series/$currentSlug/$chapterSlug#$chapterId"); chapterTitles.add(chapterName); chapterDates.add(createdAt); } manga.urls = chapterUrls; manga.names = chapterTitles; manga.chaptersDateUploads = MBridge.listParse( MBridge.listParseDateTime( chapterDates, manga.dateFormat, manga.dateFormatLocale), 0); return manga; } getChapterUrl(MangaModel manga) async { String chapterId = MBridge.listParse(manga.link.split('#'), 2)[0]; final headers = getHeader(manga.baseUrl); final url = "${manga.apiUrl}/series/chapter/$chapterId"; final data = {"url": url, "headers": headers}; final res = await MBridge.http(json.encode(data), 0); if (res.isEmpty) { return []; } final pages = MBridge.jsonPathToList(res, r"$.content.images[*]"); List pageUrls = []; for (var u in pages) { final url = u.replaceAll('"', ""); if (url.startsWith("http")) { pageUrls.add(url); } else { pageUrls.add("${manga.apiUrl}/$url"); } } return pageUrls; } Map getHeader(String url) { final headers = { 'Origin': url, 'Referer': '$url/', 'Accept': 'application/json, text/plain, */*', 'Content-Type': 'application/json' }; return headers; }