import 'dart:convert'; import 'package:bridge_lib/bridge_lib.dart'; searchManga(MangaModel manga) async { final url = "${manga.baseUrl}/search?query=${manga.query}"; final data = {"url": url, "headers": null, "sourceId": manga.sourceId}; final res = await MBridge.http(json.encode(data), 0); if (res.isEmpty) { return manga; } final jsonList = MBridge.jsonPathToList(res, r'$.suggestions[*]'); List urls = []; List names = []; List images = []; for (var da in jsonList) { final value = MBridge.getMapValue(da, "value", 0); final data = MBridge.getMapValue(da, "data", 0); if (manga.source == 'Scan VF') { urls.add('${manga.baseUrl}/$data'); } else { urls.add('${manga.baseUrl}/manga/$data'); } names.add(value); if (manga.source == "Manga-FR") { images.add("${manga.baseUrl}/uploads/manga/$data.jpg"); } else { images .add("${manga.baseUrl}/uploads/manga/$data/cover/cover_250x350.jpg"); } } manga.names = names; manga.urls = urls; manga.images = images; return manga; } getPopularManga(MangaModel manga) async { final url = "${manga.baseUrl}/filterList?page=${manga.page}&sortBy=views&asc=false"; final data = {"url": url, "headers": null, "sourceId": manga.sourceId}; final res = await MBridge.http(json.encode(data), 0); if (res.isEmpty) { return manga; } manga.urls = MBridge.xpath(res, '//*[ @class="chart-title"]/@href', '._').split('._'); manga.names = MBridge.xpath(res, '//*[ @class="chart-title"]/text()', '._').split('._'); List images = []; for (var url in manga.urls) { if (manga.source == "Manga-FR") { images.add( "${manga.baseUrl}/uploads/manga/${MBridge.listParse(MBridge.stringParse(url).split('/'), 2)[0]}.jpg"); } else { images.add( "${manga.baseUrl}/uploads/manga/${MBridge.listParse(MBridge.stringParse(url).split('/'), 2)[0]}/cover/cover_250x350.jpg"); } } manga.images = images; return manga; } getMangaDetail(MangaModel manga) async { final statusList = [ { "complete": 1, "complet": 1, "completo": 1, "zakończone": 1, "concluído": 1, "مكتملة": 1, "ongoing": 0, "en cours": 0, "em lançamento": 0, "prace w toku": 0, "ativo": 0, "مستمرة": 0, "em andamento": 0 } ]; final datas = { "url": manga.link, "headers": null, "sourceId": manga.sourceId }; final res = await MBridge.http(json.encode(datas), 0); if (res.isEmpty) { return manga; } manga.author = MBridge.xpath( res, '//*[@class="dl-horizontal"]/dt[contains(text(), "Auteur(s)") or contains(text(), "Author(s)") or contains(text(), "Autor(es)") or contains(text(), "Yazar(lar) or contains(text(), "Mangaka(lar)")]//following-sibling::dd[1]/text()', ''); final status = MBridge.xpath( res, '//*[@class="dl-horizontal"]/dt[contains(text(), "Statut") or contains(text(), "Status") or contains(text(), "Estado") or contains(text(), "Durum")]/following-sibling::dd[1]/text()', ''); manga.status = MBridge.parseStatus(status, statusList); manga.description = MBridge.xpath( res, '//*[@class="well" or @class="manga well"]/p/text()', ''); manga.genre = MBridge.xpath( res, '//*[@class="dl-horizontal"]/dt[contains(text(), "Categories") or contains(text(), "Categorias") or contains(text(), "Categorías") or contains(text(), "Catégories") or contains(text(), "Kategoriler" or contains(text(), "Kategorie") or contains(text(), "Kategori") or contains(text(), "Tagi"))]/following-sibling::dd[1]/text()', '') .split(','); manga.names = MBridge.xpath(res, '//*[@class="chapter-title-rtl"]/a/text()', "-.") .split("-."); manga.urls = MBridge.xpath(res, '//*[@class="chapter-title-rtl"]/a/@href', "-.") .split("-."); final date = MBridge.xpath(res, '//*[@class="date-chapter-title-rtl"]/text()', "-.") .split("-."); manga.chaptersDateUploads = MBridge.listParseDateTime(date, "d MMM. yyyy", "en_US"); return manga; } getLatestUpdatesManga(MangaModel manga) async { final url = "${manga.baseUrl}/latest-release?page=${manga.page}"; final data = {"url": url, "headers": null, "sourceId": manga.sourceId}; final res = await MBridge.http(json.encode(data), 0); if (res.isEmpty) { return manga; } manga.urls = MBridge.xpath(res, '//*[@class="manga-item"]/h3/a/@href', '._') .split('._'); manga.names = MBridge.xpath(res, '//*[@class="manga-item"]/h3/a/text()', '._') .split('._'); List images = []; for (var url in manga.urls) { if (manga.source == "Manga-FR") { images.add( "${manga.baseUrl}/uploads/manga/${MBridge.listParse(MBridge.stringParse(url).split('/'), 2)[0]}.jpg"); } else { images.add( "${manga.baseUrl}/uploads/manga/${MBridge.listParse(MBridge.stringParse(url).split('/'), 2)[0]}/cover/cover_250x350.jpg"); } } manga.images = images; return manga; } getChapterUrl(MangaModel manga) async { final datas = { "url": manga.link, "headers": null, "sourceId": manga.sourceId }; final res = await MBridge.http(json.encode(datas), 0); if (res.isEmpty) { return []; } List pagesUrl = []; final pages = MBridge.listParse( MBridge.xpath(res, '//*[@id="all"]/img[@class="img-responsive"]/@data-src', "._._") .split("._._"), 0); for (var page in pages) { if (page.startsWith('//')) { pagesUrl.add(page.replaceAll('//', 'https://')); } else { pagesUrl.add(page); } } return pagesUrl; }