update d4rt to 0.0.2 & some fixes

This commit is contained in:
Moustapha Kodjo Amadou 2025-05-10 14:54:06 +01:00
parent 206a51df69
commit f651d460d7
6 changed files with 139 additions and 132 deletions

View file

@ -19,144 +19,151 @@ Future<dynamic> updateMangaDetail(
required bool isInit,
bool showToast = true,
}) async {
final manga = isar.mangas.getSync(mangaId!);
if (manga!.chapters.isNotEmpty && isInit) {
return;
}
final source = getSource(manga.lang!, manga.source!);
MManga getManga;
try {
final manga = isar.mangas.getSync(mangaId!);
if (manga!.chapters.isNotEmpty && isInit) {
return;
}
final source = getSource(manga.lang!, manga.source!);
MManga getManga;
getManga = await ref.watch(
getDetailProvider(url: manga.link!, source: source!).future,
);
} catch (e) {
if (showToast) botToast(e.toString());
return;
}
final genre =
getManga.genre
?.map((e) => e.toString().trim().trimLeft().trimRight())
.toList()
.toSet()
.toList() ??
[];
manga
..imageUrl = getManga.imageUrl ?? manga.imageUrl
..name = getManga.name?.trim().trimLeft().trimRight() ?? manga.name
..genre = (genre.isEmpty ? null : genre) ?? manga.genre ?? []
..author =
getManga.author?.trim().trimLeft().trimRight() ?? manga.author ?? ""
..artist =
getManga.artist?.trim().trimLeft().trimRight() ?? manga.artist ?? ""
..status =
getManga.status == Status.unknown
? manga.status
: getManga.status ?? Status.unknown
..description =
getManga.description?.trim().trimLeft().trimRight() ??
manga.description ??
""
..link = getManga.link?.trim().trimLeft().trimRight() ?? manga.link
..source = manga.source
..lang = manga.lang
..itemType = source.itemType
..lastUpdate = DateTime.now().millisecondsSinceEpoch;
final checkManga = isar.mangas.getSync(mangaId);
if (checkManga!.chapters.isNotEmpty && isInit) {
return;
}
isar.writeTxnSync(() {
isar.mangas.putSync(manga);
ref
.read(synchingProvider(syncId: 1).notifier)
.addChangedPart(ActionType.updateItem, manga.id, manga.toJson(), false);
manga.lastUpdate = DateTime.now().millisecondsSinceEpoch;
List<Chapter> chapters = [];
final chaps = getManga.chapters;
if (chaps!.isNotEmpty && chaps.length > manga.chapters.length) {
int newChapsIndex = chaps.length - manga.chapters.length;
final genre =
getManga.genre
?.map((e) => e.toString().trim().trimLeft().trimRight())
.toList()
.toSet()
.toList() ??
[];
manga
..imageUrl = getManga.imageUrl ?? manga.imageUrl
..name = getManga.name?.trim().trimLeft().trimRight() ?? manga.name
..genre = (genre.isEmpty ? null : genre) ?? manga.genre ?? []
..author =
getManga.author?.trim().trimLeft().trimRight() ?? manga.author ?? ""
..artist =
getManga.artist?.trim().trimLeft().trimRight() ?? manga.artist ?? ""
..status =
getManga.status == Status.unknown
? manga.status
: getManga.status ?? Status.unknown
..description =
getManga.description?.trim().trimLeft().trimRight() ??
manga.description ??
""
..link = getManga.link?.trim().trimLeft().trimRight() ?? manga.link
..source = manga.source
..lang = manga.lang
..itemType = source.itemType
..lastUpdate = DateTime.now().millisecondsSinceEpoch;
final checkManga = isar.mangas.getSync(mangaId);
if (checkManga!.chapters.isNotEmpty && isInit) {
return;
}
isar.writeTxnSync(() {
isar.mangas.putSync(manga);
ref
.read(synchingProvider(syncId: 1).notifier)
.addChangedPart(
ActionType.updateItem,
manga.id,
manga.toJson(),
false,
);
manga.lastUpdate = DateTime.now().millisecondsSinceEpoch;
for (var i = 0; i < newChapsIndex; i++) {
final chapter = Chapter(
name: chaps[i].name!,
url: chaps[i].url!.trim().trimLeft().trimRight(),
dateUpload:
chaps[i].dateUpload == null
? DateTime.now().millisecondsSinceEpoch.toString()
: chaps[i].dateUpload.toString(),
scanlator: chaps[i].scanlator ?? '',
mangaId: mangaId,
)..manga.value = manga;
chapters.add(chapter);
}
}
if (chapters.isNotEmpty) {
for (var chap in chapters.reversed.toList()) {
isar.chapters.putSync(chap);
chap.manga.saveSync();
ref
.read(synchingProvider(syncId: 1).notifier)
.addChangedPart(
ActionType.addChapter,
chap.id,
chap.toJson(),
false,
);
if (manga.chapters.isNotEmpty) {
final update = Update(
List<Chapter> chapters = [];
final chaps = getManga.chapters;
if (chaps!.isNotEmpty && chaps.length > manga.chapters.length) {
int newChapsIndex = chaps.length - manga.chapters.length;
manga.lastUpdate = DateTime.now().millisecondsSinceEpoch;
for (var i = 0; i < newChapsIndex; i++) {
final chapter = Chapter(
name: chaps[i].name!,
url: chaps[i].url!.trim().trimLeft().trimRight(),
dateUpload:
chaps[i].dateUpload == null
? DateTime.now().millisecondsSinceEpoch.toString()
: chaps[i].dateUpload.toString(),
scanlator: chaps[i].scanlator ?? '',
mangaId: mangaId,
chapterName: chap.name,
date: DateTime.now().millisecondsSinceEpoch.toString(),
)..chapter.value = chap;
isar.updates.putSync(update);
update.chapter.saveSync();
ref
.read(synchingProvider(syncId: 1).notifier)
.addChangedPart(
ActionType.addUpdate,
update.id,
update.toJson(),
false,
);
)..manga.value = manga;
chapters.add(chapter);
}
}
}
final oldChapers =
isar.mangas.getSync(mangaId)!.chapters.toList().reversed.toList();
if (oldChapers.length == chaps.length) {
for (var i = 0; i < oldChapers.length; i++) {
final oldChap = oldChapers[i];
final newChap = chaps[i];
final hasChanged =
oldChap.name != newChap.name ||
oldChap.url != newChap.url ||
oldChap.scanlator != newChap.scanlator;
oldChap.name = newChap.name;
oldChap.url = newChap.url;
oldChap.scanlator = newChap.scanlator;
isar.chapters.putSync(oldChap);
oldChap.manga.saveSync();
if (hasChanged) {
if (chapters.isNotEmpty) {
for (var chap in chapters.reversed.toList()) {
isar.chapters.putSync(chap);
chap.manga.saveSync();
ref
.read(synchingProvider(syncId: 1).notifier)
.addChangedPart(
ActionType.updateItem,
manga.id,
manga.toJson(),
false,
);
ref
.read(synchingProvider(syncId: 1).notifier)
.addChangedPart(
ActionType.updateChapter,
oldChap.id,
oldChap.toJson(),
ActionType.addChapter,
chap.id,
chap.toJson(),
false,
);
if (manga.chapters.isNotEmpty) {
final update = Update(
mangaId: mangaId,
chapterName: chap.name,
date: DateTime.now().millisecondsSinceEpoch.toString(),
)..chapter.value = chap;
isar.updates.putSync(update);
update.chapter.saveSync();
ref
.read(synchingProvider(syncId: 1).notifier)
.addChangedPart(
ActionType.addUpdate,
update.id,
update.toJson(),
false,
);
}
}
}
}
});
final oldChapers =
isar.mangas.getSync(mangaId)!.chapters.toList().reversed.toList();
if (oldChapers.length == chaps.length) {
for (var i = 0; i < oldChapers.length; i++) {
final oldChap = oldChapers[i];
final newChap = chaps[i];
final hasChanged =
oldChap.name != newChap.name ||
oldChap.url != newChap.url ||
oldChap.scanlator != newChap.scanlator;
oldChap.name = newChap.name;
oldChap.url = newChap.url;
oldChap.scanlator = newChap.scanlator;
isar.chapters.putSync(oldChap);
oldChap.manga.saveSync();
if (hasChanged) {
ref
.read(synchingProvider(syncId: 1).notifier)
.addChangedPart(
ActionType.updateItem,
manga.id,
manga.toJson(),
false,
);
ref
.read(synchingProvider(syncId: 1).notifier)
.addChangedPart(
ActionType.updateChapter,
oldChap.id,
oldChap.toJson(),
false,
);
}
}
}
});
} catch (e, s) {
if (showToast) botToast('$e\n$s');
return;
}
}

View file

@ -59,8 +59,8 @@ void doRestore(Ref ref, {required String path, required BuildContext context}) {
} else {
showBotToast("Backup Type not supported!");
}
} catch (e) {
botToast(e.toString());
} catch (e, s) {
botToast('$e\n$s');
}
}

View file

@ -303,8 +303,8 @@ class _SourceRepositoriesState extends ConsumerState<SourceRepositories> {
widget.itemType,
),
);
} catch (e) {
botToast(e.toString());
} catch (e, s) {
botToast('$e\n$s');
}
if (context.mounted) {

View file

@ -78,7 +78,7 @@ class _UpdatesScreenState extends ConsumerState<UpdatesScreen>
failed++;
}
numbers++;
if (context.mounted) {
if (mounted) {
botToast(
context.l10n.updating_library(numbers, failed, mangaList.length),
fontSize: 13,

View file

@ -354,10 +354,10 @@ packages:
dependency: "direct main"
description:
name: d4rt
sha256: c59d4546fe58a76250dda4cd7db9ec5bb2eb633f47f5104a1f60de72b111639e
sha256: ceaeb41ec6d1a208b553deb19cf6a1dc7a588d41dae9652953920d0636c2e9c0
url: "https://pub.dev"
source: hosted
version: "0.0.1"
version: "0.0.2"
dart_style:
dependency: transitive
description:

View file

@ -86,7 +86,7 @@ dependencies:
marquee: ^2.2.3
epubx:
path: ./epubx
d4rt: ^0.0.1
d4rt: ^0.0.2
dependency_overrides:
ffi: ^2.1.3