mirror of
https://github.com/kodjodevf/mangayomi.git
synced 2026-04-20 06:42:07 +00:00
*fix
This commit is contained in:
parent
8511944d20
commit
d6dec733a7
8 changed files with 210 additions and 23 deletions
|
|
@ -1,3 +1,5 @@
|
|||
import 'dart:io';
|
||||
|
||||
import 'package:flex_color_scheme/flex_color_scheme.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||
|
|
@ -14,7 +16,20 @@ import 'views/more/settings/appearance/providers/flex_scheme_color_state_provide
|
|||
import 'views/more/settings/appearance/providers/theme_mode_state_provider.dart';
|
||||
|
||||
void main() async {
|
||||
await Hive.initFlutter();
|
||||
if (Platform.isAndroid || Platform.isIOS) {
|
||||
await Hive.initFlutter();
|
||||
} else {
|
||||
final path = Directory("Mangayomi");
|
||||
final path1 = Directory("${path.path}/DataBase");
|
||||
if (!(await path.exists())) {
|
||||
path.create();
|
||||
}
|
||||
if (!(await path1.exists())) {
|
||||
path1.create();
|
||||
}
|
||||
await Hive.initFlutter(path1.path);
|
||||
}
|
||||
|
||||
Hive.registerAdapter(ModelMangaAdapter());
|
||||
Hive.registerAdapter(MangaHistoryModelAdapter());
|
||||
Hive.registerAdapter(SourceModelAdapter());
|
||||
|
|
|
|||
|
|
@ -37,19 +37,17 @@ Future<GetMangaChapterUrlModel> getMangaChapterUrl(
|
|||
defaultValue: []);
|
||||
final incognitoMode = ref.watch(incognitoModeStateProvider);
|
||||
Directory? pathh;
|
||||
if (Platform.isWindows) {
|
||||
pathh = await getApplicationDocumentsDirectory();
|
||||
} else if (Platform.isAndroid) {
|
||||
if (Platform.isAndroid || Platform.isIOS) {
|
||||
pathh = await getExternalStorageDirectory();
|
||||
} else {
|
||||
pathh = await getApplicationDocumentsDirectory();
|
||||
}
|
||||
|
||||
path = Directory(
|
||||
"${pathh!.path}/${modelManga.source}/${modelManga.name}/${modelManga.chapterTitle![index]}/");
|
||||
|
||||
if (!incognitoMode) {
|
||||
if (hiveUrl.isNotEmpty) {
|
||||
urll = hiveUrl;
|
||||
}
|
||||
if (hiveUrl.isNotEmpty) {
|
||||
urll = hiveUrl;
|
||||
}
|
||||
|
||||
/*********/
|
||||
|
|
@ -65,9 +63,7 @@ Future<GetMangaChapterUrlModel> getMangaChapterUrl(
|
|||
};
|
||||
var request = http.Request('GET',
|
||||
Uri.parse('https://api.comick.fun/chapter/$mangaId?tachiyomi=true'));
|
||||
|
||||
request.headers.addAll(headers);
|
||||
|
||||
http.StreamedResponse response = await request.send();
|
||||
|
||||
if (response.statusCode == 200) {
|
||||
|
|
@ -160,9 +156,47 @@ Future<GetMangaChapterUrlModel> getMangaChapterUrl(
|
|||
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);
|
||||
if (!incognitoMode) {
|
||||
ref.watch(hiveBoxMangaInfo).put(
|
||||
"${modelManga.source}/${modelManga.name}/${modelManga.chapterTitle![index]}-pageurl",
|
||||
urll);
|
||||
}
|
||||
}
|
||||
|
||||
/***********/
|
||||
/*mmrcms*/
|
||||
/***********/
|
||||
|
||||
else if (getWpMangTypeSource(source) == TypeSource.mmrcms) {
|
||||
final dom =
|
||||
await httpResToDom(url: modelManga.chapterUrl![index], headers: {});
|
||||
|
||||
if (dom.querySelectorAll('#all > .img-responsive').isNotEmpty) {
|
||||
urll = dom.querySelectorAll('#all > .img-responsive').map((e) {
|
||||
log(e.outerHtml);
|
||||
final RegExp regexx = RegExp(r'data-src="([^"]+)"');
|
||||
if (modelManga.source!.toLowerCase() == 'jpmangas' ||
|
||||
modelManga.source!.toLowerCase() == 'fr scan') {
|
||||
return regexx
|
||||
.allMatches(e.outerHtml)
|
||||
.first
|
||||
.group(1)!
|
||||
.replaceAll('//', 'https://')
|
||||
.replaceAll(RegExp(r"\s+\b|\b\s"), "");
|
||||
}
|
||||
return regexx
|
||||
.allMatches(e.outerHtml)
|
||||
.first
|
||||
.group(1)!
|
||||
.replaceAll(RegExp(r"\s+\b|\b\s"), "");
|
||||
}).toList();
|
||||
// log(message)
|
||||
if (!incognitoMode) {
|
||||
ref.watch(hiveBoxMangaInfo).put(
|
||||
"${modelManga.source}/${modelManga.name}/${modelManga.chapterTitle![index]}-pageurl",
|
||||
urll);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/***********/
|
||||
|
|
@ -217,7 +251,6 @@ Future<GetMangaChapterUrlModel> getMangaChapterUrl(
|
|||
.replaceAll("eval", "");
|
||||
|
||||
String deobfuscatedScript = flutterJs.evaluate(script).toString();
|
||||
// log(deobfuscatedScript);
|
||||
List<String> urlss = deobfuscatedScript
|
||||
.substring(
|
||||
deobfuscatedScript.indexOf("newImgs=['") + "newImgs=['".length,
|
||||
|
|
|
|||
|
|
@ -6,6 +6,7 @@ import 'package:mangayomi/models/comick/manga_detail_comick.dart';
|
|||
import 'package:mangayomi/services/get_popular_manga.dart';
|
||||
import 'package:mangayomi/services/http_res_to_dom_html.dart';
|
||||
import 'package:mangayomi/source/source_model.dart';
|
||||
import 'package:mangayomi/utils/reg_exp_matcher.dart';
|
||||
import 'package:riverpod_annotation/riverpod_annotation.dart';
|
||||
part 'get_manga_detail.g.dart';
|
||||
|
||||
|
|
@ -405,6 +406,98 @@ Future<GetMangaDetailModel> getMangaDetail(GetMangaDetailRef ref,
|
|||
}
|
||||
}
|
||||
|
||||
/***********/
|
||||
/*mmrcms*/
|
||||
/***********/
|
||||
|
||||
else if (getWpMangTypeSource(source) == TypeSource.mmrcms) {
|
||||
final dom = await httpResToDom(url: url, headers: {});
|
||||
description = dom
|
||||
.querySelectorAll('.row .well p')
|
||||
.map((e) => e.text.trim())
|
||||
.toList()
|
||||
.first;
|
||||
status = dom
|
||||
.querySelectorAll('.row .dl-horizontal dt')
|
||||
.where((e) =>
|
||||
e.innerHtml.toString().toLowerCase().contains("status") ||
|
||||
e.innerHtml.toString().toLowerCase().contains("statut") ||
|
||||
e.innerHtml.toString().toLowerCase().contains("estado") ||
|
||||
e.innerHtml.toString().toLowerCase().contains("durum"))
|
||||
.map((e) => e.nextElementSibling!.text.trim())
|
||||
.toList()
|
||||
.first;
|
||||
if (dom.querySelectorAll(".row .dl-horizontal dt").isNotEmpty) {
|
||||
author = dom
|
||||
.querySelectorAll('.row .dl-horizontal dt')
|
||||
.where((e) =>
|
||||
e.innerHtml.toString().toLowerCase().contains("auteur(s)") ||
|
||||
e.innerHtml.toString().toLowerCase().contains("author(s)") ||
|
||||
e.innerHtml.toString().toLowerCase().contains("autor(es)") ||
|
||||
e.innerHtml.toString().toLowerCase().contains("yazar(lar)") ||
|
||||
e.innerHtml.toString().toLowerCase().contains("mangaka(lar)") ||
|
||||
e.innerHtml
|
||||
.toString()
|
||||
.toLowerCase()
|
||||
.contains("pengarang/penulis") ||
|
||||
e.innerHtml.toString().toLowerCase().contains("autor") ||
|
||||
e.innerHtml.toString().toLowerCase().contains("penulis"))
|
||||
.map((e) => e.nextElementSibling!.text
|
||||
.trim()
|
||||
.replaceAll(RegExp(r"\s+\b|\b\s"), ""))
|
||||
.toList()
|
||||
.first;
|
||||
final genr = dom
|
||||
.querySelectorAll('.row .dl-horizontal dt')
|
||||
.where((e) =>
|
||||
e.innerHtml.toString().toLowerCase().contains("categories") ||
|
||||
e.innerHtml.toString().toLowerCase().contains("categorías") ||
|
||||
e.innerHtml.toString().toLowerCase().contains("catégories") ||
|
||||
e.innerHtml.toString().toLowerCase().contains("kategoriler") ||
|
||||
e.innerHtml.toString().toLowerCase().contains("categorias") ||
|
||||
e.innerHtml.toString().toLowerCase().contains("kategorie") ||
|
||||
e.innerHtml.toString().toLowerCase().contains("kategori") ||
|
||||
e.innerHtml.toString().toLowerCase().contains("tagi"))
|
||||
.map((e) => e.nextElementSibling!.text.trim())
|
||||
.toList();
|
||||
if (genr.isNotEmpty) {
|
||||
genre = genr.first.replaceAll(RegExp(r"\s+\b|\b\s"), "").split(',');
|
||||
}
|
||||
}
|
||||
final rrr = dom.querySelectorAll(".row [class^=img-responsive]");
|
||||
final data = rrr.map((e) => e.outerHtml).toList();
|
||||
if (source.toLowerCase() == 'jpmangas' ||
|
||||
source.toLowerCase() == 'fr scan') {
|
||||
imageUrl = regSrcMatcher(data.first).replaceAll('//', 'https://');
|
||||
} else {
|
||||
imageUrl = regSrcMatcher(data.first);
|
||||
}
|
||||
|
||||
final ttt = dom
|
||||
.querySelectorAll("ul[class^=chapters] > li:not(.btn), table.table tr");
|
||||
if (ttt.isNotEmpty) {
|
||||
final data = ttt
|
||||
.map((e) => e.querySelector("[class^=chapter-title-rtl]")!)
|
||||
.toList();
|
||||
var name = data;
|
||||
for (var iaa in name) {
|
||||
chapterTitle.add(iaa.getElementsByTagName("a").first.text);
|
||||
chapterUrl
|
||||
.add(regHrefMatcher(iaa.getElementsByTagName("a").first.outerHtml));
|
||||
}
|
||||
final date = ttt
|
||||
.map((e) => e
|
||||
.getElementsByClassName("date-chapter-title-rtl")
|
||||
.map((e) => e.text.trim())
|
||||
.first)
|
||||
.toList();
|
||||
|
||||
for (var da in date) {
|
||||
chapterDate.add(da);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/***********/
|
||||
/*mangahere*/
|
||||
/***********/
|
||||
|
|
|
|||
|
|
@ -139,9 +139,39 @@ Future<GetMangaModel> getPopularManga(GetPopularMangaRef ref,
|
|||
.querySelectorAll('a > div > div.hot-manga__item-name')
|
||||
.map((e) => e.innerHtml)
|
||||
.toList();
|
||||
for (var ia in name) {
|
||||
image.add("");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/***********/
|
||||
/*mmrcms*/
|
||||
/***********/
|
||||
|
||||
else if (getWpMangTypeSource(source) == TypeSource.mmrcms) {
|
||||
final dom = await httpResToDom(
|
||||
url:
|
||||
'${getWpMangaUrl(source)}/filterList?page=$page&sortBy=views&asc=false',
|
||||
headers: {});
|
||||
|
||||
final urlElement = dom.getElementsByClassName('chart-title');
|
||||
for (var e in urlElement) {
|
||||
RegExp exp = RegExp(r'href="([^"]+)"');
|
||||
Iterable<Match> matches = exp.allMatches(e.outerHtml);
|
||||
String? firstMatch = matches.first.group(1);
|
||||
url.add(firstMatch);
|
||||
name.add(e.text);
|
||||
}
|
||||
final imgElement = dom.getElementsByTagName('img');
|
||||
for (var e in imgElement) {
|
||||
RegExp exp = RegExp(r'src="([^"]+)"');
|
||||
Iterable<Match> matches = exp.allMatches(e.outerHtml);
|
||||
String? firstMatch = matches.first.group(1);
|
||||
image.add(firstMatch);
|
||||
}
|
||||
}
|
||||
|
||||
/***********/
|
||||
/*mangahere*/
|
||||
/***********/
|
||||
|
|
|
|||
|
|
@ -421,10 +421,10 @@ List<SourceModel> sourcesList = [
|
|||
lang: "fr",
|
||||
typeSource: TypeSource.mmrcms,
|
||||
logoUrl: ''),
|
||||
SourceModel(
|
||||
sourceName: "FR Scan",
|
||||
url: "https://frscan.ws",
|
||||
lang: "fr",
|
||||
typeSource: TypeSource.mmrcms,
|
||||
logoUrl: ''),
|
||||
// SourceModel(
|
||||
// sourceName: "FR Scan",
|
||||
// url: "https://frscan.ws",
|
||||
// lang: "fr",
|
||||
// typeSource: TypeSource.mmrcms,
|
||||
// logoUrl: ''),
|
||||
];
|
||||
|
|
|
|||
13
lib/utils/reg_exp_matcher.dart
Normal file
13
lib/utils/reg_exp_matcher.dart
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
String regHrefMatcher(String input) {
|
||||
RegExp exp = RegExp(r'href="([^"]+)"');
|
||||
Iterable<Match> matches = exp.allMatches(input);
|
||||
String? firstMatch = matches.first.group(1);
|
||||
return firstMatch!;
|
||||
}
|
||||
|
||||
String regSrcMatcher(String input) {
|
||||
RegExp exp = RegExp(r'src="([^"]+)"');
|
||||
Iterable<Match> matches = exp.allMatches(input);
|
||||
String? firstMatch = matches.first.group(1);
|
||||
return firstMatch!;
|
||||
}
|
||||
|
|
@ -89,6 +89,7 @@ class _BrowseScreenState extends State<BrowseScreen>
|
|||
onPressed: () {
|
||||
if (_tabBarController.index == 0) {
|
||||
} else if (_tabBarController.index == 1) {
|
||||
_textEditingController.clear();
|
||||
context.push('/extensionLang');
|
||||
} else {}
|
||||
},
|
||||
|
|
|
|||
|
|
@ -1,3 +1,5 @@
|
|||
import 'dart:developer';
|
||||
|
||||
import 'package:mangayomi/models/manga_history.dart';
|
||||
import 'package:mangayomi/models/manga_reader.dart';
|
||||
import 'package:mangayomi/models/model_manga.dart';
|
||||
|
|
@ -142,9 +144,9 @@ class ReaderController extends _$ReaderController {
|
|||
int getPageLength(List incognitoPageLength) {
|
||||
final incognitoMode = ref.watch(incognitoModeStateProvider);
|
||||
if (!incognitoMode) {
|
||||
final page = ref.watch(hiveBoxMangaInfo).get(
|
||||
List<dynamic> page = ref.watch(hiveBoxMangaInfo).get(
|
||||
"${getSourceName()}/${getMangaName()}/${getChapterTitle()}-pageurl",
|
||||
) as List;
|
||||
);
|
||||
return page.length;
|
||||
}
|
||||
return incognitoPageLength.length;
|
||||
|
|
|
|||
Loading…
Reference in a new issue