mirror of
https://github.com/kodjodevf/mangayomi.git
synced 2026-03-11 17:25:32 +00:00
add mangakawaii source
This commit is contained in:
parent
5642ee0bbe
commit
8511944d20
4 changed files with 164 additions and 3 deletions
|
|
@ -137,6 +137,34 @@ Future<GetMangaChapterUrlModel> getMangaChapterUrl(
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
/***********/
|
||||
/*mangakawaii*/
|
||||
/***********/
|
||||
|
||||
else if (modelManga.source == 'mangakawaii') {
|
||||
final response = await http.get(Uri.parse(modelManga.chapterUrl![index]));
|
||||
var chapterSlug = RegExp("""var chapter_slug = "([^"]*)";""")
|
||||
.allMatches(response.body.toString())
|
||||
.last
|
||||
.group(1);
|
||||
var mangaSlug = RegExp("""var oeuvre_slug = "([^"]*)";""")
|
||||
.allMatches(response.body.toString())
|
||||
.last
|
||||
.group(1);
|
||||
var pages = RegExp('''"page_image":"([^"]*)"''')
|
||||
.allMatches(response.body.toString())
|
||||
.map((e) => e.group(1));
|
||||
|
||||
for (var tt in pages) {
|
||||
urll.add(
|
||||
'https://cdn.mangakawaii.pics/uploads/manga/$mangaSlug/chapters_fr/$chapterSlug/$tt');
|
||||
}
|
||||
ref.watch(hiveBoxMangaInfo).put(
|
||||
"${modelManga.source}/${modelManga.name}/${modelManga.chapterTitle![index]}-pageurl",
|
||||
urll);
|
||||
}
|
||||
|
||||
/***********/
|
||||
/*mangahere*/
|
||||
/***********/
|
||||
|
|
|
|||
|
|
@ -292,6 +292,119 @@ Future<GetMangaDetailModel> getMangaDetail(GetMangaDetailRef ref,
|
|||
}
|
||||
}
|
||||
}
|
||||
/***********/
|
||||
/*mangakawaii*/
|
||||
/***********/
|
||||
else if (source == "mangakawaii") {
|
||||
final dom = await httpResToDom(
|
||||
url: 'https://www.mangakawaii.io$url',
|
||||
headers: {"Accept-Language": "fr"});
|
||||
List detail = [];
|
||||
imageUrl =
|
||||
"https://cdn.mangakawaii.pics/uploads$url/cover/cover_250x350.jpg";
|
||||
if (dom.querySelectorAll('dd.text-justify.text-break').isNotEmpty) {
|
||||
final tt = dom
|
||||
.querySelectorAll('dd.text-justify.text-break')
|
||||
.map((e) => e.text.trim())
|
||||
.toList();
|
||||
description = tt[0];
|
||||
}
|
||||
if (dom
|
||||
.querySelectorAll('span.badge.bg-success.text-uppercase')
|
||||
.isNotEmpty) {
|
||||
final tt = dom
|
||||
.querySelectorAll('span.badge.bg-success.text-uppercase')
|
||||
.map((e) => e.text.trim())
|
||||
.toList();
|
||||
detail.add(tt[0]);
|
||||
} else {
|
||||
detail.add("");
|
||||
}
|
||||
|
||||
if (dom.querySelectorAll('a[href*=author]').isNotEmpty) {
|
||||
final tt = dom
|
||||
.querySelectorAll('a[href*=author]')
|
||||
.map((e) => e.text.trim())
|
||||
.toList();
|
||||
detail.add(tt[0]);
|
||||
} else {
|
||||
detail.add("");
|
||||
}
|
||||
|
||||
if (dom.querySelectorAll('a[href*=category]').isNotEmpty) {
|
||||
final tt = dom
|
||||
.querySelectorAll('a[href*=category]')
|
||||
.map((e) => e.text.trim())
|
||||
.toList();
|
||||
for (var ok in tt) {
|
||||
genre.add(ok);
|
||||
}
|
||||
}
|
||||
detail = detail.toSet().toList();
|
||||
status = detail[0];
|
||||
author = detail[1];
|
||||
if (dom.querySelectorAll("tr[class*='volume-']").isNotEmpty) {
|
||||
final url = dom.querySelectorAll("tr[class*='volume-']").map((e) {
|
||||
RegExp exp = RegExp(r'<a href="([^"]+)"');
|
||||
Iterable<Match> matches = exp.allMatches(e.outerHtml);
|
||||
String? firstMatch = matches.first.group(1);
|
||||
return firstMatch;
|
||||
}).toList();
|
||||
final htm = await httpResToDom(
|
||||
url: 'https://www.mangakawaii.io${url[0]}',
|
||||
headers: {"Accept-Language": "fr"});
|
||||
|
||||
if (htm
|
||||
.querySelectorAll(
|
||||
'#bottom_nav_reader > div > div > ul.chapter-pager.navbar-nav > li.nav-item.dropup.d-inline-block > ul > li > a')
|
||||
.isNotEmpty) {
|
||||
final tt = htm
|
||||
.querySelectorAll(
|
||||
'#bottom_nav_reader > div > div > ul.chapter-pager.navbar-nav > li.nav-item.dropup.d-inline-block > ul > li > a')
|
||||
.map((e) => e.innerHtml)
|
||||
.toList();
|
||||
final urlz = htm
|
||||
.querySelectorAll(
|
||||
"#bottom_nav_reader > div > div > ul.chapter-pager.navbar-nav > li.nav-item.dropup.d-inline-block > ul > li ")
|
||||
.map((e) => e.innerHtml)
|
||||
.toList();
|
||||
|
||||
for (var ok in urlz) {
|
||||
chapterUrl.add(ok.split('href="')[1].split('"').first);
|
||||
}
|
||||
for (var ok in tt) {
|
||||
chapterTitle.add(ok);
|
||||
}
|
||||
if (dom.querySelectorAll("tr[class*='volume-']").isNotEmpty) {
|
||||
final url = dom
|
||||
.querySelectorAll("tr[class*='volume-']")
|
||||
.map((e) => e
|
||||
.querySelectorAll('td.table__date')
|
||||
.map((e) => e.text.trim())
|
||||
.toList()[0])
|
||||
.toList();
|
||||
if (urlz.length > url.length) {
|
||||
for (var _ in urlz) {
|
||||
chapterDate.add(DateTime.now()
|
||||
.toString()
|
||||
.substring(0, 10)
|
||||
.replaceAll('-', "/"));
|
||||
}
|
||||
} else {
|
||||
for (var ok in url) {
|
||||
chapterDate.add(ok
|
||||
.split(" ")
|
||||
.first
|
||||
.toString()
|
||||
.substring(0, 10)
|
||||
.replaceAll('.', "/"));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/***********/
|
||||
/*mangahere*/
|
||||
/***********/
|
||||
|
|
|
|||
|
|
@ -123,6 +123,25 @@ Future<GetMangaModel> getPopularManga(GetPopularMangaRef ref,
|
|||
}
|
||||
}
|
||||
|
||||
/***********/
|
||||
/*mangakawaii*/
|
||||
/***********/
|
||||
if (source == "mangakawaii") {
|
||||
final dom =
|
||||
await httpResToDom(url: 'https://www.mangakawaii.io/', headers: {});
|
||||
if (dom.querySelectorAll('a.hot-manga__item').isNotEmpty) {
|
||||
url = dom
|
||||
.querySelectorAll('a.hot-manga__item ')
|
||||
.where((e) => e.attributes.containsKey('href'))
|
||||
.map((e) => e.attributes['href'])
|
||||
.toList();
|
||||
name = dom
|
||||
.querySelectorAll('a > div > div.hot-manga__item-name')
|
||||
.map((e) => e.innerHtml)
|
||||
.toList();
|
||||
}
|
||||
}
|
||||
|
||||
/***********/
|
||||
/*mangahere*/
|
||||
/***********/
|
||||
|
|
|
|||
|
|
@ -1,5 +1,3 @@
|
|||
import 'dart:developer';
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:go_router/go_router.dart';
|
||||
import 'package:mangayomi/source/source_model.dart';
|
||||
|
|
@ -24,7 +22,10 @@ class _BrowseScreenState extends State<BrowseScreen>
|
|||
_tabBarController = TabController(length: 3, vsync: this);
|
||||
_tabBarController.animateTo(0);
|
||||
_tabBarController.addListener(() {
|
||||
setState(() {});
|
||||
setState(() {
|
||||
_textEditingController.clear();
|
||||
_isSearch = false;
|
||||
});
|
||||
});
|
||||
super.initState();
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue