From 07941ea370de366d0a4cf362a43a28a7d219a778 Mon Sep 17 00:00:00 2001 From: NBA2K1 <78034913+NBA2K1@users.noreply.github.com> Date: Sun, 6 Jul 2025 14:02:23 +0200 Subject: [PATCH 1/2] Fix "Read" and "Unread" button --- lib/modules/library/providers/library_state_provider.dart | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lib/modules/library/providers/library_state_provider.dart b/lib/modules/library/providers/library_state_provider.dart index 67b12237..463b8f72 100644 --- a/lib/modules/library/providers/library_state_provider.dart +++ b/lib/modules/library/providers/library_state_provider.dart @@ -819,6 +819,7 @@ class MangasSetIsReadState extends _$MangasSetIsReadState { isar.chapters.putSync(chapter..manga.value = manga); chapter.manga.saveSync(); } + isar.mangas.putSync(manga); }); } } @@ -844,6 +845,7 @@ class MangasSetUnReadState extends _$MangasSetUnReadState { isar.chapters.putSync(chapter..manga.value = manga); chapter.manga.saveSync(); } + isar.mangas.putSync(manga); }); } From 57143bca2becd91f45c73e6a4340227b1dd0d1f7 Mon Sep 17 00:00:00 2001 From: NBA2K1 <78034913+NBA2K1@users.noreply.github.com> Date: Sun, 6 Jul 2025 14:28:52 +0200 Subject: [PATCH 2/2] bulk write instead of one-by-one reduces IO-operations. --- .../providers/library_state_provider.dart | 49 +++++++++++-------- .../providers/library_state_provider.g.dart | 4 +- lib/services/aniskip.g.dart | 2 +- lib/services/trackers/anilist.g.dart | 2 +- 4 files changed, 33 insertions(+), 24 deletions(-) diff --git a/lib/modules/library/providers/library_state_provider.dart b/lib/modules/library/providers/library_state_provider.dart index 463b8f72..4f011910 100644 --- a/lib/modules/library/providers/library_state_provider.dart +++ b/lib/modules/library/providers/library_state_provider.dart @@ -806,24 +806,29 @@ class MangasSetIsReadState extends _$MangasSetIsReadState { void build({required List mangaIds}) {} void set() { + final allChapters = []; + final allMangas = []; for (var mangaid in mangaIds) { final manga = isar.mangas.getSync(mangaid)!; final chapters = manga.chapters; if (chapters.isNotEmpty) { chapters.last.updateTrackChapterRead(ref); - isar.writeTxnSync(() { - for (var chapter in chapters) { - chapter.isRead = true; - chapter.lastPageRead = "1"; - chapter.updatedAt = DateTime.now().millisecondsSinceEpoch; - isar.chapters.putSync(chapter..manga.value = manga); - chapter.manga.saveSync(); - } - isar.mangas.putSync(manga); - }); + for (var chapter in chapters) { + chapter.isRead = true; + chapter.lastPageRead = "1"; + chapter.updatedAt = DateTime.now().millisecondsSinceEpoch; + chapter.manga.value = manga; + allChapters.add(chapter); + } + allMangas.add(manga); } } + isar.writeTxnSync(() { + isar.chapters.putAllSync(allChapters); + isar.mangas.putAllSync(allMangas); + }); + ref.read(isLongPressedMangaStateProvider.notifier).update(false); ref.read(mangasListStateProvider.notifier).clear(); } @@ -835,20 +840,24 @@ class MangasSetUnReadState extends _$MangasSetUnReadState { void build({required List mangaIds}) {} void set() { + final allChapters = []; + final allMangas = []; for (var mangaid in mangaIds) { final manga = isar.mangas.getSync(mangaid)!; - final chapters = manga.chapters; - isar.writeTxnSync(() { - for (var chapter in chapters) { - chapter.isRead = false; - chapter.updatedAt = DateTime.now().millisecondsSinceEpoch; - isar.chapters.putSync(chapter..manga.value = manga); - chapter.manga.saveSync(); - } - isar.mangas.putSync(manga); - }); + for (var chapter in manga.chapters) { + chapter.isRead = false; + chapter.updatedAt = DateTime.now().millisecondsSinceEpoch; + chapter.manga.value = manga; + allChapters.add(chapter); + } + allMangas.add(manga); } + isar.writeTxnSync(() { + isar.chapters.putAllSync(allChapters); + isar.mangas.putAllSync(allMangas); + }); + ref.read(isLongPressedMangaStateProvider.notifier).update(false); ref.read(mangasListStateProvider.notifier).clear(); } diff --git a/lib/modules/library/providers/library_state_provider.g.dart b/lib/modules/library/providers/library_state_provider.g.dart index ad1e9d37..d0fc945c 100644 --- a/lib/modules/library/providers/library_state_provider.g.dart +++ b/lib/modules/library/providers/library_state_provider.g.dart @@ -2551,7 +2551,7 @@ final isLongPressedMangaStateProvider = typedef _$IsLongPressedMangaState = AutoDisposeNotifier; String _$mangasSetIsReadStateHash() => - r'a973367ebc8a41ae36c1c5fc012755b13de81dc6'; + r'8f4f7f22ea8e82cf2370fb997033e1a4ec03168f'; abstract class _$MangasSetIsReadState extends BuildlessAutoDisposeNotifier { @@ -2698,7 +2698,7 @@ class _MangasSetIsReadStateProviderElement } String _$mangasSetUnReadStateHash() => - r'2e8f4f0eaf916c2e51013be08a943999fa554ae6'; + r'09ddd287b110fd76494f9f56bd5cf76f58936f1f'; abstract class _$MangasSetUnReadState extends BuildlessAutoDisposeNotifier { diff --git a/lib/services/aniskip.g.dart b/lib/services/aniskip.g.dart index c05db920..b2e1defb 100644 --- a/lib/services/aniskip.g.dart +++ b/lib/services/aniskip.g.dart @@ -6,7 +6,7 @@ part of 'aniskip.dart'; // RiverpodGenerator // ************************************************************************** -String _$aniSkipHash() => r'2e5d19b025a2207ff64da7bf7908450ea9e5ff8c'; +String _$aniSkipHash() => r'887869b54e2e151633efd46da83bde845e14f421'; /// See also [AniSkip]. @ProviderFor(AniSkip) diff --git a/lib/services/trackers/anilist.g.dart b/lib/services/trackers/anilist.g.dart index fe997ddc..d12364a7 100644 --- a/lib/services/trackers/anilist.g.dart +++ b/lib/services/trackers/anilist.g.dart @@ -6,7 +6,7 @@ part of 'anilist.dart'; // RiverpodGenerator // ************************************************************************** -String _$anilistHash() => r'179af3d1b13b4a03d5009e5519195fee1f8ec0f7'; +String _$anilistHash() => r'8cd0495c613bbb8c86a61e990f1755b58b983d79'; /// Copied from Dart SDK class _SystemHash {