add manga status enum

This commit is contained in:
kodjomoustapha 2023-05-27 15:54:28 +01:00
parent 58f32cacd7
commit 46707fd32b
24 changed files with 268 additions and 165 deletions

View file

@ -17,7 +17,8 @@ class Manga {
String? author;
String? status;
@enumerated
Status status;
List<String>? genre;
@ -56,3 +57,5 @@ class Manga {
this.lastRead = 0,
});
}
enum Status { ongoing, completed, canceled, unknown, onHiatus }

View file

@ -85,7 +85,8 @@ const MangaSchema = CollectionSchema(
r'status': PropertySchema(
id: 13,
name: r'status',
type: IsarType.string,
type: IsarType.byte,
enumMap: _MangastatusEnumValueMap,
)
},
estimateSize: _mangaEstimateSize,
@ -176,12 +177,6 @@ int _mangaEstimateSize(
bytesCount += 3 + value.length * 3;
}
}
{
final value = object.status;
if (value != null) {
bytesCount += 3 + value.length * 3;
}
}
return bytesCount;
}
@ -204,7 +199,7 @@ void _mangaSerialize(
writer.writeString(offsets[10], object.link);
writer.writeString(offsets[11], object.name);
writer.writeString(offsets[12], object.source);
writer.writeString(offsets[13], object.status);
writer.writeByte(offsets[13], object.status.index);
}
Manga _mangaDeserialize(
@ -228,7 +223,8 @@ Manga _mangaDeserialize(
link: reader.readStringOrNull(offsets[10]),
name: reader.readStringOrNull(offsets[11]),
source: reader.readStringOrNull(offsets[12]),
status: reader.readStringOrNull(offsets[13]),
status: _MangastatusValueEnumMap[reader.readByteOrNull(offsets[13])] ??
Status.ongoing,
);
return object;
}
@ -267,12 +263,28 @@ P _mangaDeserializeProp<P>(
case 12:
return (reader.readStringOrNull(offset)) as P;
case 13:
return (reader.readStringOrNull(offset)) as P;
return (_MangastatusValueEnumMap[reader.readByteOrNull(offset)] ??
Status.ongoing) as P;
default:
throw IsarError('Unknown property with id $propertyId');
}
}
const _MangastatusEnumValueMap = {
'ongoing': 0,
'completed': 1,
'canceled': 2,
'unknown': 3,
'onHiatus': 4,
};
const _MangastatusValueEnumMap = {
0: Status.ongoing,
1: Status.completed,
2: Status.canceled,
3: Status.unknown,
4: Status.onHiatus,
};
Id _mangaGetId(Manga object) {
return object.id ?? Isar.autoIncrement;
}
@ -2045,71 +2057,47 @@ extension MangaQueryFilter on QueryBuilder<Manga, Manga, QFilterCondition> {
});
}
QueryBuilder<Manga, Manga, QAfterFilterCondition> statusIsNull() {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(const FilterCondition.isNull(
property: r'status',
));
});
}
QueryBuilder<Manga, Manga, QAfterFilterCondition> statusIsNotNull() {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(const FilterCondition.isNotNull(
property: r'status',
));
});
}
QueryBuilder<Manga, Manga, QAfterFilterCondition> statusEqualTo(
String? value, {
bool caseSensitive = true,
}) {
Status value) {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(FilterCondition.equalTo(
property: r'status',
value: value,
caseSensitive: caseSensitive,
));
});
}
QueryBuilder<Manga, Manga, QAfterFilterCondition> statusGreaterThan(
String? value, {
Status value, {
bool include = false,
bool caseSensitive = true,
}) {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(FilterCondition.greaterThan(
include: include,
property: r'status',
value: value,
caseSensitive: caseSensitive,
));
});
}
QueryBuilder<Manga, Manga, QAfterFilterCondition> statusLessThan(
String? value, {
Status value, {
bool include = false,
bool caseSensitive = true,
}) {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(FilterCondition.lessThan(
include: include,
property: r'status',
value: value,
caseSensitive: caseSensitive,
));
});
}
QueryBuilder<Manga, Manga, QAfterFilterCondition> statusBetween(
String? lower,
String? upper, {
Status lower,
Status upper, {
bool includeLower = true,
bool includeUpper = true,
bool caseSensitive = true,
}) {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(FilterCondition.between(
@ -2118,74 +2106,6 @@ extension MangaQueryFilter on QueryBuilder<Manga, Manga, QFilterCondition> {
includeLower: includeLower,
upper: upper,
includeUpper: includeUpper,
caseSensitive: caseSensitive,
));
});
}
QueryBuilder<Manga, Manga, QAfterFilterCondition> statusStartsWith(
String value, {
bool caseSensitive = true,
}) {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(FilterCondition.startsWith(
property: r'status',
value: value,
caseSensitive: caseSensitive,
));
});
}
QueryBuilder<Manga, Manga, QAfterFilterCondition> statusEndsWith(
String value, {
bool caseSensitive = true,
}) {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(FilterCondition.endsWith(
property: r'status',
value: value,
caseSensitive: caseSensitive,
));
});
}
QueryBuilder<Manga, Manga, QAfterFilterCondition> statusContains(String value,
{bool caseSensitive = true}) {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(FilterCondition.contains(
property: r'status',
value: value,
caseSensitive: caseSensitive,
));
});
}
QueryBuilder<Manga, Manga, QAfterFilterCondition> statusMatches(
String pattern,
{bool caseSensitive = true}) {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(FilterCondition.matches(
property: r'status',
wildcard: pattern,
caseSensitive: caseSensitive,
));
});
}
QueryBuilder<Manga, Manga, QAfterFilterCondition> statusIsEmpty() {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(FilterCondition.equalTo(
property: r'status',
value: '',
));
});
}
QueryBuilder<Manga, Manga, QAfterFilterCondition> statusIsNotEmpty() {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(FilterCondition.greaterThan(
property: r'status',
value: '',
));
});
}
@ -2641,10 +2561,9 @@ extension MangaQueryWhereDistinct on QueryBuilder<Manga, Manga, QDistinct> {
});
}
QueryBuilder<Manga, Manga, QDistinct> distinctByStatus(
{bool caseSensitive = true}) {
QueryBuilder<Manga, Manga, QDistinct> distinctByStatus() {
return QueryBuilder.apply(this, (query) {
return query.addDistinctBy(r'status', caseSensitive: caseSensitive);
return query.addDistinctBy(r'status');
});
}
}
@ -2734,7 +2653,7 @@ extension MangaQueryProperty on QueryBuilder<Manga, Manga, QQueryProperty> {
});
}
QueryBuilder<Manga, String?, QQueryOperations> statusProperty() {
QueryBuilder<Manga, Status, QQueryOperations> statusProperty() {
return QueryBuilder.apply(this, (query) {
return query.addPropertyName(r'status');
});

View file

@ -242,6 +242,7 @@ const _SourcetypeSourceEnumValueMap = {
'comick': 2,
'mmrcms': 3,
'heancms': 4,
'madara': 5,
};
const _SourcetypeSourceValueEnumMap = {
0: TypeSource.single,
@ -249,6 +250,7 @@ const _SourcetypeSourceValueEnumMap = {
2: TypeSource.comick,
3: TypeSource.mmrcms,
4: TypeSource.heancms,
5: TypeSource.madara,
};
Id _sourceGetId(Source object) {

View file

@ -1,6 +1,5 @@
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:font_awesome_flutter/font_awesome_flutter.dart';
import 'package:go_router/go_router.dart';
import 'package:isar/isar.dart';
import 'package:mangayomi/main.dart';
@ -10,6 +9,7 @@ import 'package:mangayomi/modules/manga/detail/widgets/custom_floating_action_bt
import 'package:mangayomi/modules/manga/reader/providers/push_router.dart';
import 'package:mangayomi/models/manga.dart';
import 'package:mangayomi/utils/colors.dart';
import 'package:mangayomi/utils/constant.dart';
import 'package:mangayomi/utils/media_query.dart';
import 'package:mangayomi/modules/manga/detail/manga_detail_view.dart';
import 'package:mangayomi/modules/manga/detail/providers/state_providers.dart';
@ -99,14 +99,14 @@ class _MangaDetailsViewState extends ConsumerState<MangaDetailsView> {
),
Row(
children: [
const Icon(
FontAwesomeIcons.clock,
Icon(
getMangaStatusIcon(widget.manga.status),
size: 12,
),
const SizedBox(
width: 4,
),
Text(widget.manga.status!),
Text(getMangaStatusName(widget.manga.status)),
const Text(''),
Row(
children: [

View file

@ -55,7 +55,7 @@ void pushToMangaReaderDetail(
name: getManga.name,
genre: getManga.genre,
author: getManga.author,
status: getManga.status,
status: getManga.status!,
description: getManga.description,
link: getManga.url,
source: getManga.source,

View file

@ -6,7 +6,7 @@ part of 'get_chapter_url.dart';
// RiverpodGenerator
// **************************************************************************
String _$getChapterUrlHash() => r'7713a0aa89a528cf9aa90016fdebb63af89a2520';
String _$getChapterUrlHash() => r'2ac689860d288da631afbf39ab7ad2df7e2b99f3';
/// Copied from Dart SDK
class _SystemHash {

View file

@ -6,7 +6,7 @@ part of 'get_manga_detail.dart';
// RiverpodGenerator
// **************************************************************************
String _$getMangaDetailHash() => r'938a051244e585f8350f95556bd3f94b9d0145c4';
String _$getMangaDetailHash() => r'ecad72288b8df330f295949d2b452b1bffa132a9';
/// Copied from Dart SDK
class _SystemHash {

View file

@ -6,7 +6,7 @@ part of 'get_popular_manga.dart';
// RiverpodGenerator
// **************************************************************************
String _$getPopularMangaHash() => r'27240e2756f6bd99d44a553ddd7ebe4374618c8d';
String _$getPopularMangaHash() => r'e973741f7105e38032412a7ae160003565779463';
/// Copied from Dart SDK
class _SystemHash {

View file

@ -7,7 +7,7 @@ part of 'cloudflare_bypass.dart';
// **************************************************************************
String _$cloudflareBypassDomHash() =>
r'f1307097afd3dd52318ecd83a4a979f4a6711aa2';
r'9329b2e079dda8e1ccdbccd41fe7370df1509953';
/// Copied from Dart SDK
class _SystemHash {
@ -129,7 +129,7 @@ class CloudflareBypassDomProvider extends AutoDisposeFutureProvider<Document?> {
}
String _$cloudflareBypassHtmlHash() =>
r'eb50578058f3b316fa07a01e336281931af55afb';
r'8c1d6820ba10fe5ddfe6ce532e1e4677b563ceee';
typedef CloudflareBypassHtmlRef = AutoDisposeFutureProviderRef<String>;
/// See also [cloudflareBypassHtml].

View file

@ -6,7 +6,7 @@ part of 'search_manga.dart';
// RiverpodGenerator
// **************************************************************************
String _$searchMangaHash() => r'0d71677c6ef2822590f2061119134e3b0e3167f7';
String _$searchMangaHash() => r'5f2a70ca38af7448f546f70db81cbe55a79a5fba';
/// Copied from Dart SDK
class _SystemHash {

View file

@ -1,6 +1,7 @@
import 'dart:convert';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:mangayomi/models/chapter.dart';
import 'package:mangayomi/models/manga.dart';
import 'package:mangayomi/services/http_service/http_res_to_dom_html.dart';
import 'package:mangayomi/sources/multisrc/heancms/model/search.dart';
import 'package:mangayomi/sources/multisrc/heancms/utils/utils.dart';
@ -120,7 +121,15 @@ class HeanCms extends MangaYomiServices {
}
for (var a in data) {
statusList.add(a.status ?? "Unknown");
final status = (switch (a.status) {
"Ongoing" => Status.ongoing,
"Hiatus" => Status.onHiatus,
"Dropped" => Status.canceled,
"Completed" => Status.completed,
"Finished" => Status.completed,
_ => Status.unknown,
});
statusList.add(status);
image.add(a.thumbnail!.startsWith("https://")
? a.thumbnail
: "${getMangaAPIUrl(source)}cover/${a.thumbnail}");
@ -156,7 +165,15 @@ class HeanCms extends MangaYomiServices {
}
for (var a in data) {
statusList.add(a.status ?? "Unknown");
final status = (switch (a.status) {
"Ongoing" => Status.ongoing,
"Hiatus" => Status.onHiatus,
"Dropped" => Status.canceled,
"Completed" => Status.completed,
"Finished" => Status.completed,
_ => Status.unknown,
});
statusList.add(status);
image.add(a.thumbnail!.startsWith("https://")
? a.thumbnail
: "${getMangaAPIUrl(source)}cover/${a.thumbnail}");

View file

@ -78,11 +78,11 @@ class Madara extends MangaYomiServices {
.map((e) => e.text)
.toList()
.first;
status = dom
status = madaraStatusParser(dom
.querySelectorAll("div.summary-content")
.map((e) => e.text.trim().trimLeft().trimRight())
.toList()
.last;
.last);
manga.imageUrl = dom
.querySelectorAll("div.summary_image img")

View file

@ -1,4 +1,5 @@
import 'package:intl/intl.dart';
import 'package:mangayomi/models/manga.dart';
import 'package:mangayomi/sources/utils/utils.dart';
class WordSet {
@ -107,3 +108,67 @@ int parseChapterDate(String? date, String source) {
.millisecondsSinceEpoch;
}
}
List<String> completedStatusList = [
"Completed",
"Completo",
"Completado",
"Concluído",
"Concluido",
"Finalizado",
"Terminé",
"Hoàn Thành",
"مكتملة",
"مكتمل",
"已完结",
];
List<String> ongoingStatusList = [
"OnGoing",
"Продолжается",
"Updating",
"Em Lançamento",
"Em lançamento",
"Em andamento",
"Em Andamento",
"En cours",
"Ativo",
"Lançando",
"Đang Tiến Hành",
"Devam Ediyor",
"Devam ediyor",
"In Corso",
"In Arrivo",
"مستمرة",
"مستمر",
"En Curso",
"En curso",
"Emision",
"En marcha",
"Publicandose",
"En emision",
"连载中",
];
List<String> hiatusStatusList = [
"On Hold",
"Pausado",
"En espera",
];
List<String> canceledStatusList = [
"Canceled",
"Cancelado",
];
Status madaraStatusParser(String status) {
return canceledStatusList.contains(status)
? Status.canceled
: completedStatusList.contains(status)
? Status.completed
: ongoingStatusList.contains(status)
? Status.ongoing
: hiatusStatusList.contains(status)
? Status.onHiatus
: Status.unknown;
}

View file

@ -1,6 +1,7 @@
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:html/dom.dart';
import 'package:mangayomi/models/chapter.dart';
import 'package:mangayomi/models/manga.dart';
import 'package:mangayomi/services/http_service/http_service.dart';
import 'package:mangayomi/sources/service.dart';
import 'package:mangayomi/sources/utils/utils.dart';
@ -22,7 +23,7 @@ class MangaThemeSia extends MangaYomiServices {
final resHtml = dom.querySelector(
'div.bigcontent, div.animefull, div.main-info, div.postbody');
if (resHtml!.querySelectorAll('.tsinfo .imptdt').isNotEmpty) {
status = resHtml
status = mangathemesiaStatusParser(resHtml
.querySelectorAll('.tsinfo .imptdt')
.where((e) =>
e.innerHtml.contains("Status") ||
@ -31,24 +32,24 @@ class MangaThemeSia extends MangaYomiServices {
? e.text.replaceAll('Situação', '').trim()
: e.text.replaceAll('Status', '').trim())
.toList()
.last;
.last);
} else if (resHtml.querySelectorAll('.infotable tr').isNotEmpty) {
status = resHtml
status = mangathemesiaStatusParser(resHtml
.querySelectorAll('.infotable tr')
.where((e) =>
e.innerHtml.toLowerCase().contains('statut') ||
e.innerHtml.toLowerCase().contains('status'))
.map((e) => e.querySelector('td:last-child')!.text)
.toList()
.first;
.first);
} else if (resHtml.querySelectorAll('.fmed').isNotEmpty) {
status = resHtml
status = mangathemesiaStatusParser(resHtml
.querySelectorAll('.tsinfo .imptdt')
.map((e) => e.text.replaceAll('Status', '').trim())
.toList()
.first;
.first);
} else {
status = "";
status = Status.unknown;
}
//2
@ -277,3 +278,13 @@ class MangaThemeSia extends MangaYomiServices {
return pageUrls;
}
}
mangathemesiaStatusParser(String status) {
return (switch (status) {
"ongoing" => Status.ongoing,
"publishing" => Status.ongoing,
"hiatus" => Status.onHiatus,
"completed" => Status.completed,
_ => Status.unknown,
});
}

View file

@ -4,6 +4,7 @@ import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:html/dom.dart';
import 'package:mangayomi/models/chapter.dart';
import 'package:mangayomi/services/http_service/http_service.dart';
import 'package:mangayomi/sources/multisrc/mmrcms/src/utils.dart';
import 'package:mangayomi/sources/service.dart';
import 'package:mangayomi/sources/utils/utils.dart';
import 'package:mangayomi/utils/reg_exp_matcher.dart';
@ -23,7 +24,7 @@ class Mmrcms extends MangaYomiServices {
.map((e) => e.text.trim())
.toList()
.first;
status = dom
status = mmrcmsStatusParser(dom
.querySelectorAll('.row .dl-horizontal dt')
.where((e) =>
e.innerHtml.toString().toLowerCase().contains("status") ||
@ -32,7 +33,7 @@ class Mmrcms extends MangaYomiServices {
e.innerHtml.toString().toLowerCase().contains("durum"))
.map((e) => e.nextElementSibling!.text.trim())
.toList()
.first;
.first);
if (dom.querySelectorAll(".row .dl-horizontal dt").isNotEmpty) {
author = dom
.querySelectorAll('.row .dl-horizontal dt')

View file

@ -0,0 +1,27 @@
import 'package:mangayomi/models/manga.dart';
Status mmrcmsStatusParser(String status) {
return completedStatusList.contains(status)
? Status.completed
: ongoingStatusList.contains(status)
? Status.ongoing
: Status.unknown;
}
List<String> completedStatusList = [
"complete",
"مكتملة",
"complet",
"completo",
"zakończone",
"concluído"
];
List<String> ongoingStatusList = [
"ongoing",
"مستمرة",
"en cours",
"em lançamento",
"prace w toku",
"ativo",
"em andamento"
];

View file

@ -1,5 +1,6 @@
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:mangayomi/models/chapter.dart';
import 'package:mangayomi/models/manga.dart';
abstract class MangaYomiServices {
List<String?> url = [];
@ -7,8 +8,8 @@ abstract class MangaYomiServices {
List<String?> image = [];
List<String> genre = [];
String? author = "";
String? status = "";
List<String> statusList = [];
Status? status;
List<Status> statusList = [];
List<String> chapterTitle = [];
List<String> chapterUrl = [];
List<String> chapterDate = [];
@ -22,7 +23,7 @@ abstract class MangaYomiServices {
mangaList.add(GetManga(
genre: genre,
author: author,
status: statusList.isEmpty ? "" : statusList[i],
status: statusList.isEmpty ? Status.unknown : statusList[i],
chapters: chapters,
imageUrl: image[i],
description: description,
@ -83,7 +84,7 @@ class GetManga {
List<String> genre = [];
List<Chapter> chapters = [];
String? author;
String? status;
Status? status;
String? source;
String? url;
String? name;

View file

@ -1,6 +1,7 @@
import 'dart:convert';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:mangayomi/models/chapter.dart';
import 'package:mangayomi/models/manga.dart';
import 'package:mangayomi/sources/src/all/comick/src/model/chapter_page_comick.dart';
import 'package:mangayomi/sources/src/all/comick/src/model/manga_chapter_detail.dart';
import 'package:mangayomi/sources/src/all/comick/src/model/manga_detail_comick.dart';
@ -35,7 +36,7 @@ class Comick extends MangaYomiServices {
name.add(popular.title);
image.add(popular.coverUrl);
}
return mangaRes();
}
@ -57,8 +58,7 @@ class Comick extends MangaYomiServices {
String authorr =
regExp.firstMatch(mangaDetailLMap.authors![0].toString())?.group(1) ??
'';
String statuss = parseStatut(mangaDetailLMap.comic!.status!);
status = statuss;
status = parseStatut(mangaDetailLMap.comic!.status!);
author = authorr;
RegExp regExp1 = RegExp(r'name:\s*(.*?)}');

View file

@ -1,19 +1,16 @@
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:mangayomi/models/manga.dart';
import 'package:mangayomi/utils/headers.dart';
import 'package:http/http.dart' as http;
parseStatut(int i) {
if (i == 1) {
return 'Ongoing';
} else if (i == 2) {
return 'Completed';
} else if (i == 3) {
return 'Canceled';
} else if (i == 4) {
return '';
} else {
return 'Unknown';
}
return (switch (i) {
1 => Status.ongoing,
2 => Status.completed,
3 => Status.canceled,
4 => Status.onHiatus,
_ => Status.unknown,
});
}
Future findCurrentSlug(String oldSlug, AutoDisposeFutureProviderRef ref) async {

View file

@ -1,7 +1,9 @@
import 'package:flutter_js/flutter_js.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:html/dom.dart';
import 'package:intl/intl.dart';
import 'package:mangayomi/models/chapter.dart';
import 'package:mangayomi/models/manga.dart';
import 'package:mangayomi/services/http_service/http_service.dart';
import 'package:mangayomi/sources/service.dart';
import 'package:http/http.dart' as http;
@ -30,9 +32,13 @@ class Mangahere extends MangaYomiServices {
.map((e) => e.text.trim())
.toList();
status = tt[0];
status = (switch (tt[0]) {
"ongoing" => Status.ongoing,
"completed" => Status.completed,
_ => Status.unknown,
});
} else {
status = "";
status = Status.unknown;
}
if (dom
.querySelectorAll(
@ -88,7 +94,7 @@ class Mangahere extends MangaYomiServices {
.map((e) => e.text.trim())
.toList();
for (var ok in tt) {
chapterDate.add(parseDate(ok, source));
chapterDate.add(parseMangaHereChapterDate(ok, source).toString());
}
}
if (dom
@ -302,3 +308,24 @@ class Mangahere extends MangaYomiServices {
return pageUrls;
}
}
int parseMangaHereChapterDate(String date, String source) {
if (date.contains('Today') || date.contains(' ago')) {
final now = DateTime.now();
final today = DateTime(now.year, now.month, now.day);
return today.millisecondsSinceEpoch;
} else if (date.contains('Yesterday')) {
final now = DateTime.now();
final yesterday = DateTime(now.year, now.month, now.day - 1);
return yesterday.millisecondsSinceEpoch;
} else {
try {
final dateFormat =
DateFormat(getFormatDate(source), getFormatDateLocale(source));
final parsedDate = dateFormat.parse(date);
return parsedDate.millisecondsSinceEpoch;
} catch (e) {
return 0;
}
}
}

View file

@ -5,6 +5,7 @@ import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:html/dom.dart' as dom;
import 'package:html/dom.dart';
import 'package:mangayomi/models/chapter.dart';
import 'package:mangayomi/models/manga.dart';
import 'package:mangayomi/services/http_service/cloudflare/cloudflare_bypass.dart';
import 'package:mangayomi/services/http_service/http_service.dart';
import 'package:mangayomi/sources/service.dart';
@ -35,8 +36,13 @@ class Japscan extends MangaYomiServices {
.where((element) => element.innerHtml.contains('Statut:'))
.map((e) => e.text)
.toList();
String sta = stat[0].replaceAll('Statut:', '').trim();
if (stat.isNotEmpty) {
status = stat[0].replaceAll('Statut:', '').trim();
status = (switch (sta) {
"En Cours" => Status.ongoing,
"Terminé" => Status.completed,
_ => Status.unknown,
});
}
final auth = dom
@ -49,7 +55,7 @@ class Japscan extends MangaYomiServices {
}
} else {
author = "";
status = "";
status = Status.unknown;
}
final genres = dom

View file

@ -1,6 +1,7 @@
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:html/dom.dart';
import 'package:mangayomi/models/chapter.dart';
import 'package:mangayomi/models/manga.dart';
import 'package:mangayomi/services/http_service/http_res_to_dom_html.dart';
import 'package:mangayomi/services/http_service/http_service.dart';
import 'package:mangayomi/sources/service.dart';
@ -14,7 +15,9 @@ class MangaKawaii extends MangaYomiServices {
required String source,
required AutoDisposeFutureProviderRef ref}) async {
final dom = await ref.watch(httpGetProvider(
url: 'https://www.mangakawaii.io${manga.url}', source: source, resDom: true)
url: 'https://www.mangakawaii.io${manga.url}',
source: source,
resDom: true)
.future) as Document?;
List detail = [];
manga.imageUrl =
@ -58,7 +61,11 @@ class MangaKawaii extends MangaYomiServices {
}
}
detail = detail.toSet().toList();
status = detail[0];
status = (switch (detail[0]) {
"En Cours" => Status.ongoing,
"Terminé" => Status.completed,
_ => Status.unknown,
});
author = detail[1];
if (dom.querySelectorAll("tr[class*='volume-']").isNotEmpty) {
final url = dom.querySelectorAll("tr[class*='volume-']").map((e) {
@ -102,9 +109,7 @@ class MangaKawaii extends MangaYomiServices {
.toList();
if (urlz.length > url.length) {
for (var _ in urlz) {
chapterDate.add(parseDate(
"${DateTime.now().day}.${DateTime.now().month}.${DateTime.now().year}",
source));
chapterDate.add(DateTime.now().millisecondsSinceEpoch.toString());
}
} else {
for (var ok in url) {

View file

@ -1,3 +1,25 @@
import 'package:flutter/material.dart';
import 'package:mangayomi/models/manga.dart';
const defaultUserAgent =
"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:110.0) Gecko/20100101 Firefox/110.0";
String getMangaStatusName(Status status) {
return (switch (status) {
Status.ongoing => "Ongoing",
Status.onHiatus => "On hiatus",
Status.canceled => "Canceled",
Status.completed => "Completed",
_ => "Unknown",
});
}
IconData getMangaStatusIcon(Status status) {
return (switch (status) {
Status.ongoing => Icons.schedule_rounded,
Status.onHiatus => Icons.pause_circle_rounded,
Status.canceled => Icons.cancel_rounded,
Status.completed => Icons.done_all_rounded,
_ => Icons.block_outlined,
});
}

View file

@ -6,7 +6,7 @@ part of 'headers.dart';
// RiverpodGenerator
// **************************************************************************
String _$headersHash() => r'13a50be589fe0038aa6195027eb8da260d3b127f';
String _$headersHash() => r'371ee77f40f010b4e2d5e354c30e666754b34291';
/// Copied from Dart SDK
class _SystemHash {