import 'dart:convert'; import 'package:bridge_lib/bridge_lib.dart'; getPopularManga(MangaModel manga) async { final url = "${manga.baseUrl}/manga/?page=${manga.page}&order=popular"; final data = {"url": url, "headers": null, "sourceId": manga.sourceId}; final res = await MBridge.http(json.encode(data), 0); if (res.isEmpty) { return manga; } manga.urls = MBridge.xpath(res, '//*[ @class="imgu" or @class="bsx"]/a/@href', '._') .split('._'); manga.names = MBridge.xpath(res, '//*[ @class="imgu" or @class="bsx"]/a/@title', '._') .split('._'); manga.images = MBridge.xpath( res, '//*[ @class="imgu" or @class="bsx"]/a/div[1]/img/@src', '._') .split('._'); return manga; } getLatestUpdatesManga(MangaModel manga) async { final url = "${manga.baseUrl}/manga/?page=${manga.page}&order=update"; final data = {"url": url, "headers": null, "sourceId": manga.sourceId}; final res = await MBridge.http(json.encode(data), 0); if (res.isEmpty) { return manga; } manga.urls = MBridge.xpath(res, '//*[ @class="imgu" or @class="bsx"]/a/@href', '._') .split('._'); manga.names = MBridge.xpath(res, '//*[ @class="imgu" or @class="bsx"]/a/@title', '._') .split('._'); manga.images = MBridge.xpath( res, '//*[ @class="imgu" or @class="bsx"]/a/div[1]/img/@src', '._') .split('._'); return manga; } getMangaDetail(MangaModel manga) async { final statusList = [ { "مستمرة": 0, "En curso": 0, "Ongoing": 0, "On going": 0, "Ativo": 0, "En Cours": 0, "Berjalan": 0, "Продолжается": 0, "Updating": 0, "Lançando": 0, "In Arrivo": 0, "OnGoing": 0, "Đang tiến hành": 0, "em lançamento": 0, "Онгоінг": 0, "Publishing": 0, "Curso": 0, "En marcha": 0, "Publicandose": 0, "连载中": 0, "Devam Ediyor": 0, "Em Andamento": 0, "In Corso": 0, "Güncel": 0, "Emision": 0, "En emision": 0, "مستمر": 0, "Đã hoàn thành": 1, "مكتملة": 1, "Завершено": 1, "Complété": 1, "Fini": 1, "Terminé": 1, "Tamamlandı": 1, "Tamat": 1, "Completado": 1, "Concluído": 1, "Finished": 1, "Completed": 1, "Completo": 1, "Concluido": 1, "已完结": 1, "Finalizado": 1, "Completata": 1, "One-Shot": 1, "Bitti": 1, "hiatus": 2, } ]; final datas = { "url": manga.link, "headers": null, "sourceId": manga.sourceId }; final res = await MBridge.http(json.encode(datas), 0); if (res.isEmpty) { return manga; } manga.author = MBridge.xpath( res, '//*[@class="imptdt" and contains(text(), "Author") or @class="infotable" and contains(text(), "Author") or @class="infotable" and contains(text(), "Auteur") or @class="infotable" and contains(text(), "Autor")]/text()', '') .replaceAll("Autor", "") .replaceAll("Author", "") .replaceAll("Auteur", "") .replaceAll("[Add, ]", ""); manga.description = MBridge.querySelectorAll( res, ".desc, .entry-content[itemprop=description]", 0, "", 0, 0, ""); final status = MBridge.xpath( res, '//*[@class="imptdt" and contains(text(), "Status") or @class="imptdt" and contains(text(), "Estado") or @class="infotable" and contains(text(), "Status") or @class="infotable" and contains(text(), "Statut")]/text()', '') .replaceAll("Status", "") .replaceAll("Estado", "") .replaceAll("Statut", ""); manga.status = MBridge.parseStatus(status, statusList); manga.genre = MBridge.xpath( res, '//*[@class="gnr" or @class="mgen" or @class="seriestugenre" ]/a/text()', "-.") .split("-."); manga.urls = MBridge.xpath( res, '//*[@class="bxcl" or @class="cl" or @class="chbox" or @class="eph-num" or @id="chapterlist"]/div/a[not(@href="#/chapter-{{number}}")]/@href', "-.") .split("-."); manga.names = MBridge.xpath( res, '//*[@class="bxcl" or @class="cl" or @class="chbox" or @class="eph-num" or @id="chapterlist"]/div/a/span[@class="chapternum" and not(text()="Chapter {{number}}") or @class="lch" and not(text()="Chapter {{number}}")]/text()', "-.") .split("-."); final chaptersDateUploads = MBridge.xpath( res, '//*[@class="bxcl" or @class="cl" or @class="chbox" or @class="eph-num" or @id="chapterlist"]/div/a/span[@class="chapterdate" and not(text()="{{date}}")]/text()', "-.") .split("-."); manga.chaptersDateUploads = MBridge.listParseDateTime( chaptersDateUploads, manga.dateFormat, manga.dateFormatLocale); return manga; } searchManga(MangaModel manga) async { final url = "${manga.baseUrl}/manga/?&title=${manga.query}&page=${manga.page}"; final data = {"url": url, "headers": null, "sourceId": manga.sourceId}; final res = await MBridge.http(json.encode(data), 0); if (res.isEmpty) { return manga; } manga.urls = MBridge.xpath(res, '//*[ @class="imgu" or @class="bsx"]/a/@href', '._') .split('._'); manga.names = MBridge.xpath(res, '//*[ @class="imgu" or @class="bsx"]/a/@title', '._') .split('._'); manga.images = MBridge.xpath( res, '//*[ @class="imgu" or @class="bsx"]/a/div[1]/img/@src', '._') .split('._'); return manga; } getChapterUrl(MangaModel manga) async { final datas = { "url": manga.link, "headers": null, "sourceId": manga.sourceId }; final res = await MBridge.http(json.encode(datas), 0); if (res.isEmpty) { return []; } List pagesUrl = []; final pages = MBridge.xpath(res, '//*[@id="readerarea"]/img/@src', "._._") .split("._._"); if (pages.length == 1) { final images = MBridge.regExp(res, "\"images\"\\s*:\\s*(\\[.*?])", "", 1, 1); final pages = MBridge.jsonDecodeToList(images); for (var page in pages) { pagesUrl.add(page); } } else { pagesUrl = pages; } return pagesUrl; }