Combine two identical classes

Combine MangasSetIsReadState and MangasSetUnReadState to reduce code duplication.
This commit is contained in:
NBA2K1 2025-07-28 16:08:13 +02:00
parent 36a2232461
commit ae1d158264
7 changed files with 41 additions and 192 deletions

View file

@ -618,6 +618,7 @@ class _LibraryScreenState extends ConsumerState<LibraryScreen>
.read(
mangasSetIsReadStateProvider(
mangaIds: mangaIds,
markAsRead: true,
).notifier,
)
.set();
@ -649,8 +650,9 @@ class _LibraryScreenState extends ConsumerState<LibraryScreen>
onPressed: () {
ref
.read(
mangasSetUnReadStateProvider(
mangasSetIsReadStateProvider(
mangaIds: mangaIds,
markAsRead: false,
).notifier,
)
.set();

View file

@ -829,50 +829,21 @@ class IsLongPressedMangaState extends _$IsLongPressedMangaState {
@riverpod
class MangasSetIsReadState extends _$MangasSetIsReadState {
@override
void build({required List<int> mangaIds}) {}
void build({required List<int> mangaIds, required bool markAsRead}) {}
void set() {
final allChapters = <Chapter>[];
final allMangas = <Manga>[];
final now = DateTime.now().millisecondsSinceEpoch;
for (var mangaid in mangaIds) {
final manga = isar.mangas.getSync(mangaid)!;
final chapters = manga.chapters;
if (chapters.isNotEmpty) {
chapters.last.updateTrackChapterRead(ref);
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();
}
}
@riverpod
class MangasSetUnReadState extends _$MangasSetUnReadState {
@override
void build({required List<int> mangaIds}) {}
void set() {
final allChapters = <Chapter>[];
final allMangas = <Manga>[];
for (var mangaid in mangaIds) {
final manga = isar.mangas.getSync(mangaid)!;
for (var chapter in manga.chapters) {
chapter.isRead = false;
chapter.updatedAt = DateTime.now().millisecondsSinceEpoch;
if (chapters.isEmpty) continue;
if (markAsRead) chapters.last.updateTrackChapterRead(ref);
for (var chapter in chapters) {
chapter.isRead = markAsRead;
if (markAsRead) chapter.lastPageRead = "1";
chapter.updatedAt = now;
chapter.manga.value = manga;
allChapters.add(chapter);
}

View file

@ -2551,14 +2551,16 @@ final isLongPressedMangaStateProvider =
typedef _$IsLongPressedMangaState = AutoDisposeNotifier<bool>;
String _$mangasSetIsReadStateHash() =>
r'8f4f7f22ea8e82cf2370fb997033e1a4ec03168f';
r'0bc11e49fd33d7c76e86b005e6d30d7ac39bb5e2';
abstract class _$MangasSetIsReadState
extends BuildlessAutoDisposeNotifier<void> {
late final List<int> mangaIds;
late final bool markAsRead;
void build({
required List<int> mangaIds,
required bool markAsRead,
});
}
@ -2574,9 +2576,11 @@ class MangasSetIsReadStateFamily extends Family<void> {
/// See also [MangasSetIsReadState].
MangasSetIsReadStateProvider call({
required List<int> mangaIds,
required bool markAsRead,
}) {
return MangasSetIsReadStateProvider(
mangaIds: mangaIds,
markAsRead: markAsRead,
);
}
@ -2586,6 +2590,7 @@ class MangasSetIsReadStateFamily extends Family<void> {
) {
return call(
mangaIds: provider.mangaIds,
markAsRead: provider.markAsRead,
);
}
@ -2610,8 +2615,11 @@ class MangasSetIsReadStateProvider
/// See also [MangasSetIsReadState].
MangasSetIsReadStateProvider({
required List<int> mangaIds,
required bool markAsRead,
}) : this._internal(
() => MangasSetIsReadState()..mangaIds = mangaIds,
() => MangasSetIsReadState()
..mangaIds = mangaIds
..markAsRead = markAsRead,
from: mangasSetIsReadStateProvider,
name: r'mangasSetIsReadStateProvider',
debugGetCreateSourceHash:
@ -2622,6 +2630,7 @@ class MangasSetIsReadStateProvider
allTransitiveDependencies:
MangasSetIsReadStateFamily._allTransitiveDependencies,
mangaIds: mangaIds,
markAsRead: markAsRead,
);
MangasSetIsReadStateProvider._internal(
@ -2632,9 +2641,11 @@ class MangasSetIsReadStateProvider
required super.debugGetCreateSourceHash,
required super.from,
required this.mangaIds,
required this.markAsRead,
}) : super.internal();
final List<int> mangaIds;
final bool markAsRead;
@override
void runNotifierBuild(
@ -2642,6 +2653,7 @@ class MangasSetIsReadStateProvider
) {
return notifier.build(
mangaIds: mangaIds,
markAsRead: markAsRead,
);
}
@ -2650,13 +2662,16 @@ class MangasSetIsReadStateProvider
return ProviderOverride(
origin: this,
override: MangasSetIsReadStateProvider._internal(
() => create()..mangaIds = mangaIds,
() => create()
..mangaIds = mangaIds
..markAsRead = markAsRead,
from: from,
name: null,
dependencies: null,
allTransitiveDependencies: null,
debugGetCreateSourceHash: null,
mangaIds: mangaIds,
markAsRead: markAsRead,
),
);
}
@ -2669,13 +2684,16 @@ class MangasSetIsReadStateProvider
@override
bool operator ==(Object other) {
return other is MangasSetIsReadStateProvider && other.mangaIds == mangaIds;
return other is MangasSetIsReadStateProvider &&
other.mangaIds == mangaIds &&
other.markAsRead == markAsRead;
}
@override
int get hashCode {
var hash = _SystemHash.combine(0, runtimeType.hashCode);
hash = _SystemHash.combine(hash, mangaIds.hashCode);
hash = _SystemHash.combine(hash, markAsRead.hashCode);
return _SystemHash.finish(hash);
}
@ -2686,6 +2704,9 @@ class MangasSetIsReadStateProvider
mixin MangasSetIsReadStateRef on AutoDisposeNotifierProviderRef<void> {
/// The parameter `mangaIds` of this provider.
List<int> get mangaIds;
/// The parameter `markAsRead` of this provider.
bool get markAsRead;
}
class _MangasSetIsReadStateProviderElement
@ -2695,153 +2716,8 @@ class _MangasSetIsReadStateProviderElement
@override
List<int> get mangaIds => (origin as MangasSetIsReadStateProvider).mangaIds;
}
String _$mangasSetUnReadStateHash() =>
r'09ddd287b110fd76494f9f56bd5cf76f58936f1f';
abstract class _$MangasSetUnReadState
extends BuildlessAutoDisposeNotifier<void> {
late final List<int> mangaIds;
void build({
required List<int> mangaIds,
});
}
/// See also [MangasSetUnReadState].
@ProviderFor(MangasSetUnReadState)
const mangasSetUnReadStateProvider = MangasSetUnReadStateFamily();
/// See also [MangasSetUnReadState].
class MangasSetUnReadStateFamily extends Family<void> {
/// See also [MangasSetUnReadState].
const MangasSetUnReadStateFamily();
/// See also [MangasSetUnReadState].
MangasSetUnReadStateProvider call({
required List<int> mangaIds,
}) {
return MangasSetUnReadStateProvider(
mangaIds: mangaIds,
);
}
@override
MangasSetUnReadStateProvider getProviderOverride(
covariant MangasSetUnReadStateProvider provider,
) {
return call(
mangaIds: provider.mangaIds,
);
}
static const Iterable<ProviderOrFamily>? _dependencies = null;
@override
Iterable<ProviderOrFamily>? get dependencies => _dependencies;
static const Iterable<ProviderOrFamily>? _allTransitiveDependencies = null;
@override
Iterable<ProviderOrFamily>? get allTransitiveDependencies =>
_allTransitiveDependencies;
@override
String? get name => r'mangasSetUnReadStateProvider';
}
/// See also [MangasSetUnReadState].
class MangasSetUnReadStateProvider
extends AutoDisposeNotifierProviderImpl<MangasSetUnReadState, void> {
/// See also [MangasSetUnReadState].
MangasSetUnReadStateProvider({
required List<int> mangaIds,
}) : this._internal(
() => MangasSetUnReadState()..mangaIds = mangaIds,
from: mangasSetUnReadStateProvider,
name: r'mangasSetUnReadStateProvider',
debugGetCreateSourceHash:
const bool.fromEnvironment('dart.vm.product')
? null
: _$mangasSetUnReadStateHash,
dependencies: MangasSetUnReadStateFamily._dependencies,
allTransitiveDependencies:
MangasSetUnReadStateFamily._allTransitiveDependencies,
mangaIds: mangaIds,
);
MangasSetUnReadStateProvider._internal(
super._createNotifier, {
required super.name,
required super.dependencies,
required super.allTransitiveDependencies,
required super.debugGetCreateSourceHash,
required super.from,
required this.mangaIds,
}) : super.internal();
final List<int> mangaIds;
@override
void runNotifierBuild(
covariant MangasSetUnReadState notifier,
) {
return notifier.build(
mangaIds: mangaIds,
);
}
@override
Override overrideWith(MangasSetUnReadState Function() create) {
return ProviderOverride(
origin: this,
override: MangasSetUnReadStateProvider._internal(
() => create()..mangaIds = mangaIds,
from: from,
name: null,
dependencies: null,
allTransitiveDependencies: null,
debugGetCreateSourceHash: null,
mangaIds: mangaIds,
),
);
}
@override
AutoDisposeNotifierProviderElement<MangasSetUnReadState, void>
createElement() {
return _MangasSetUnReadStateProviderElement(this);
}
@override
bool operator ==(Object other) {
return other is MangasSetUnReadStateProvider && other.mangaIds == mangaIds;
}
@override
int get hashCode {
var hash = _SystemHash.combine(0, runtimeType.hashCode);
hash = _SystemHash.combine(hash, mangaIds.hashCode);
return _SystemHash.finish(hash);
}
}
@Deprecated('Will be removed in 3.0. Use Ref instead')
// ignore: unused_element
mixin MangasSetUnReadStateRef on AutoDisposeNotifierProviderRef<void> {
/// The parameter `mangaIds` of this provider.
List<int> get mangaIds;
}
class _MangasSetUnReadStateProviderElement
extends AutoDisposeNotifierProviderElement<MangasSetUnReadState, void>
with MangasSetUnReadStateRef {
_MangasSetUnReadStateProviderElement(super.provider);
@override
List<int> get mangaIds => (origin as MangasSetUnReadStateProvider).mangaIds;
bool get markAsRead => (origin as MangasSetIsReadStateProvider).markAsRead;
}
// ignore_for_file: type=lint
// ignore_for_file: subtype_of_sealed_class, invalid_use_of_internal_member, invalid_use_of_visible_for_testing_member, deprecated_member_use_from_same_package

View file

@ -6,7 +6,7 @@ part of 'aniskip.dart';
// RiverpodGenerator
// **************************************************************************
String _$aniSkipHash() => r'2e5d19b025a2207ff64da7bf7908450ea9e5ff8c';
String _$aniSkipHash() => r'887869b54e2e151633efd46da83bde845e14f421';
/// See also [AniSkip].
@ProviderFor(AniSkip)

View file

@ -6,7 +6,7 @@ part of 'sync_server.dart';
// RiverpodGenerator
// **************************************************************************
String _$syncServerHash() => r'97a778696e0cc8b8e4c706de50d60464bb7b2f03';
String _$syncServerHash() => r'141ba3be28182e05480e06fbf3f1de68f868cb8e';
/// Copied from Dart SDK
class _SystemHash {

View file

@ -6,7 +6,7 @@ part of 'anilist.dart';
// RiverpodGenerator
// **************************************************************************
String _$anilistHash() => r'fafb964252b3a5741e981cb8c2f0f2090b3b86ae';
String _$anilistHash() => r'c786a526fdacc875e4a7e00886b2bda546eafeae';
/// Copied from Dart SDK
class _SystemHash {

View file

@ -6,7 +6,7 @@ part of 'myanimelist.dart';
// RiverpodGenerator
// **************************************************************************
String _$myAnimeListHash() => r'a612e9ce814268ac79dc86d810ca6bd3671812e6';
String _$myAnimeListHash() => r'4391ad9446d14b1fb1ffdfbc5323ef04db5140f7';
/// Copied from Dart SDK
class _SystemHash {