Merge pull request #596 from kodjodevf/riverpod_v3

Refactor and update dependencies for Isar and Riverpod
This commit is contained in:
Moustapha Kodjo Amadou 2025-10-29 13:10:07 +01:00 committed by GitHub
commit 377e5d617a
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
311 changed files with 11986 additions and 19418 deletions

View file

@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.12-all.zip distributionUrl=https\://services.gradle.org/distributions/gradle-8.13-all.zip

View file

@ -19,8 +19,8 @@ pluginManagement {
plugins { plugins {
id "dev.flutter.flutter-plugin-loader" version "1.0.0" id "dev.flutter.flutter-plugin-loader" version "1.0.0"
id "com.android.application" version "8.9.1" apply false id "com.android.application" version "8.12.1" apply false
id "org.jetbrains.kotlin.android" version "2.1.0" apply false id "org.jetbrains.kotlin.android" version "2.2.0" apply false
} }
include ":app" include ":app"

View file

@ -1,6 +1,6 @@
import 'dart:math'; import 'dart:math';
import 'package:isar/isar.dart'; import 'package:isar_community/isar.dart';
part 'source_preference.g.dart'; part 'source_preference.g.dart';
@collection @collection

View file

@ -74,7 +74,7 @@ const SourcePreferenceSchema = CollectionSchema(
getId: _sourcePreferenceGetId, getId: _sourcePreferenceGetId,
getLinks: _sourcePreferenceGetLinks, getLinks: _sourcePreferenceGetLinks,
attach: _sourcePreferenceAttach, attach: _sourcePreferenceAttach,
version: '3.1.0+1', version: '3.3.0-dev.3',
); );
int _sourcePreferenceEstimateSize( int _sourcePreferenceEstimateSize(
@ -993,7 +993,7 @@ const SourcePreferenceStringValueSchema = CollectionSchema(
getId: _sourcePreferenceStringValueGetId, getId: _sourcePreferenceStringValueGetId,
getLinks: _sourcePreferenceStringValueGetLinks, getLinks: _sourcePreferenceStringValueGetLinks,
attach: _sourcePreferenceStringValueAttach, attach: _sourcePreferenceStringValueAttach,
version: '3.1.0+1', version: '3.3.0-dev.3',
); );
int _sourcePreferenceStringValueEstimateSize( int _sourcePreferenceStringValueEstimateSize(

View file

@ -12,7 +12,7 @@ import 'package:flutter_inappwebview/flutter_inappwebview.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:hive_flutter/adapters.dart'; import 'package:hive_flutter/adapters.dart';
import 'package:intl/date_symbol_data_local.dart'; import 'package:intl/date_symbol_data_local.dart';
import 'package:isar/isar.dart'; import 'package:isar_community/isar.dart';
import 'package:mangayomi/eval/model/m_bridge.dart'; import 'package:mangayomi/eval/model/m_bridge.dart';
import 'package:mangayomi/models/custom_button.dart'; import 'package:mangayomi/models/custom_button.dart';
import 'package:mangayomi/models/manga.dart'; import 'package:mangayomi/models/manga.dart';
@ -356,7 +356,13 @@ class _MyAppState extends ConsumerState<MyApp> {
status: track.TrackStatus.completed, status: track.TrackStatus.completed,
); );
ref ref
.read(trackStateProvider(track: temp, itemType: null).notifier) .read(
trackStateProvider(
track: temp,
itemType: null,
widgetRef: ref,
).notifier,
)
.checkRefresh(); .checkRefresh();
} }
} }

View file

@ -1,4 +1,4 @@
import 'package:isar/isar.dart'; import 'package:isar_community/isar.dart';
import 'package:mangayomi/models/manga.dart'; import 'package:mangayomi/models/manga.dart';
part 'category.g.dart'; part 'category.g.dart';

View file

@ -46,7 +46,7 @@ const CategorySchema = CollectionSchema(
getId: _categoryGetId, getId: _categoryGetId,
getLinks: _categoryGetLinks, getLinks: _categoryGetLinks,
attach: _categoryAttach, attach: _categoryAttach,
version: '3.1.0+1', version: '3.3.0-dev.3',
); );
int _categoryEstimateSize( int _categoryEstimateSize(

View file

@ -1,4 +1,4 @@
import 'package:isar/isar.dart'; import 'package:isar_community/isar.dart';
part 'changed.g.dart'; part 'changed.g.dart';
@collection @collection

View file

@ -44,7 +44,7 @@ const ChangedPartSchema = CollectionSchema(
getId: _changedPartGetId, getId: _changedPartGetId,
getLinks: _changedPartGetLinks, getLinks: _changedPartGetLinks,
attach: _changedPartAttach, attach: _changedPartAttach,
version: '3.1.0+1', version: '3.3.0-dev.3',
); );
int _changedPartEstimateSize( int _changedPartEstimateSize(

View file

@ -1,4 +1,4 @@
import 'package:isar/isar.dart'; import 'package:isar_community/isar.dart';
import 'package:mangayomi/models/manga.dart'; import 'package:mangayomi/models/manga.dart';
part 'chapter.g.dart'; part 'chapter.g.dart';

View file

@ -93,7 +93,7 @@ const ChapterSchema = CollectionSchema(
getId: _chapterGetId, getId: _chapterGetId,
getLinks: _chapterGetLinks, getLinks: _chapterGetLinks,
attach: _chapterAttach, attach: _chapterAttach,
version: '3.1.0+1', version: '3.3.0-dev.3',
); );
int _chapterEstimateSize( int _chapterEstimateSize(

View file

@ -1,4 +1,4 @@
import 'package:isar/isar.dart'; import 'package:isar_community/isar.dart';
part 'custom_button.g.dart'; part 'custom_button.g.dart';
@collection @collection

View file

@ -58,7 +58,7 @@ const CustomButtonSchema = CollectionSchema(
getId: _customButtonGetId, getId: _customButtonGetId,
getLinks: _customButtonGetLinks, getLinks: _customButtonGetLinks,
attach: _customButtonAttach, attach: _customButtonAttach,
version: '3.1.0+1', version: '3.3.0-dev.3',
); );
int _customButtonEstimateSize( int _customButtonEstimateSize(

View file

@ -1,4 +1,4 @@
import 'package:isar/isar.dart'; import 'package:isar_community/isar.dart';
import 'package:mangayomi/models/chapter.dart'; import 'package:mangayomi/models/chapter.dart';
part 'download.g.dart'; part 'download.g.dart';

View file

@ -55,7 +55,7 @@ const DownloadSchema = CollectionSchema(
getId: _downloadGetId, getId: _downloadGetId,
getLinks: _downloadGetLinks, getLinks: _downloadGetLinks,
attach: _downloadAttach, attach: _downloadAttach,
version: '3.1.0+1', version: '3.3.0-dev.3',
); );
int _downloadEstimateSize( int _downloadEstimateSize(

View file

@ -1,4 +1,4 @@
import 'package:isar/isar.dart'; import 'package:isar_community/isar.dart';
import 'package:mangayomi/models/chapter.dart'; import 'package:mangayomi/models/chapter.dart';
import 'package:mangayomi/models/manga.dart'; import 'package:mangayomi/models/manga.dart';
part 'history.g.dart'; part 'history.g.dart';

View file

@ -57,7 +57,7 @@ const HistorySchema = CollectionSchema(
getId: _historyGetId, getId: _historyGetId,
getLinks: _historyGetLinks, getLinks: _historyGetLinks,
attach: _historyAttach, attach: _historyAttach,
version: '3.1.0+1', version: '3.3.0-dev.3',
); );
int _historyEstimateSize( int _historyEstimateSize(

View file

@ -1,4 +1,4 @@
import 'package:isar/isar.dart'; import 'package:isar_community/isar.dart';
import 'package:mangayomi/models/chapter.dart'; import 'package:mangayomi/models/chapter.dart';
part 'manga.g.dart'; part 'manga.g.dart';

View file

@ -112,7 +112,7 @@ const MangaSchema = CollectionSchema(
getId: _mangaGetId, getId: _mangaGetId,
getLinks: _mangaGetLinks, getLinks: _mangaGetLinks,
attach: _mangaAttach, attach: _mangaAttach,
version: '3.1.0+1', version: '3.3.0-dev.3',
); );
int _mangaEstimateSize( int _mangaEstimateSize(

View file

@ -1,4 +1,4 @@
import 'package:isar/isar.dart'; import 'package:isar_community/isar.dart';
import 'package:mangayomi/models/source.dart'; import 'package:mangayomi/models/source.dart';
import 'package:mangayomi/utils/constant.dart'; import 'package:mangayomi/utils/constant.dart';
part 'settings.g.dart'; part 'settings.g.dart';
@ -281,7 +281,7 @@ class Settings {
late AudioChannel audioChannels; late AudioChannel audioChannels;
int? volumeBoostCap; int? volumeBoostCap;
bool? downloadedOnlyMode; bool? downloadedOnlyMode;
late AlgorithmWeights? algorithmWeights; late AlgorithmWeights? algorithmWeights;

View file

@ -777,7 +777,7 @@ const SettingsSchema = CollectionSchema(
getId: _settingsGetId, getId: _settingsGetId,
getLinks: _settingsGetLinks, getLinks: _settingsGetLinks,
attach: _settingsAttach, attach: _settingsAttach,
version: '3.1.0+1', version: '3.3.0-dev.3',
); );
int _settingsEstimateSize( int _settingsEstimateSize(

View file

@ -1,6 +1,6 @@
import 'dart:convert'; import 'dart:convert';
import 'package:isar/isar.dart'; import 'package:isar_community/isar.dart';
import 'package:mangayomi/eval/model/filter.dart'; import 'package:mangayomi/eval/model/filter.dart';
import 'package:mangayomi/eval/model/m_source.dart'; import 'package:mangayomi/eval/model/m_source.dart';
import 'package:mangayomi/models/manga.dart'; import 'package:mangayomi/models/manga.dart';
@ -216,9 +216,4 @@ class Source {
} }
} }
enum SourceCodeLanguage { enum SourceCodeLanguage { dart, javascript, mihon, lnreader }
dart,
javascript,
mihon,
lnreader
}

View file

@ -145,7 +145,7 @@ const SourceSchema = CollectionSchema(
getId: _sourceGetId, getId: _sourceGetId,
getLinks: _sourceGetLinks, getLinks: _sourceGetLinks,
attach: _sourceAttach, attach: _sourceAttach,
version: '3.1.0+1', version: '3.3.0-dev.3',
); );
int _sourceEstimateSize( int _sourceEstimateSize(

View file

@ -1,4 +1,4 @@
import 'package:isar/isar.dart'; import 'package:isar_community/isar.dart';
part 'sync_preference.g.dart'; part 'sync_preference.g.dart';
@collection @collection

View file

@ -74,7 +74,7 @@ const SyncPreferenceSchema = CollectionSchema(
getId: _syncPreferenceGetId, getId: _syncPreferenceGetId,
getLinks: _syncPreferenceGetLinks, getLinks: _syncPreferenceGetLinks,
attach: _syncPreferenceAttach, attach: _syncPreferenceAttach,
version: '3.1.0+1', version: '3.3.0-dev.3',
); );
int _syncPreferenceEstimateSize( int _syncPreferenceEstimateSize(

View file

@ -1,4 +1,4 @@
import 'package:isar/isar.dart'; import 'package:isar_community/isar.dart';
import 'package:mangayomi/models/manga.dart'; import 'package:mangayomi/models/manga.dart';
part 'track.g.dart'; part 'track.g.dart';

View file

@ -84,7 +84,7 @@ const TrackSchema = CollectionSchema(
getId: _trackGetId, getId: _trackGetId,
getLinks: _trackGetLinks, getLinks: _trackGetLinks,
attach: _trackAttach, attach: _trackAttach,
version: '3.1.0+1', version: '3.3.0-dev.3',
); );
int _trackEstimateSize( int _trackEstimateSize(

View file

@ -1,4 +1,4 @@
import 'package:isar/isar.dart'; import 'package:isar_community/isar.dart';
part 'track_preference.g.dart'; part 'track_preference.g.dart';
@collection @collection

View file

@ -43,7 +43,7 @@ const TrackPreferenceSchema = CollectionSchema(
getId: _trackPreferenceGetId, getId: _trackPreferenceGetId,
getLinks: _trackPreferenceGetLinks, getLinks: _trackPreferenceGetLinks,
attach: _trackPreferenceAttach, attach: _trackPreferenceAttach,
version: '3.1.0+1', version: '3.3.0-dev.3',
); );
int _trackPreferenceEstimateSize( int _trackPreferenceEstimateSize(

View file

@ -1,4 +1,4 @@
import 'package:isar/isar.dart'; import 'package:isar_community/isar.dart';
import 'package:mangayomi/models/chapter.dart'; import 'package:mangayomi/models/chapter.dart';
part 'update.g.dart'; part 'update.g.dart';

View file

@ -50,7 +50,7 @@ const UpdateSchema = CollectionSchema(
getId: _updateGetId, getId: _updateGetId,
getLinks: _updateGetLinks, getLinks: _updateGetLinks,
attach: _updateAttach, attach: _updateAttach,
version: '3.1.0+1', version: '3.3.0-dev.3',
); );
int _updateEstimateSize( int _updateEstimateSize(

View file

@ -986,6 +986,7 @@ mp.register_script_message('call_button_${button.id}_long', button${button.id}lo
_currentPosition.dispose(); _currentPosition.dispose();
_subDelayController.dispose(); _subDelayController.dispose();
_subSpeedController.dispose(); _subSpeedController.dispose();
_streamController.keepAliveLink?.close();
super.dispose(); super.dispose();
} }

View file

@ -1,5 +1,5 @@
import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_riverpod/misc.dart';
import 'package:isar/isar.dart'; import 'package:isar_community/isar.dart';
import 'package:mangayomi/main.dart'; import 'package:mangayomi/main.dart';
import 'package:mangayomi/models/chapter.dart'; import 'package:mangayomi/models/chapter.dart';
import 'package:mangayomi/models/history.dart'; import 'package:mangayomi/models/history.dart';
@ -10,16 +10,23 @@ import 'package:mangayomi/modules/manga/reader/providers/reader_controller_provi
import 'package:mangayomi/modules/more/settings/player/providers/player_state_provider.dart'; import 'package:mangayomi/modules/more/settings/player/providers/player_state_provider.dart';
import 'package:mangayomi/services/aniskip.dart'; import 'package:mangayomi/services/aniskip.dart';
import 'package:mangayomi/utils/chapter_recognition.dart'; import 'package:mangayomi/utils/chapter_recognition.dart';
import 'package:mangayomi/utils/riverpod.dart';
import 'package:riverpod_annotation/riverpod_annotation.dart'; import 'package:riverpod_annotation/riverpod_annotation.dart';
part 'anime_player_controller_provider.g.dart'; part 'anime_player_controller_provider.g.dart';
final fullscreenProvider = StateProvider<bool>((ref) => false); final fullscreenProvider = StateProvider<bool>(() => false);
@riverpod @riverpod
class AnimeStreamController extends _$AnimeStreamController { class AnimeStreamController extends _$AnimeStreamController {
@override @override
void build({required Chapter episode}) {} KeepAliveLink build({required Chapter episode}) {
_keepAliveLink = ref.keepAlive();
return _keepAliveLink!;
}
KeepAliveLink? _keepAliveLink;
KeepAliveLink? get keepAliveLink => _keepAliveLink;
Manga getAnime() { Manga getAnime() {
return episode.manga.value!; return episode.manga.value!;
} }

View file

@ -6,159 +6,104 @@ part of 'anime_player_controller_provider.dart';
// RiverpodGenerator // RiverpodGenerator
// ************************************************************************** // **************************************************************************
String _$animeStreamControllerHash() => // GENERATED CODE - DO NOT MODIFY BY HAND
r'46cc71afefa3b3c060f7a28c61dc13e1d0b94999'; // ignore_for_file: type=lint, type=warning
/// Copied from Dart SDK
class _SystemHash {
_SystemHash._();
static int combine(int hash, int value) {
// ignore: parameter_assignments
hash = 0x1fffffff & (hash + value);
// ignore: parameter_assignments
hash = 0x1fffffff & (hash + ((0x0007ffff & hash) << 10));
return hash ^ (hash >> 6);
}
static int finish(int hash) {
// ignore: parameter_assignments
hash = 0x1fffffff & (hash + ((0x03ffffff & hash) << 3));
// ignore: parameter_assignments
hash = hash ^ (hash >> 11);
return 0x1fffffff & (hash + ((0x00003fff & hash) << 15));
}
}
abstract class _$AnimeStreamController
extends BuildlessAutoDisposeNotifier<void> {
late final Chapter episode;
void build({required Chapter episode});
}
/// See also [AnimeStreamController].
@ProviderFor(AnimeStreamController) @ProviderFor(AnimeStreamController)
const animeStreamControllerProvider = AnimeStreamControllerFamily(); const animeStreamControllerProvider = AnimeStreamControllerFamily._();
/// See also [AnimeStreamController]. final class AnimeStreamControllerProvider
class AnimeStreamControllerFamily extends Family<void> { extends $NotifierProvider<AnimeStreamController, KeepAliveLink> {
/// See also [AnimeStreamController]. const AnimeStreamControllerProvider._({
const AnimeStreamControllerFamily(); required AnimeStreamControllerFamily super.from,
required Chapter super.argument,
}) : super(
retry: null,
name: r'animeStreamControllerProvider',
isAutoDispose: true,
dependencies: null,
$allTransitiveDependencies: null,
);
/// See also [AnimeStreamController]. @override
AnimeStreamControllerProvider call({required Chapter episode}) { String debugGetCreateSourceHash() => _$animeStreamControllerHash();
return AnimeStreamControllerProvider(episode: episode);
@override
String toString() {
return r'animeStreamControllerProvider'
''
'($argument)';
} }
@$internal
@override @override
AnimeStreamControllerProvider getProviderOverride( AnimeStreamController create() => AnimeStreamController();
covariant AnimeStreamControllerProvider provider,
) {
return call(episode: provider.episode);
}
static const Iterable<ProviderOrFamily>? _dependencies = null; /// {@macro riverpod.override_with_value}
Override overrideWithValue(KeepAliveLink value) {
@override return $ProviderOverride(
Iterable<ProviderOrFamily>? get dependencies => _dependencies;
static const Iterable<ProviderOrFamily>? _allTransitiveDependencies = null;
@override
Iterable<ProviderOrFamily>? get allTransitiveDependencies =>
_allTransitiveDependencies;
@override
String? get name => r'animeStreamControllerProvider';
}
/// See also [AnimeStreamController].
class AnimeStreamControllerProvider
extends AutoDisposeNotifierProviderImpl<AnimeStreamController, void> {
/// See also [AnimeStreamController].
AnimeStreamControllerProvider({required Chapter episode})
: this._internal(
() => AnimeStreamController()..episode = episode,
from: animeStreamControllerProvider,
name: r'animeStreamControllerProvider',
debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product')
? null
: _$animeStreamControllerHash,
dependencies: AnimeStreamControllerFamily._dependencies,
allTransitiveDependencies:
AnimeStreamControllerFamily._allTransitiveDependencies,
episode: episode,
);
AnimeStreamControllerProvider._internal(
super._createNotifier, {
required super.name,
required super.dependencies,
required super.allTransitiveDependencies,
required super.debugGetCreateSourceHash,
required super.from,
required this.episode,
}) : super.internal();
final Chapter episode;
@override
void runNotifierBuild(covariant AnimeStreamController notifier) {
return notifier.build(episode: episode);
}
@override
Override overrideWith(AnimeStreamController Function() create) {
return ProviderOverride(
origin: this, origin: this,
override: AnimeStreamControllerProvider._internal( providerOverride: $SyncValueProvider<KeepAliveLink>(value),
() => create()..episode = episode,
from: from,
name: null,
dependencies: null,
allTransitiveDependencies: null,
debugGetCreateSourceHash: null,
episode: episode,
),
); );
} }
@override
AutoDisposeNotifierProviderElement<AnimeStreamController, void>
createElement() {
return _AnimeStreamControllerProviderElement(this);
}
@override @override
bool operator ==(Object other) { bool operator ==(Object other) {
return other is AnimeStreamControllerProvider && other.episode == episode; return other is AnimeStreamControllerProvider && other.argument == argument;
} }
@override @override
int get hashCode { int get hashCode {
var hash = _SystemHash.combine(0, runtimeType.hashCode); return argument.hashCode;
hash = _SystemHash.combine(hash, episode.hashCode);
return _SystemHash.finish(hash);
} }
} }
@Deprecated('Will be removed in 3.0. Use Ref instead') String _$animeStreamControllerHash() =>
// ignore: unused_element r'486889b2b9f71759e4d9ff147b039436572cc01e';
mixin AnimeStreamControllerRef on AutoDisposeNotifierProviderRef<void> {
/// The parameter `episode` of this provider.
Chapter get episode;
}
class _AnimeStreamControllerProviderElement final class AnimeStreamControllerFamily extends $Family
extends AutoDisposeNotifierProviderElement<AnimeStreamController, void> with
with AnimeStreamControllerRef { $ClassFamilyOverride<
_AnimeStreamControllerProviderElement(super.provider); AnimeStreamController,
KeepAliveLink,
KeepAliveLink,
KeepAliveLink,
Chapter
> {
const AnimeStreamControllerFamily._()
: super(
retry: null,
name: r'animeStreamControllerProvider',
dependencies: null,
$allTransitiveDependencies: null,
isAutoDispose: true,
);
AnimeStreamControllerProvider call({required Chapter episode}) =>
AnimeStreamControllerProvider._(argument: episode, from: this);
@override @override
Chapter get episode => (origin as AnimeStreamControllerProvider).episode; String toString() => r'animeStreamControllerProvider';
} }
// ignore_for_file: type=lint abstract class _$AnimeStreamController extends $Notifier<KeepAliveLink> {
// 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 late final _$args = ref.$arg as Chapter;
Chapter get episode => _$args;
KeepAliveLink build({required Chapter episode});
@$mustCallSuper
@override
void runBuild() {
final created = build(episode: _$args);
final ref = this.ref as $Ref<KeepAliveLink, KeepAliveLink>;
final element =
ref.element
as $ClassProviderElement<
AnyNotifier<KeepAliveLink, KeepAliveLink>,
KeepAliveLink,
Object?,
Object?
>;
element.handleValue(ref, created);
}
}

View file

@ -6,25 +6,61 @@ part of 'state_provider.dart';
// RiverpodGenerator // RiverpodGenerator
// ************************************************************************** // **************************************************************************
// GENERATED CODE - DO NOT MODIFY BY HAND
// ignore_for_file: type=lint, type=warning
@ProviderFor(SubtitleSettingsState)
const subtitleSettingsStateProvider = SubtitleSettingsStateProvider._();
final class SubtitleSettingsStateProvider
extends $NotifierProvider<SubtitleSettingsState, PlayerSubtitleSettings> {
const SubtitleSettingsStateProvider._()
: super(
from: null,
argument: null,
retry: null,
name: r'subtitleSettingsStateProvider',
isAutoDispose: true,
dependencies: null,
$allTransitiveDependencies: null,
);
@override
String debugGetCreateSourceHash() => _$subtitleSettingsStateHash();
@$internal
@override
SubtitleSettingsState create() => SubtitleSettingsState();
/// {@macro riverpod.override_with_value}
Override overrideWithValue(PlayerSubtitleSettings value) {
return $ProviderOverride(
origin: this,
providerOverride: $SyncValueProvider<PlayerSubtitleSettings>(value),
);
}
}
String _$subtitleSettingsStateHash() => String _$subtitleSettingsStateHash() =>
r'410485b55561b7a307c7a55f6798bca225f39830'; r'410485b55561b7a307c7a55f6798bca225f39830';
/// See also [SubtitleSettingsState]. abstract class _$SubtitleSettingsState
@ProviderFor(SubtitleSettingsState) extends $Notifier<PlayerSubtitleSettings> {
final subtitleSettingsStateProvider = PlayerSubtitleSettings build();
AutoDisposeNotifierProvider< @$mustCallSuper
SubtitleSettingsState, @override
PlayerSubtitleSettings void runBuild() {
>.internal( final created = build();
SubtitleSettingsState.new, final ref =
name: r'subtitleSettingsStateProvider', this.ref as $Ref<PlayerSubtitleSettings, PlayerSubtitleSettings>;
debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product') final element =
? null ref.element
: _$subtitleSettingsStateHash, as $ClassProviderElement<
dependencies: null, AnyNotifier<PlayerSubtitleSettings, PlayerSubtitleSettings>,
allTransitiveDependencies: null, PlayerSubtitleSettings,
); Object?,
Object?
typedef _$SubtitleSettingsState = AutoDisposeNotifier<PlayerSubtitleSettings>; >;
// ignore_for_file: type=lint element.handleValue(ref, created);
// 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

@ -47,7 +47,7 @@ class _SubtitlesWidgetSearchState extends ConsumerState<SubtitlesWidgetSearch> {
_init(); _init();
} }
_init() async { Future<void> _init() async {
await Future.delayed(const Duration(microseconds: 100)); await Future.delayed(const Duration(microseconds: 100));
try { try {
titles = await fetchImdbTitles(query); titles = await fetchImdbTitles(query);
@ -392,7 +392,7 @@ class _SubtitlesWidgetSearchState extends ConsumerState<SubtitlesWidgetSearch> {
} }
} }
subtitlesSearchraggableMenu( Future<dynamic> subtitlesSearchraggableMenu(
BuildContext context, { BuildContext context, {
required Chapter chapter, required Chapter chapter,
required bool isLocal, required bool isLocal,

View file

@ -1,7 +1,7 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:go_router/go_router.dart'; import 'package:go_router/go_router.dart';
import 'package:isar/isar.dart'; import 'package:isar_community/isar.dart';
import 'package:mangayomi/main.dart'; import 'package:mangayomi/main.dart';
import 'package:mangayomi/models/manga.dart'; import 'package:mangayomi/models/manga.dart';
import 'package:mangayomi/models/source.dart'; import 'package:mangayomi/models/source.dart';
@ -48,7 +48,7 @@ class _BrowseScreenState extends ConsumerState<BrowseScreen>
}); });
} }
_chekPermission() async { Future<void> _chekPermission() async {
await StorageProvider().requestPermission(); await StorageProvider().requestPermission();
} }

View file

@ -1,7 +1,7 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:go_router/go_router.dart'; import 'package:go_router/go_router.dart';
import 'package:isar/isar.dart'; import 'package:isar_community/isar.dart';
import 'package:mangayomi/eval/model/m_bridge.dart'; import 'package:mangayomi/eval/model/m_bridge.dart';
import 'package:mangayomi/eval/model/source_preference.dart'; import 'package:mangayomi/eval/model/source_preference.dart';
import 'package:mangayomi/main.dart'; import 'package:mangayomi/main.dart';

View file

@ -1,6 +1,6 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:isar/isar.dart'; import 'package:isar_community/isar.dart';
import 'package:mangayomi/main.dart'; import 'package:mangayomi/main.dart';
import 'package:mangayomi/models/manga.dart'; import 'package:mangayomi/models/manga.dart';
import 'package:mangayomi/models/source.dart'; import 'package:mangayomi/models/source.dart';

View file

@ -1,6 +1,6 @@
import 'dart:convert'; import 'dart:convert';
import 'package:isar/isar.dart'; import 'package:isar_community/isar.dart';
import 'package:mangayomi/eval/model/source_preference.dart'; import 'package:mangayomi/eval/model/source_preference.dart';
import 'package:mangayomi/main.dart'; import 'package:mangayomi/main.dart';
import 'package:mangayomi/models/source.dart'; import 'package:mangayomi/models/source.dart';
@ -37,7 +37,7 @@ void setPreferenceSetting(SourcePreference sourcePreference, Source source) {
}); });
} }
getPreferenceValue(int sourceId, String key) { dynamic getPreferenceValue(int sourceId, String key) {
final sourcePreference = getSourcePreferenceEntry(key, sourceId); final sourcePreference = getSourcePreferenceEntry(key, sourceId);
if (sourcePreference.listPreference != null) { if (sourcePreference.listPreference != null) {

View file

@ -1,10 +1,9 @@
import 'package:isar/isar.dart'; import 'package:isar_community/isar.dart';
import 'package:mangayomi/main.dart'; import 'package:mangayomi/main.dart';
import 'package:mangayomi/models/manga.dart'; import 'package:mangayomi/models/manga.dart';
import 'package:mangayomi/models/settings.dart'; import 'package:mangayomi/models/settings.dart';
import 'package:mangayomi/models/source.dart'; import 'package:mangayomi/models/source.dart';
import 'package:riverpod_annotation/riverpod_annotation.dart'; import 'package:riverpod_annotation/riverpod_annotation.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
part 'extensions_provider.g.dart'; part 'extensions_provider.g.dart';
@riverpod @riverpod

View file

@ -6,148 +6,81 @@ part of 'extensions_provider.dart';
// RiverpodGenerator // RiverpodGenerator
// ************************************************************************** // **************************************************************************
String _$getExtensionsStreamHash() => // GENERATED CODE - DO NOT MODIFY BY HAND
r'18790d3d4a7f52e5e7239c8726dcd09bb51d803a'; // ignore_for_file: type=lint, type=warning
/// Copied from Dart SDK
class _SystemHash {
_SystemHash._();
static int combine(int hash, int value) {
// ignore: parameter_assignments
hash = 0x1fffffff & (hash + value);
// ignore: parameter_assignments
hash = 0x1fffffff & (hash + ((0x0007ffff & hash) << 10));
return hash ^ (hash >> 6);
}
static int finish(int hash) {
// ignore: parameter_assignments
hash = 0x1fffffff & (hash + ((0x03ffffff & hash) << 3));
// ignore: parameter_assignments
hash = hash ^ (hash >> 11);
return 0x1fffffff & (hash + ((0x00003fff & hash) << 15));
}
}
/// See also [getExtensionsStream].
@ProviderFor(getExtensionsStream) @ProviderFor(getExtensionsStream)
const getExtensionsStreamProvider = GetExtensionsStreamFamily(); const getExtensionsStreamProvider = GetExtensionsStreamFamily._();
/// See also [getExtensionsStream]. final class GetExtensionsStreamProvider
class GetExtensionsStreamFamily extends Family<AsyncValue<List<Source>>> { extends
/// See also [getExtensionsStream]. $FunctionalProvider<
const GetExtensionsStreamFamily(); AsyncValue<List<Source>>,
List<Source>,
Stream<List<Source>>
>
with $FutureModifier<List<Source>>, $StreamProvider<List<Source>> {
const GetExtensionsStreamProvider._({
required GetExtensionsStreamFamily super.from,
required ItemType super.argument,
}) : super(
retry: null,
name: r'getExtensionsStreamProvider',
isAutoDispose: true,
dependencies: null,
$allTransitiveDependencies: null,
);
/// See also [getExtensionsStream]. @override
GetExtensionsStreamProvider call(ItemType itemType) { String debugGetCreateSourceHash() => _$getExtensionsStreamHash();
return GetExtensionsStreamProvider(itemType);
@override
String toString() {
return r'getExtensionsStreamProvider'
''
'($argument)';
} }
@$internal
@override @override
GetExtensionsStreamProvider getProviderOverride( $StreamProviderElement<List<Source>> $createElement(
covariant GetExtensionsStreamProvider provider, $ProviderPointer pointer,
) { ) => $StreamProviderElement(pointer);
return call(provider.itemType);
}
static const Iterable<ProviderOrFamily>? _dependencies = null;
@override @override
Iterable<ProviderOrFamily>? get dependencies => _dependencies; Stream<List<Source>> create(Ref ref) {
final argument = this.argument as ItemType;
static const Iterable<ProviderOrFamily>? _allTransitiveDependencies = null; return getExtensionsStream(ref, argument);
@override
Iterable<ProviderOrFamily>? get allTransitiveDependencies =>
_allTransitiveDependencies;
@override
String? get name => r'getExtensionsStreamProvider';
}
/// See also [getExtensionsStream].
class GetExtensionsStreamProvider
extends AutoDisposeStreamProvider<List<Source>> {
/// See also [getExtensionsStream].
GetExtensionsStreamProvider(ItemType itemType)
: this._internal(
(ref) => getExtensionsStream(ref as GetExtensionsStreamRef, itemType),
from: getExtensionsStreamProvider,
name: r'getExtensionsStreamProvider',
debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product')
? null
: _$getExtensionsStreamHash,
dependencies: GetExtensionsStreamFamily._dependencies,
allTransitiveDependencies:
GetExtensionsStreamFamily._allTransitiveDependencies,
itemType: itemType,
);
GetExtensionsStreamProvider._internal(
super._createNotifier, {
required super.name,
required super.dependencies,
required super.allTransitiveDependencies,
required super.debugGetCreateSourceHash,
required super.from,
required this.itemType,
}) : super.internal();
final ItemType itemType;
@override
Override overrideWith(
Stream<List<Source>> Function(GetExtensionsStreamRef provider) create,
) {
return ProviderOverride(
origin: this,
override: GetExtensionsStreamProvider._internal(
(ref) => create(ref as GetExtensionsStreamRef),
from: from,
name: null,
dependencies: null,
allTransitiveDependencies: null,
debugGetCreateSourceHash: null,
itemType: itemType,
),
);
}
@override
AutoDisposeStreamProviderElement<List<Source>> createElement() {
return _GetExtensionsStreamProviderElement(this);
} }
@override @override
bool operator ==(Object other) { bool operator ==(Object other) {
return other is GetExtensionsStreamProvider && other.itemType == itemType; return other is GetExtensionsStreamProvider && other.argument == argument;
} }
@override @override
int get hashCode { int get hashCode {
var hash = _SystemHash.combine(0, runtimeType.hashCode); return argument.hashCode;
hash = _SystemHash.combine(hash, itemType.hashCode);
return _SystemHash.finish(hash);
} }
} }
@Deprecated('Will be removed in 3.0. Use Ref instead') String _$getExtensionsStreamHash() =>
// ignore: unused_element r'18790d3d4a7f52e5e7239c8726dcd09bb51d803a';
mixin GetExtensionsStreamRef on AutoDisposeStreamProviderRef<List<Source>> {
/// The parameter `itemType` of this provider.
ItemType get itemType;
}
class _GetExtensionsStreamProviderElement final class GetExtensionsStreamFamily extends $Family
extends AutoDisposeStreamProviderElement<List<Source>> with $FunctionalFamilyOverride<Stream<List<Source>>, ItemType> {
with GetExtensionsStreamRef { const GetExtensionsStreamFamily._()
_GetExtensionsStreamProviderElement(super.provider); : super(
retry: null,
name: r'getExtensionsStreamProvider',
dependencies: null,
$allTransitiveDependencies: null,
isAutoDispose: true,
);
GetExtensionsStreamProvider call(ItemType itemType) =>
GetExtensionsStreamProvider._(argument: itemType, from: this);
@override @override
ItemType get itemType => (origin as GetExtensionsStreamProvider).itemType; String toString() => r'getExtensionsStreamProvider';
} }
// 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

@ -1,7 +1,7 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:go_router/go_router.dart'; import 'package:go_router/go_router.dart';
import 'package:isar/isar.dart'; import 'package:isar_community/isar.dart';
import 'package:mangayomi/eval/model/source_preference.dart'; import 'package:mangayomi/eval/model/source_preference.dart';
import 'package:mangayomi/main.dart'; import 'package:mangayomi/main.dart';
import 'package:mangayomi/models/changed.dart'; import 'package:mangayomi/models/changed.dart';

View file

@ -1,7 +1,7 @@
import 'dart:typed_data'; import 'dart:typed_data';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:isar/isar.dart'; import 'package:isar_community/isar.dart';
import 'package:mangayomi/eval/model/m_manga.dart'; import 'package:mangayomi/eval/model/m_manga.dart';
import 'package:mangayomi/eval/model/m_pages.dart'; import 'package:mangayomi/eval/model/m_pages.dart';
import 'package:mangayomi/main.dart'; import 'package:mangayomi/main.dart';
@ -143,7 +143,7 @@ class _SourceSearchScreenState extends ConsumerState<SourceSearchScreen> {
String _errorMessage = ""; String _errorMessage = "";
bool _isLoading = true; bool _isLoading = true;
MPages? pages; MPages? pages;
_init() async { Future<void> _init() async {
try { try {
_errorMessage = ""; _errorMessage = "";
pages = await ref.read( pages = await ref.read(

View file

@ -1,7 +1,7 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:mangayomi/modules/widgets/custom_sliver_grouped_list_view.dart'; import 'package:mangayomi/modules/widgets/custom_sliver_grouped_list_view.dart';
import 'package:isar/isar.dart'; import 'package:isar_community/isar.dart';
import 'package:mangayomi/main.dart'; import 'package:mangayomi/main.dart';
import 'package:mangayomi/models/manga.dart'; import 'package:mangayomi/models/manga.dart';
import 'package:mangayomi/models/source.dart'; import 'package:mangayomi/models/source.dart';

View file

@ -1,7 +1,7 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:mangayomi/modules/widgets/custom_sliver_grouped_list_view.dart'; import 'package:mangayomi/modules/widgets/custom_sliver_grouped_list_view.dart';
import 'package:isar/isar.dart'; import 'package:isar_community/isar.dart';
import 'package:mangayomi/main.dart'; import 'package:mangayomi/main.dart';
import 'package:mangayomi/models/manga.dart'; import 'package:mangayomi/models/manga.dart';
import 'package:mangayomi/models/source.dart'; import 'package:mangayomi/models/source.dart';

View file

@ -1,7 +1,7 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:go_router/go_router.dart'; import 'package:go_router/go_router.dart';
import 'package:isar/isar.dart'; import 'package:isar_community/isar.dart';
import 'package:mangayomi/main.dart'; import 'package:mangayomi/main.dart';
import 'package:mangayomi/models/manga.dart'; import 'package:mangayomi/models/manga.dart';
import 'package:mangayomi/models/source.dart'; import 'package:mangayomi/models/source.dart';

View file

@ -3,7 +3,7 @@ import 'dart:typed_data';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:go_router/go_router.dart'; import 'package:go_router/go_router.dart';
import 'package:isar/isar.dart'; import 'package:isar_community/isar.dart';
import 'package:mangayomi/models/chapter.dart'; import 'package:mangayomi/models/chapter.dart';
import 'package:mangayomi/models/manga.dart'; import 'package:mangayomi/models/manga.dart';
import 'package:mangayomi/modules/calendar/providers/calendar_provider.dart'; import 'package:mangayomi/modules/calendar/providers/calendar_provider.dart';

View file

@ -1,8 +1,7 @@
import 'package:isar/isar.dart'; import 'package:isar_community/isar.dart';
import 'package:mangayomi/main.dart'; import 'package:mangayomi/main.dart';
import 'package:mangayomi/models/manga.dart'; import 'package:mangayomi/models/manga.dart';
import 'package:riverpod_annotation/riverpod_annotation.dart'; import 'package:riverpod_annotation/riverpod_annotation.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
part 'calendar_provider.g.dart'; part 'calendar_provider.g.dart';
@riverpod @riverpod

View file

@ -6,147 +6,80 @@ part of 'calendar_provider.dart';
// RiverpodGenerator // RiverpodGenerator
// ************************************************************************** // **************************************************************************
String _$getCalendarStreamHash() => r'850d81742f8ac5ce88175732c0edf57a7a9295d4'; // GENERATED CODE - DO NOT MODIFY BY HAND
// ignore_for_file: type=lint, type=warning
/// Copied from Dart SDK
class _SystemHash {
_SystemHash._();
static int combine(int hash, int value) {
// ignore: parameter_assignments
hash = 0x1fffffff & (hash + value);
// ignore: parameter_assignments
hash = 0x1fffffff & (hash + ((0x0007ffff & hash) << 10));
return hash ^ (hash >> 6);
}
static int finish(int hash) {
// ignore: parameter_assignments
hash = 0x1fffffff & (hash + ((0x03ffffff & hash) << 3));
// ignore: parameter_assignments
hash = hash ^ (hash >> 11);
return 0x1fffffff & (hash + ((0x00003fff & hash) << 15));
}
}
/// See also [getCalendarStream].
@ProviderFor(getCalendarStream) @ProviderFor(getCalendarStream)
const getCalendarStreamProvider = GetCalendarStreamFamily(); const getCalendarStreamProvider = GetCalendarStreamFamily._();
/// See also [getCalendarStream]. final class GetCalendarStreamProvider
class GetCalendarStreamFamily extends Family<AsyncValue<List<Manga>>> { extends
/// See also [getCalendarStream]. $FunctionalProvider<
const GetCalendarStreamFamily(); AsyncValue<List<Manga>>,
List<Manga>,
Stream<List<Manga>>
>
with $FutureModifier<List<Manga>>, $StreamProvider<List<Manga>> {
const GetCalendarStreamProvider._({
required GetCalendarStreamFamily super.from,
required ItemType? super.argument,
}) : super(
retry: null,
name: r'getCalendarStreamProvider',
isAutoDispose: true,
dependencies: null,
$allTransitiveDependencies: null,
);
/// See also [getCalendarStream]. @override
GetCalendarStreamProvider call({ItemType? itemType}) { String debugGetCreateSourceHash() => _$getCalendarStreamHash();
return GetCalendarStreamProvider(itemType: itemType);
@override
String toString() {
return r'getCalendarStreamProvider'
''
'($argument)';
} }
@$internal
@override @override
GetCalendarStreamProvider getProviderOverride( $StreamProviderElement<List<Manga>> $createElement(
covariant GetCalendarStreamProvider provider, $ProviderPointer pointer,
) { ) => $StreamProviderElement(pointer);
return call(itemType: provider.itemType);
}
static const Iterable<ProviderOrFamily>? _dependencies = null;
@override @override
Iterable<ProviderOrFamily>? get dependencies => _dependencies; Stream<List<Manga>> create(Ref ref) {
final argument = this.argument as ItemType?;
static const Iterable<ProviderOrFamily>? _allTransitiveDependencies = null; return getCalendarStream(ref, itemType: argument);
@override
Iterable<ProviderOrFamily>? get allTransitiveDependencies =>
_allTransitiveDependencies;
@override
String? get name => r'getCalendarStreamProvider';
}
/// See also [getCalendarStream].
class GetCalendarStreamProvider extends AutoDisposeStreamProvider<List<Manga>> {
/// See also [getCalendarStream].
GetCalendarStreamProvider({ItemType? itemType})
: this._internal(
(ref) =>
getCalendarStream(ref as GetCalendarStreamRef, itemType: itemType),
from: getCalendarStreamProvider,
name: r'getCalendarStreamProvider',
debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product')
? null
: _$getCalendarStreamHash,
dependencies: GetCalendarStreamFamily._dependencies,
allTransitiveDependencies:
GetCalendarStreamFamily._allTransitiveDependencies,
itemType: itemType,
);
GetCalendarStreamProvider._internal(
super._createNotifier, {
required super.name,
required super.dependencies,
required super.allTransitiveDependencies,
required super.debugGetCreateSourceHash,
required super.from,
required this.itemType,
}) : super.internal();
final ItemType? itemType;
@override
Override overrideWith(
Stream<List<Manga>> Function(GetCalendarStreamRef provider) create,
) {
return ProviderOverride(
origin: this,
override: GetCalendarStreamProvider._internal(
(ref) => create(ref as GetCalendarStreamRef),
from: from,
name: null,
dependencies: null,
allTransitiveDependencies: null,
debugGetCreateSourceHash: null,
itemType: itemType,
),
);
}
@override
AutoDisposeStreamProviderElement<List<Manga>> createElement() {
return _GetCalendarStreamProviderElement(this);
} }
@override @override
bool operator ==(Object other) { bool operator ==(Object other) {
return other is GetCalendarStreamProvider && other.itemType == itemType; return other is GetCalendarStreamProvider && other.argument == argument;
} }
@override @override
int get hashCode { int get hashCode {
var hash = _SystemHash.combine(0, runtimeType.hashCode); return argument.hashCode;
hash = _SystemHash.combine(hash, itemType.hashCode);
return _SystemHash.finish(hash);
} }
} }
@Deprecated('Will be removed in 3.0. Use Ref instead') String _$getCalendarStreamHash() => r'850d81742f8ac5ce88175732c0edf57a7a9295d4';
// ignore: unused_element
mixin GetCalendarStreamRef on AutoDisposeStreamProviderRef<List<Manga>> {
/// The parameter `itemType` of this provider.
ItemType? get itemType;
}
class _GetCalendarStreamProviderElement final class GetCalendarStreamFamily extends $Family
extends AutoDisposeStreamProviderElement<List<Manga>> with $FunctionalFamilyOverride<Stream<List<Manga>>, ItemType?> {
with GetCalendarStreamRef { const GetCalendarStreamFamily._()
_GetCalendarStreamProviderElement(super.provider); : super(
retry: null,
name: r'getCalendarStreamProvider',
dependencies: null,
$allTransitiveDependencies: null,
isAutoDispose: true,
);
GetCalendarStreamProvider call({ItemType? itemType}) =>
GetCalendarStreamProvider._(argument: itemType, from: this);
@override @override
ItemType? get itemType => (origin as GetCalendarStreamProvider).itemType; String toString() => r'getCalendarStreamProvider';
} }
// 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

@ -5,7 +5,7 @@ import 'package:go_router/go_router.dart';
import 'package:mangayomi/l10n/generated/app_localizations.dart'; import 'package:mangayomi/l10n/generated/app_localizations.dart';
import 'package:mangayomi/modules/widgets/custom_sliver_grouped_list_view.dart'; import 'package:mangayomi/modules/widgets/custom_sliver_grouped_list_view.dart';
import 'package:isar/isar.dart'; import 'package:isar_community/isar.dart';
import 'package:mangayomi/main.dart'; import 'package:mangayomi/main.dart';
import 'package:mangayomi/models/changed.dart'; import 'package:mangayomi/models/changed.dart';
import 'package:mangayomi/models/chapter.dart'; import 'package:mangayomi/models/chapter.dart';

View file

@ -1,11 +1,10 @@
import 'package:isar/isar.dart'; import 'package:isar_community/isar.dart';
import 'package:mangayomi/main.dart'; import 'package:mangayomi/main.dart';
import 'package:mangayomi/models/chapter.dart'; import 'package:mangayomi/models/chapter.dart';
import 'package:mangayomi/models/update.dart'; import 'package:mangayomi/models/update.dart';
import 'package:mangayomi/models/history.dart'; import 'package:mangayomi/models/history.dart';
import 'package:mangayomi/models/manga.dart'; import 'package:mangayomi/models/manga.dart';
import 'package:riverpod_annotation/riverpod_annotation.dart'; import 'package:riverpod_annotation/riverpod_annotation.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
part 'isar_providers.g.dart'; part 'isar_providers.g.dart';
@riverpod @riverpod

View file

@ -6,308 +6,183 @@ part of 'isar_providers.dart';
// RiverpodGenerator // RiverpodGenerator
// ************************************************************************** // **************************************************************************
String _$getAllHistoryStreamHash() => // GENERATED CODE - DO NOT MODIFY BY HAND
r'1ce5bd0046fbbec46e91b7a486523945699d95f3'; // ignore_for_file: type=lint, type=warning
/// Copied from Dart SDK
class _SystemHash {
_SystemHash._();
static int combine(int hash, int value) {
// ignore: parameter_assignments
hash = 0x1fffffff & (hash + value);
// ignore: parameter_assignments
hash = 0x1fffffff & (hash + ((0x0007ffff & hash) << 10));
return hash ^ (hash >> 6);
}
static int finish(int hash) {
// ignore: parameter_assignments
hash = 0x1fffffff & (hash + ((0x03ffffff & hash) << 3));
// ignore: parameter_assignments
hash = hash ^ (hash >> 11);
return 0x1fffffff & (hash + ((0x00003fff & hash) << 15));
}
}
/// See also [getAllHistoryStream].
@ProviderFor(getAllHistoryStream) @ProviderFor(getAllHistoryStream)
const getAllHistoryStreamProvider = GetAllHistoryStreamFamily(); const getAllHistoryStreamProvider = GetAllHistoryStreamFamily._();
/// See also [getAllHistoryStream]. final class GetAllHistoryStreamProvider
class GetAllHistoryStreamFamily extends Family<AsyncValue<List<History>>> { extends
/// See also [getAllHistoryStream]. $FunctionalProvider<
const GetAllHistoryStreamFamily(); AsyncValue<List<History>>,
List<History>,
Stream<List<History>>
>
with $FutureModifier<List<History>>, $StreamProvider<List<History>> {
const GetAllHistoryStreamProvider._({
required GetAllHistoryStreamFamily super.from,
required ({ItemType itemType, String search}) super.argument,
}) : super(
retry: null,
name: r'getAllHistoryStreamProvider',
isAutoDispose: true,
dependencies: null,
$allTransitiveDependencies: null,
);
/// See also [getAllHistoryStream]. @override
GetAllHistoryStreamProvider call({ String debugGetCreateSourceHash() => _$getAllHistoryStreamHash();
required ItemType itemType,
String search = "", @override
}) { String toString() {
return GetAllHistoryStreamProvider(itemType: itemType, search: search); return r'getAllHistoryStreamProvider'
''
'$argument';
} }
@$internal
@override @override
GetAllHistoryStreamProvider getProviderOverride( $StreamProviderElement<List<History>> $createElement(
covariant GetAllHistoryStreamProvider provider, $ProviderPointer pointer,
) { ) => $StreamProviderElement(pointer);
return call(itemType: provider.itemType, search: provider.search);
}
static const Iterable<ProviderOrFamily>? _dependencies = null;
@override @override
Iterable<ProviderOrFamily>? get dependencies => _dependencies; Stream<List<History>> create(Ref ref) {
final argument = this.argument as ({ItemType itemType, String search});
static const Iterable<ProviderOrFamily>? _allTransitiveDependencies = null; return getAllHistoryStream(
ref,
@override itemType: argument.itemType,
Iterable<ProviderOrFamily>? get allTransitiveDependencies => search: argument.search,
_allTransitiveDependencies;
@override
String? get name => r'getAllHistoryStreamProvider';
}
/// See also [getAllHistoryStream].
class GetAllHistoryStreamProvider
extends AutoDisposeStreamProvider<List<History>> {
/// See also [getAllHistoryStream].
GetAllHistoryStreamProvider({required ItemType itemType, String search = ""})
: this._internal(
(ref) => getAllHistoryStream(
ref as GetAllHistoryStreamRef,
itemType: itemType,
search: search,
),
from: getAllHistoryStreamProvider,
name: r'getAllHistoryStreamProvider',
debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product')
? null
: _$getAllHistoryStreamHash,
dependencies: GetAllHistoryStreamFamily._dependencies,
allTransitiveDependencies:
GetAllHistoryStreamFamily._allTransitiveDependencies,
itemType: itemType,
search: search,
);
GetAllHistoryStreamProvider._internal(
super._createNotifier, {
required super.name,
required super.dependencies,
required super.allTransitiveDependencies,
required super.debugGetCreateSourceHash,
required super.from,
required this.itemType,
required this.search,
}) : super.internal();
final ItemType itemType;
final String search;
@override
Override overrideWith(
Stream<List<History>> Function(GetAllHistoryStreamRef provider) create,
) {
return ProviderOverride(
origin: this,
override: GetAllHistoryStreamProvider._internal(
(ref) => create(ref as GetAllHistoryStreamRef),
from: from,
name: null,
dependencies: null,
allTransitiveDependencies: null,
debugGetCreateSourceHash: null,
itemType: itemType,
search: search,
),
); );
} }
@override
AutoDisposeStreamProviderElement<List<History>> createElement() {
return _GetAllHistoryStreamProviderElement(this);
}
@override @override
bool operator ==(Object other) { bool operator ==(Object other) {
return other is GetAllHistoryStreamProvider && return other is GetAllHistoryStreamProvider && other.argument == argument;
other.itemType == itemType &&
other.search == search;
} }
@override @override
int get hashCode { int get hashCode {
var hash = _SystemHash.combine(0, runtimeType.hashCode); return argument.hashCode;
hash = _SystemHash.combine(hash, itemType.hashCode);
hash = _SystemHash.combine(hash, search.hashCode);
return _SystemHash.finish(hash);
} }
} }
@Deprecated('Will be removed in 3.0. Use Ref instead') String _$getAllHistoryStreamHash() =>
// ignore: unused_element r'1ce5bd0046fbbec46e91b7a486523945699d95f3';
mixin GetAllHistoryStreamRef on AutoDisposeStreamProviderRef<List<History>> {
/// The parameter `itemType` of this provider.
ItemType get itemType;
/// The parameter `search` of this provider. final class GetAllHistoryStreamFamily extends $Family
String get search; with
$FunctionalFamilyOverride<
Stream<List<History>>,
({ItemType itemType, String search})
> {
const GetAllHistoryStreamFamily._()
: super(
retry: null,
name: r'getAllHistoryStreamProvider',
dependencies: null,
$allTransitiveDependencies: null,
isAutoDispose: true,
);
GetAllHistoryStreamProvider call({
required ItemType itemType,
String search = '',
}) => GetAllHistoryStreamProvider._(
argument: (itemType: itemType, search: search),
from: this,
);
@override
String toString() => r'getAllHistoryStreamProvider';
} }
class _GetAllHistoryStreamProviderElement @ProviderFor(getAllUpdateStream)
extends AutoDisposeStreamProviderElement<List<History>> const getAllUpdateStreamProvider = GetAllUpdateStreamFamily._();
with GetAllHistoryStreamRef {
_GetAllHistoryStreamProviderElement(super.provider); final class GetAllUpdateStreamProvider
extends
$FunctionalProvider<
AsyncValue<List<Update>>,
List<Update>,
Stream<List<Update>>
>
with $FutureModifier<List<Update>>, $StreamProvider<List<Update>> {
const GetAllUpdateStreamProvider._({
required GetAllUpdateStreamFamily super.from,
required ({ItemType itemType, String search}) super.argument,
}) : super(
retry: null,
name: r'getAllUpdateStreamProvider',
isAutoDispose: true,
dependencies: null,
$allTransitiveDependencies: null,
);
@override @override
ItemType get itemType => (origin as GetAllHistoryStreamProvider).itemType; String debugGetCreateSourceHash() => _$getAllUpdateStreamHash();
@override @override
String get search => (origin as GetAllHistoryStreamProvider).search; String toString() {
return r'getAllUpdateStreamProvider'
''
'$argument';
}
@$internal
@override
$StreamProviderElement<List<Update>> $createElement(
$ProviderPointer pointer,
) => $StreamProviderElement(pointer);
@override
Stream<List<Update>> create(Ref ref) {
final argument = this.argument as ({ItemType itemType, String search});
return getAllUpdateStream(
ref,
itemType: argument.itemType,
search: argument.search,
);
}
@override
bool operator ==(Object other) {
return other is GetAllUpdateStreamProvider && other.argument == argument;
}
@override
int get hashCode {
return argument.hashCode;
}
} }
String _$getAllUpdateStreamHash() => String _$getAllUpdateStreamHash() =>
r'43369b20d702d12aeae627fcd04ceb61caf0dc74'; r'43369b20d702d12aeae627fcd04ceb61caf0dc74';
/// See also [getAllUpdateStream]. final class GetAllUpdateStreamFamily extends $Family
@ProviderFor(getAllUpdateStream) with
const getAllUpdateStreamProvider = GetAllUpdateStreamFamily(); $FunctionalFamilyOverride<
Stream<List<Update>>,
/// See also [getAllUpdateStream]. ({ItemType itemType, String search})
class GetAllUpdateStreamFamily extends Family<AsyncValue<List<Update>>> { > {
/// See also [getAllUpdateStream]. const GetAllUpdateStreamFamily._()
const GetAllUpdateStreamFamily(); : super(
retry: null,
/// See also [getAllUpdateStream].
GetAllUpdateStreamProvider call({
required ItemType itemType,
String search = "",
}) {
return GetAllUpdateStreamProvider(itemType: itemType, search: search);
}
@override
GetAllUpdateStreamProvider getProviderOverride(
covariant GetAllUpdateStreamProvider provider,
) {
return call(itemType: provider.itemType, search: provider.search);
}
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'getAllUpdateStreamProvider';
}
/// See also [getAllUpdateStream].
class GetAllUpdateStreamProvider
extends AutoDisposeStreamProvider<List<Update>> {
/// See also [getAllUpdateStream].
GetAllUpdateStreamProvider({required ItemType itemType, String search = ""})
: this._internal(
(ref) => getAllUpdateStream(
ref as GetAllUpdateStreamRef,
itemType: itemType,
search: search,
),
from: getAllUpdateStreamProvider,
name: r'getAllUpdateStreamProvider', name: r'getAllUpdateStreamProvider',
debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product') dependencies: null,
? null $allTransitiveDependencies: null,
: _$getAllUpdateStreamHash, isAutoDispose: true,
dependencies: GetAllUpdateStreamFamily._dependencies,
allTransitiveDependencies:
GetAllUpdateStreamFamily._allTransitiveDependencies,
itemType: itemType,
search: search,
); );
GetAllUpdateStreamProvider._internal( GetAllUpdateStreamProvider call({
super._createNotifier, { required ItemType itemType,
required super.name, String search = '',
required super.dependencies, }) => GetAllUpdateStreamProvider._(
required super.allTransitiveDependencies, argument: (itemType: itemType, search: search),
required super.debugGetCreateSourceHash, from: this,
required super.from, );
required this.itemType,
required this.search,
}) : super.internal();
final ItemType itemType;
final String search;
@override @override
Override overrideWith( String toString() => r'getAllUpdateStreamProvider';
Stream<List<Update>> Function(GetAllUpdateStreamRef provider) create,
) {
return ProviderOverride(
origin: this,
override: GetAllUpdateStreamProvider._internal(
(ref) => create(ref as GetAllUpdateStreamRef),
from: from,
name: null,
dependencies: null,
allTransitiveDependencies: null,
debugGetCreateSourceHash: null,
itemType: itemType,
search: search,
),
);
}
@override
AutoDisposeStreamProviderElement<List<Update>> createElement() {
return _GetAllUpdateStreamProviderElement(this);
}
@override
bool operator ==(Object other) {
return other is GetAllUpdateStreamProvider &&
other.itemType == itemType &&
other.search == search;
}
@override
int get hashCode {
var hash = _SystemHash.combine(0, runtimeType.hashCode);
hash = _SystemHash.combine(hash, itemType.hashCode);
hash = _SystemHash.combine(hash, search.hashCode);
return _SystemHash.finish(hash);
}
} }
@Deprecated('Will be removed in 3.0. Use Ref instead')
// ignore: unused_element
mixin GetAllUpdateStreamRef on AutoDisposeStreamProviderRef<List<Update>> {
/// The parameter `itemType` of this provider.
ItemType get itemType;
/// The parameter `search` of this provider.
String get search;
}
class _GetAllUpdateStreamProviderElement
extends AutoDisposeStreamProviderElement<List<Update>>
with GetAllUpdateStreamRef {
_GetAllUpdateStreamProviderElement(super.provider);
@override
ItemType get itemType => (origin as GetAllUpdateStreamProvider).itemType;
@override
String get search => (origin as GetAllUpdateStreamProvider).search;
}
// 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 @@ import 'package:bot_toast/bot_toast.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/services.dart'; import 'package:flutter/services.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:isar/isar.dart'; import 'package:isar_community/isar.dart';
import 'package:mangayomi/eval/model/m_bridge.dart'; import 'package:mangayomi/eval/model/m_bridge.dart';
import 'package:mangayomi/main.dart'; import 'package:mangayomi/main.dart';
import 'package:mangayomi/models/changed.dart'; import 'package:mangayomi/models/changed.dart';
@ -43,6 +43,7 @@ import 'package:mangayomi/modules/widgets/progress_center.dart';
import 'package:mangayomi/utils/extensions/string_extensions.dart'; import 'package:mangayomi/utils/extensions/string_extensions.dart';
import 'package:mangayomi/utils/global_style.dart'; import 'package:mangayomi/utils/global_style.dart';
import 'package:path/path.dart' as p; import 'package:path/path.dart' as p;
import 'package:riverpod_annotation/riverpod_annotation.dart';
class LibraryScreen extends ConsumerStatefulWidget { class LibraryScreen extends ConsumerStatefulWidget {
final ItemType itemType; final ItemType itemType;

View file

@ -4,7 +4,6 @@ import 'package:mangayomi/models/chapter.dart';
import 'package:mangayomi/models/manga.dart'; import 'package:mangayomi/models/manga.dart';
import 'package:mangayomi/services/torrent_server.dart'; import 'package:mangayomi/services/torrent_server.dart';
import 'package:riverpod_annotation/riverpod_annotation.dart'; import 'package:riverpod_annotation/riverpod_annotation.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
part 'add_torrent.g.dart'; part 'add_torrent.g.dart';
@riverpod @riverpod

View file

@ -6,183 +6,92 @@ part of 'add_torrent.dart';
// RiverpodGenerator // RiverpodGenerator
// ************************************************************************** // **************************************************************************
String _$addTorrentFromUrlOrFromFileHash() => // GENERATED CODE - DO NOT MODIFY BY HAND
r'a54f90b6708b13eeb8fed098691f9a79dbab50fd'; // ignore_for_file: type=lint, type=warning
/// Copied from Dart SDK
class _SystemHash {
_SystemHash._();
static int combine(int hash, int value) {
// ignore: parameter_assignments
hash = 0x1fffffff & (hash + value);
// ignore: parameter_assignments
hash = 0x1fffffff & (hash + ((0x0007ffff & hash) << 10));
return hash ^ (hash >> 6);
}
static int finish(int hash) {
// ignore: parameter_assignments
hash = 0x1fffffff & (hash + ((0x03ffffff & hash) << 3));
// ignore: parameter_assignments
hash = hash ^ (hash >> 11);
return 0x1fffffff & (hash + ((0x00003fff & hash) << 15));
}
}
/// See also [addTorrentFromUrlOrFromFile].
@ProviderFor(addTorrentFromUrlOrFromFile) @ProviderFor(addTorrentFromUrlOrFromFile)
const addTorrentFromUrlOrFromFileProvider = AddTorrentFromUrlOrFromFileFamily(); const addTorrentFromUrlOrFromFileProvider =
AddTorrentFromUrlOrFromFileFamily._();
/// See also [addTorrentFromUrlOrFromFile]. final class AddTorrentFromUrlOrFromFileProvider
class AddTorrentFromUrlOrFromFileFamily extends Family<AsyncValue> { extends $FunctionalProvider<AsyncValue<dynamic>, dynamic, FutureOr<dynamic>>
/// See also [addTorrentFromUrlOrFromFile]. with $FutureModifier<dynamic>, $FutureProvider<dynamic> {
const AddTorrentFromUrlOrFromFileFamily(); const AddTorrentFromUrlOrFromFileProvider._({
required AddTorrentFromUrlOrFromFileFamily super.from,
/// See also [addTorrentFromUrlOrFromFile]. required (Manga?, {bool init, String? url}) super.argument,
AddTorrentFromUrlOrFromFileProvider call( }) : super(
Manga? mManga, { retry: null,
required bool init,
String? url,
}) {
return AddTorrentFromUrlOrFromFileProvider(mManga, init: init, url: url);
}
@override
AddTorrentFromUrlOrFromFileProvider getProviderOverride(
covariant AddTorrentFromUrlOrFromFileProvider provider,
) {
return call(provider.mManga, init: provider.init, url: provider.url);
}
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'addTorrentFromUrlOrFromFileProvider';
}
/// See also [addTorrentFromUrlOrFromFile].
class AddTorrentFromUrlOrFromFileProvider
extends AutoDisposeFutureProvider<Object?> {
/// See also [addTorrentFromUrlOrFromFile].
AddTorrentFromUrlOrFromFileProvider(
Manga? mManga, {
required bool init,
String? url,
}) : this._internal(
(ref) => addTorrentFromUrlOrFromFile(
ref as AddTorrentFromUrlOrFromFileRef,
mManga,
init: init,
url: url,
),
from: addTorrentFromUrlOrFromFileProvider,
name: r'addTorrentFromUrlOrFromFileProvider', name: r'addTorrentFromUrlOrFromFileProvider',
debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product') isAutoDispose: true,
? null dependencies: null,
: _$addTorrentFromUrlOrFromFileHash, $allTransitiveDependencies: null,
dependencies: AddTorrentFromUrlOrFromFileFamily._dependencies,
allTransitiveDependencies:
AddTorrentFromUrlOrFromFileFamily._allTransitiveDependencies,
mManga: mManga,
init: init,
url: url,
); );
AddTorrentFromUrlOrFromFileProvider._internal( @override
super._createNotifier, { String debugGetCreateSourceHash() => _$addTorrentFromUrlOrFromFileHash();
required super.name,
required super.dependencies,
required super.allTransitiveDependencies,
required super.debugGetCreateSourceHash,
required super.from,
required this.mManga,
required this.init,
required this.url,
}) : super.internal();
final Manga? mManga;
final bool init;
final String? url;
@override @override
Override overrideWith( String toString() {
FutureOr<Object?> Function(AddTorrentFromUrlOrFromFileRef provider) create, return r'addTorrentFromUrlOrFromFileProvider'
) { ''
return ProviderOverride( '$argument';
origin: this,
override: AddTorrentFromUrlOrFromFileProvider._internal(
(ref) => create(ref as AddTorrentFromUrlOrFromFileRef),
from: from,
name: null,
dependencies: null,
allTransitiveDependencies: null,
debugGetCreateSourceHash: null,
mManga: mManga,
init: init,
url: url,
),
);
} }
@$internal
@override @override
AutoDisposeFutureProviderElement<Object?> createElement() { $FutureProviderElement<dynamic> $createElement($ProviderPointer pointer) =>
return _AddTorrentFromUrlOrFromFileProviderElement(this); $FutureProviderElement(pointer);
@override
FutureOr<dynamic> create(Ref ref) {
final argument = this.argument as (Manga?, {bool init, String? url});
return addTorrentFromUrlOrFromFile(
ref,
argument.$1,
init: argument.init,
url: argument.url,
);
} }
@override @override
bool operator ==(Object other) { bool operator ==(Object other) {
return other is AddTorrentFromUrlOrFromFileProvider && return other is AddTorrentFromUrlOrFromFileProvider &&
other.mManga == mManga && other.argument == argument;
other.init == init &&
other.url == url;
} }
@override @override
int get hashCode { int get hashCode {
var hash = _SystemHash.combine(0, runtimeType.hashCode); return argument.hashCode;
hash = _SystemHash.combine(hash, mManga.hashCode);
hash = _SystemHash.combine(hash, init.hashCode);
hash = _SystemHash.combine(hash, url.hashCode);
return _SystemHash.finish(hash);
} }
} }
@Deprecated('Will be removed in 3.0. Use Ref instead') String _$addTorrentFromUrlOrFromFileHash() =>
// ignore: unused_element r'a54f90b6708b13eeb8fed098691f9a79dbab50fd';
mixin AddTorrentFromUrlOrFromFileRef on AutoDisposeFutureProviderRef<Object?> {
/// The parameter `mManga` of this provider.
Manga? get mManga;
/// The parameter `init` of this provider. final class AddTorrentFromUrlOrFromFileFamily extends $Family
bool get init; with
$FunctionalFamilyOverride<
FutureOr<dynamic>,
(Manga?, {bool init, String? url})
> {
const AddTorrentFromUrlOrFromFileFamily._()
: super(
retry: null,
name: r'addTorrentFromUrlOrFromFileProvider',
dependencies: null,
$allTransitiveDependencies: null,
isAutoDispose: true,
);
/// The parameter `url` of this provider. AddTorrentFromUrlOrFromFileProvider call(
String? get url; Manga? mManga, {
required bool init,
String? url,
}) => AddTorrentFromUrlOrFromFileProvider._(
argument: (mManga, init: init, url: url),
from: this,
);
@override
String toString() => r'addTorrentFromUrlOrFromFileProvider';
} }
class _AddTorrentFromUrlOrFromFileProviderElement
extends AutoDisposeFutureProviderElement<Object?>
with AddTorrentFromUrlOrFromFileRef {
_AddTorrentFromUrlOrFromFileProviderElement(super.provider);
@override
Manga? get mManga => (origin as AddTorrentFromUrlOrFromFileProvider).mManga;
@override
bool get init => (origin as AddTorrentFromUrlOrFromFileProvider).init;
@override
String? get url => (origin as AddTorrentFromUrlOrFromFileProvider).url;
}
// 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

@ -1,7 +1,7 @@
import 'dart:convert'; import 'dart:convert';
import 'dart:io'; // For I/O-operations import 'dart:io'; // For I/O-operations
import 'package:epubx/epubx.dart'; import 'package:epubx/epubx.dart';
import 'package:isar/isar.dart'; // Isar database package for local storage import 'package:isar_community/isar.dart'; // Isar database package for local storage
import 'package:mangayomi/main.dart'; // Exposes the global `isar` instance import 'package:mangayomi/main.dart'; // Exposes the global `isar` instance
import 'package:mangayomi/models/settings.dart'; import 'package:mangayomi/models/settings.dart';
import 'package:mangayomi/utils/extensions/others.dart'; import 'package:mangayomi/utils/extensions/others.dart';
@ -9,7 +9,6 @@ import 'package:path/path.dart' as p; // For manipulating file system paths
import 'package:bot_toast/bot_toast.dart'; // For Exceptions import 'package:bot_toast/bot_toast.dart'; // For Exceptions
import 'package:mangayomi/models/manga.dart'; // Has Manga model and ItemType enum import 'package:mangayomi/models/manga.dart'; // Has Manga model and ItemType enum
import 'package:mangayomi/models/chapter.dart'; // Has Chapter model with archivePath import 'package:mangayomi/models/chapter.dart'; // Has Chapter model with archivePath
import 'package:flutter_riverpod/flutter_riverpod.dart'; // Riverpod state management
import 'package:mangayomi/providers/storage_provider.dart'; // Provides storage directory selection import 'package:mangayomi/providers/storage_provider.dart'; // Provides storage directory selection
import 'package:riverpod_annotation/riverpod_annotation.dart'; // Annotations for code generation import 'package:riverpod_annotation/riverpod_annotation.dart'; // Annotations for code generation
part 'file_scanner.g.dart'; part 'file_scanner.g.dart';
@ -387,7 +386,7 @@ Future<Directory?> getLocalLibrary() async {
/// becomes: /// becomes:
/// "Manga 1/chapter1.zip" /// "Manga 1/chapter1.zip"
/// ``` /// ```
String _getRelativePath(dir) { String _getRelativePath(dynamic dir) {
String relativePath; String relativePath;
if (dir is Directory) { if (dir is Directory) {

View file

@ -6,7 +6,61 @@ part of 'file_scanner.dart';
// RiverpodGenerator // RiverpodGenerator
// ************************************************************************** // **************************************************************************
String _$scanLocalLibraryHash() => r'7fdedaa37917728d9f3b9d8f15090c94bdb34238'; // GENERATED CODE - DO NOT MODIFY BY HAND
// ignore_for_file: type=lint, type=warning
@ProviderFor(LocalFoldersState)
const localFoldersStateProvider = LocalFoldersStateProvider._();
final class LocalFoldersStateProvider
extends $NotifierProvider<LocalFoldersState, List<String>> {
const LocalFoldersStateProvider._()
: super(
from: null,
argument: null,
retry: null,
name: r'localFoldersStateProvider',
isAutoDispose: true,
dependencies: null,
$allTransitiveDependencies: null,
);
@override
String debugGetCreateSourceHash() => _$localFoldersStateHash();
@$internal
@override
LocalFoldersState create() => LocalFoldersState();
/// {@macro riverpod.override_with_value}
Override overrideWithValue(List<String> value) {
return $ProviderOverride(
origin: this,
providerOverride: $SyncValueProvider<List<String>>(value),
);
}
}
String _$localFoldersStateHash() => r'7cf7902ad34ee5ae018b2c9ac3849e822bc5f0b7';
abstract class _$LocalFoldersState extends $Notifier<List<String>> {
List<String> build();
@$mustCallSuper
@override
void runBuild() {
final created = build();
final ref = this.ref as $Ref<List<String>, List<String>>;
final element =
ref.element
as $ClassProviderElement<
AnyNotifier<List<String>, List<String>>,
List<String>,
Object?,
Object?
>;
element.handleValue(ref, created);
}
}
/// Scans `Mangayomi/local` folder (if exists) for Mangas/Animes and imports in library. /// Scans `Mangayomi/local` folder (if exists) for Mangas/Animes and imports in library.
/// ///
@ -25,37 +79,71 @@ String _$scanLocalLibraryHash() => r'7fdedaa37917728d9f3b9d8f15090c94bdb34238';
/// Archivetypes: cbz, zip, cbt, tar /// Archivetypes: cbz, zip, cbt, tar
/// Other types: epub /// Other types: epub
/// ``` /// ```
///
/// Copied from [scanLocalLibrary].
@ProviderFor(scanLocalLibrary) @ProviderFor(scanLocalLibrary)
final scanLocalLibraryProvider = AutoDisposeFutureProvider<void>.internal( const scanLocalLibraryProvider = ScanLocalLibraryProvider._();
scanLocalLibrary,
name: r'scanLocalLibraryProvider',
debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product')
? null
: _$scanLocalLibraryHash,
dependencies: null,
allTransitiveDependencies: null,
);
@Deprecated('Will be removed in 3.0. Use Ref instead') /// Scans `Mangayomi/local` folder (if exists) for Mangas/Animes and imports in library.
// ignore: unused_element ///
typedef ScanLocalLibraryRef = AutoDisposeFutureProviderRef<void>; /// **Folder structure:**
String _$localFoldersStateHash() => r'7cf7902ad34ee5ae018b2c9ac3849e822bc5f0b7'; /// ```
/// Mangayomi/local/MangaName/CustomCover.jpg (optional)
/// Mangayomi/local/MangaName/Chapter1/Page1.jpg
/// Mangayomi/local/MangaName/Chapter2.cbz
/// Mangayomi/local/AnimeName/Episode1.mp4
/// Mangayomi/local/NovelName/NovelName.epub
/// ```
/// **Supported filetypes:** (taken from lib/modules/library/providers/local_archive.dart, line 98)
/// ```
/// Videotypes: mp4, mov, avi, flv, wmv, mpeg, mkv
/// Imagetypes: jpg, jpeg, png, webp
/// Archivetypes: cbz, zip, cbt, tar
/// Other types: epub
/// ```
/// See also [LocalFoldersState]. final class ScanLocalLibraryProvider
@ProviderFor(LocalFoldersState) extends $FunctionalProvider<AsyncValue<void>, void, FutureOr<void>>
final localFoldersStateProvider = with $FutureModifier<void>, $FutureProvider<void> {
AutoDisposeNotifierProvider<LocalFoldersState, List<String>>.internal( /// Scans `Mangayomi/local` folder (if exists) for Mangas/Animes and imports in library.
LocalFoldersState.new, ///
name: r'localFoldersStateProvider', /// **Folder structure:**
debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product') /// ```
? null /// Mangayomi/local/MangaName/CustomCover.jpg (optional)
: _$localFoldersStateHash, /// Mangayomi/local/MangaName/Chapter1/Page1.jpg
dependencies: null, /// Mangayomi/local/MangaName/Chapter2.cbz
allTransitiveDependencies: null, /// Mangayomi/local/AnimeName/Episode1.mp4
); /// Mangayomi/local/NovelName/NovelName.epub
/// ```
/// **Supported filetypes:** (taken from lib/modules/library/providers/local_archive.dart, line 98)
/// ```
/// Videotypes: mp4, mov, avi, flv, wmv, mpeg, mkv
/// Imagetypes: jpg, jpeg, png, webp
/// Archivetypes: cbz, zip, cbt, tar
/// Other types: epub
/// ```
const ScanLocalLibraryProvider._()
: super(
from: null,
argument: null,
retry: null,
name: r'scanLocalLibraryProvider',
isAutoDispose: true,
dependencies: null,
$allTransitiveDependencies: null,
);
typedef _$LocalFoldersState = AutoDisposeNotifier<List<String>>; @override
// ignore_for_file: type=lint String debugGetCreateSourceHash() => _$scanLocalLibraryHash();
// 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
@$internal
@override
$FutureProviderElement<void> $createElement($ProviderPointer pointer) =>
$FutureProviderElement(pointer);
@override
FutureOr<void> create(Ref ref) {
return scanLocalLibrary(ref);
}
}
String _$scanLocalLibraryHash() => r'7fdedaa37917728d9f3b9d8f15090c94bdb34238';

View file

@ -1,9 +1,8 @@
import 'package:isar/isar.dart'; import 'package:isar_community/isar.dart';
import 'package:mangayomi/main.dart'; import 'package:mangayomi/main.dart';
import 'package:mangayomi/models/manga.dart'; import 'package:mangayomi/models/manga.dart';
import 'package:mangayomi/models/settings.dart'; import 'package:mangayomi/models/settings.dart';
import 'package:riverpod_annotation/riverpod_annotation.dart'; import 'package:riverpod_annotation/riverpod_annotation.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
part 'isar_providers.g.dart'; part 'isar_providers.g.dart';
@riverpod @riverpod

View file

@ -6,321 +6,215 @@ part of 'isar_providers.dart';
// RiverpodGenerator // RiverpodGenerator
// ************************************************************************** // **************************************************************************
String _$getAllMangaStreamHash() => r'5e86a22a68ca1a52aefa9c0bc675d284369beac5'; // GENERATED CODE - DO NOT MODIFY BY HAND
// ignore_for_file: type=lint, type=warning
/// Copied from Dart SDK
class _SystemHash {
_SystemHash._();
static int combine(int hash, int value) {
// ignore: parameter_assignments
hash = 0x1fffffff & (hash + value);
// ignore: parameter_assignments
hash = 0x1fffffff & (hash + ((0x0007ffff & hash) << 10));
return hash ^ (hash >> 6);
}
static int finish(int hash) {
// ignore: parameter_assignments
hash = 0x1fffffff & (hash + ((0x03ffffff & hash) << 3));
// ignore: parameter_assignments
hash = hash ^ (hash >> 11);
return 0x1fffffff & (hash + ((0x00003fff & hash) << 15));
}
}
/// See also [getAllMangaStream].
@ProviderFor(getAllMangaStream) @ProviderFor(getAllMangaStream)
const getAllMangaStreamProvider = GetAllMangaStreamFamily(); const getAllMangaStreamProvider = GetAllMangaStreamFamily._();
/// See also [getAllMangaStream]. final class GetAllMangaStreamProvider
class GetAllMangaStreamFamily extends Family<AsyncValue<List<Manga>>> { extends
/// See also [getAllMangaStream]. $FunctionalProvider<
const GetAllMangaStreamFamily(); AsyncValue<List<Manga>>,
List<Manga>,
/// See also [getAllMangaStream]. Stream<List<Manga>>
GetAllMangaStreamProvider call({ >
required int? categoryId, with $FutureModifier<List<Manga>>, $StreamProvider<List<Manga>> {
required ItemType itemType, const GetAllMangaStreamProvider._({
}) { required GetAllMangaStreamFamily super.from,
return GetAllMangaStreamProvider( required ({int? categoryId, ItemType itemType}) super.argument,
categoryId: categoryId, }) : super(
itemType: itemType, retry: null,
);
}
@override
GetAllMangaStreamProvider getProviderOverride(
covariant GetAllMangaStreamProvider provider,
) {
return call(categoryId: provider.categoryId, itemType: provider.itemType);
}
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'getAllMangaStreamProvider';
}
/// See also [getAllMangaStream].
class GetAllMangaStreamProvider extends AutoDisposeStreamProvider<List<Manga>> {
/// See also [getAllMangaStream].
GetAllMangaStreamProvider({
required int? categoryId,
required ItemType itemType,
}) : this._internal(
(ref) => getAllMangaStream(
ref as GetAllMangaStreamRef,
categoryId: categoryId,
itemType: itemType,
),
from: getAllMangaStreamProvider,
name: r'getAllMangaStreamProvider', name: r'getAllMangaStreamProvider',
debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product') isAutoDispose: true,
? null dependencies: null,
: _$getAllMangaStreamHash, $allTransitiveDependencies: null,
dependencies: GetAllMangaStreamFamily._dependencies,
allTransitiveDependencies:
GetAllMangaStreamFamily._allTransitiveDependencies,
categoryId: categoryId,
itemType: itemType,
); );
GetAllMangaStreamProvider._internal( @override
super._createNotifier, { String debugGetCreateSourceHash() => _$getAllMangaStreamHash();
required super.name,
required super.dependencies,
required super.allTransitiveDependencies,
required super.debugGetCreateSourceHash,
required super.from,
required this.categoryId,
required this.itemType,
}) : super.internal();
final int? categoryId;
final ItemType itemType;
@override @override
Override overrideWith( String toString() {
Stream<List<Manga>> Function(GetAllMangaStreamRef provider) create, return r'getAllMangaStreamProvider'
) { ''
return ProviderOverride( '$argument';
origin: this,
override: GetAllMangaStreamProvider._internal(
(ref) => create(ref as GetAllMangaStreamRef),
from: from,
name: null,
dependencies: null,
allTransitiveDependencies: null,
debugGetCreateSourceHash: null,
categoryId: categoryId,
itemType: itemType,
),
);
} }
@$internal
@override @override
AutoDisposeStreamProviderElement<List<Manga>> createElement() { $StreamProviderElement<List<Manga>> $createElement(
return _GetAllMangaStreamProviderElement(this); $ProviderPointer pointer,
) => $StreamProviderElement(pointer);
@override
Stream<List<Manga>> create(Ref ref) {
final argument = this.argument as ({int? categoryId, ItemType itemType});
return getAllMangaStream(
ref,
categoryId: argument.categoryId,
itemType: argument.itemType,
);
} }
@override @override
bool operator ==(Object other) { bool operator ==(Object other) {
return other is GetAllMangaStreamProvider && return other is GetAllMangaStreamProvider && other.argument == argument;
other.categoryId == categoryId &&
other.itemType == itemType;
} }
@override @override
int get hashCode { int get hashCode {
var hash = _SystemHash.combine(0, runtimeType.hashCode); return argument.hashCode;
hash = _SystemHash.combine(hash, categoryId.hashCode);
hash = _SystemHash.combine(hash, itemType.hashCode);
return _SystemHash.finish(hash);
} }
} }
@Deprecated('Will be removed in 3.0. Use Ref instead') String _$getAllMangaStreamHash() => r'5e86a22a68ca1a52aefa9c0bc675d284369beac5';
// ignore: unused_element
mixin GetAllMangaStreamRef on AutoDisposeStreamProviderRef<List<Manga>> {
/// The parameter `categoryId` of this provider.
int? get categoryId;
/// The parameter `itemType` of this provider. final class GetAllMangaStreamFamily extends $Family
ItemType get itemType; with
} $FunctionalFamilyOverride<
Stream<List<Manga>>,
class _GetAllMangaStreamProviderElement ({int? categoryId, ItemType itemType})
extends AutoDisposeStreamProviderElement<List<Manga>> > {
with GetAllMangaStreamRef { const GetAllMangaStreamFamily._()
_GetAllMangaStreamProviderElement(super.provider); : super(
retry: null,
@override name: r'getAllMangaStreamProvider',
int? get categoryId => (origin as GetAllMangaStreamProvider).categoryId; dependencies: null,
@override $allTransitiveDependencies: null,
ItemType get itemType => (origin as GetAllMangaStreamProvider).itemType; isAutoDispose: true,
}
String _$getAllMangaWithoutCategoriesStreamHash() =>
r'61ea54070c7e87a45aeabce5fd21366faaf4ae6d';
/// See also [getAllMangaWithoutCategoriesStream].
@ProviderFor(getAllMangaWithoutCategoriesStream)
const getAllMangaWithoutCategoriesStreamProvider =
GetAllMangaWithoutCategoriesStreamFamily();
/// See also [getAllMangaWithoutCategoriesStream].
class GetAllMangaWithoutCategoriesStreamFamily
extends Family<AsyncValue<List<Manga>>> {
/// See also [getAllMangaWithoutCategoriesStream].
const GetAllMangaWithoutCategoriesStreamFamily();
/// See also [getAllMangaWithoutCategoriesStream].
GetAllMangaWithoutCategoriesStreamProvider call({
required ItemType itemType,
}) {
return GetAllMangaWithoutCategoriesStreamProvider(itemType: itemType);
}
@override
GetAllMangaWithoutCategoriesStreamProvider getProviderOverride(
covariant GetAllMangaWithoutCategoriesStreamProvider provider,
) {
return call(itemType: provider.itemType);
}
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'getAllMangaWithoutCategoriesStreamProvider';
}
/// See also [getAllMangaWithoutCategoriesStream].
class GetAllMangaWithoutCategoriesStreamProvider
extends AutoDisposeStreamProvider<List<Manga>> {
/// See also [getAllMangaWithoutCategoriesStream].
GetAllMangaWithoutCategoriesStreamProvider({required ItemType itemType})
: this._internal(
(ref) => getAllMangaWithoutCategoriesStream(
ref as GetAllMangaWithoutCategoriesStreamRef,
itemType: itemType,
),
from: getAllMangaWithoutCategoriesStreamProvider,
name: r'getAllMangaWithoutCategoriesStreamProvider',
debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product')
? null
: _$getAllMangaWithoutCategoriesStreamHash,
dependencies: GetAllMangaWithoutCategoriesStreamFamily._dependencies,
allTransitiveDependencies:
GetAllMangaWithoutCategoriesStreamFamily._allTransitiveDependencies,
itemType: itemType,
); );
GetAllMangaWithoutCategoriesStreamProvider._internal( GetAllMangaStreamProvider call({
super._createNotifier, { required int? categoryId,
required super.name, required ItemType itemType,
required super.dependencies, }) => GetAllMangaStreamProvider._(
required super.allTransitiveDependencies, argument: (categoryId: categoryId, itemType: itemType),
required super.debugGetCreateSourceHash, from: this,
required super.from, );
required this.itemType,
}) : super.internal();
final ItemType itemType;
@override @override
Override overrideWith( String toString() => r'getAllMangaStreamProvider';
Stream<List<Manga>> Function(GetAllMangaWithoutCategoriesStreamRef provider) }
create,
) { @ProviderFor(getAllMangaWithoutCategoriesStream)
return ProviderOverride( const getAllMangaWithoutCategoriesStreamProvider =
origin: this, GetAllMangaWithoutCategoriesStreamFamily._();
override: GetAllMangaWithoutCategoriesStreamProvider._internal(
(ref) => create(ref as GetAllMangaWithoutCategoriesStreamRef), final class GetAllMangaWithoutCategoriesStreamProvider
from: from, extends
name: null, $FunctionalProvider<
dependencies: null, AsyncValue<List<Manga>>,
allTransitiveDependencies: null, List<Manga>,
debugGetCreateSourceHash: null, Stream<List<Manga>>
itemType: itemType, >
), with $FutureModifier<List<Manga>>, $StreamProvider<List<Manga>> {
); const GetAllMangaWithoutCategoriesStreamProvider._({
required GetAllMangaWithoutCategoriesStreamFamily super.from,
required ItemType super.argument,
}) : super(
retry: null,
name: r'getAllMangaWithoutCategoriesStreamProvider',
isAutoDispose: true,
dependencies: null,
$allTransitiveDependencies: null,
);
@override
String debugGetCreateSourceHash() =>
_$getAllMangaWithoutCategoriesStreamHash();
@override
String toString() {
return r'getAllMangaWithoutCategoriesStreamProvider'
''
'($argument)';
} }
@$internal
@override @override
AutoDisposeStreamProviderElement<List<Manga>> createElement() { $StreamProviderElement<List<Manga>> $createElement(
return _GetAllMangaWithoutCategoriesStreamProviderElement(this); $ProviderPointer pointer,
) => $StreamProviderElement(pointer);
@override
Stream<List<Manga>> create(Ref ref) {
final argument = this.argument as ItemType;
return getAllMangaWithoutCategoriesStream(ref, itemType: argument);
} }
@override @override
bool operator ==(Object other) { bool operator ==(Object other) {
return other is GetAllMangaWithoutCategoriesStreamProvider && return other is GetAllMangaWithoutCategoriesStreamProvider &&
other.itemType == itemType; other.argument == argument;
} }
@override @override
int get hashCode { int get hashCode {
var hash = _SystemHash.combine(0, runtimeType.hashCode); return argument.hashCode;
hash = _SystemHash.combine(hash, itemType.hashCode);
return _SystemHash.finish(hash);
} }
} }
@Deprecated('Will be removed in 3.0. Use Ref instead') String _$getAllMangaWithoutCategoriesStreamHash() =>
// ignore: unused_element r'61ea54070c7e87a45aeabce5fd21366faaf4ae6d';
mixin GetAllMangaWithoutCategoriesStreamRef
on AutoDisposeStreamProviderRef<List<Manga>> {
/// The parameter `itemType` of this provider.
ItemType get itemType;
}
class _GetAllMangaWithoutCategoriesStreamProviderElement final class GetAllMangaWithoutCategoriesStreamFamily extends $Family
extends AutoDisposeStreamProviderElement<List<Manga>> with $FunctionalFamilyOverride<Stream<List<Manga>>, ItemType> {
with GetAllMangaWithoutCategoriesStreamRef { const GetAllMangaWithoutCategoriesStreamFamily._()
_GetAllMangaWithoutCategoriesStreamProviderElement(super.provider); : super(
retry: null,
name: r'getAllMangaWithoutCategoriesStreamProvider',
dependencies: null,
$allTransitiveDependencies: null,
isAutoDispose: true,
);
GetAllMangaWithoutCategoriesStreamProvider call({
required ItemType itemType,
}) => GetAllMangaWithoutCategoriesStreamProvider._(
argument: itemType,
from: this,
);
@override @override
ItemType get itemType => String toString() => r'getAllMangaWithoutCategoriesStreamProvider';
(origin as GetAllMangaWithoutCategoriesStreamProvider).itemType; }
@ProviderFor(getSettingsStream)
const getSettingsStreamProvider = GetSettingsStreamProvider._();
final class GetSettingsStreamProvider
extends
$FunctionalProvider<
AsyncValue<List<Settings>>,
List<Settings>,
Stream<List<Settings>>
>
with $FutureModifier<List<Settings>>, $StreamProvider<List<Settings>> {
const GetSettingsStreamProvider._()
: super(
from: null,
argument: null,
retry: null,
name: r'getSettingsStreamProvider',
isAutoDispose: true,
dependencies: null,
$allTransitiveDependencies: null,
);
@override
String debugGetCreateSourceHash() => _$getSettingsStreamHash();
@$internal
@override
$StreamProviderElement<List<Settings>> $createElement(
$ProviderPointer pointer,
) => $StreamProviderElement(pointer);
@override
Stream<List<Settings>> create(Ref ref) {
return getSettingsStream(ref);
}
} }
String _$getSettingsStreamHash() => r'c5a51e0e3473b25d2365025832a27ed2cc029b27'; String _$getSettingsStreamHash() => r'c5a51e0e3473b25d2365025832a27ed2cc029b27';
/// See also [getSettingsStream].
@ProviderFor(getSettingsStream)
final getSettingsStreamProvider =
AutoDisposeStreamProvider<List<Settings>>.internal(
getSettingsStream,
name: r'getSettingsStreamProvider',
debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product')
? null
: _$getSettingsStreamHash,
dependencies: null,
allTransitiveDependencies: null,
);
@Deprecated('Will be removed in 3.0. Use Ref instead')
// ignore: unused_element
typedef GetSettingsStreamRef = AutoDisposeStreamProviderRef<List<Settings>>;
// 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

@ -146,7 +146,7 @@ class MangaFilterDownloadedState extends _$MangaFilterDownloadedState {
state = type; state = type;
} }
update() { void update() {
if (state == 0) { if (state == 0) {
setType(1); setType(1);
} else if (state == 1) { } else if (state == 1) {
@ -228,7 +228,7 @@ class MangaFilterUnreadState extends _$MangaFilterUnreadState {
} }
} }
update() { List<Manga> update() {
if (state == 0) { if (state == 0) {
final data = mangaList.where((element) { final data = mangaList.where((element) {
List list = []; List list = [];

File diff suppressed because it is too large Load diff

View file

@ -8,7 +8,6 @@ import 'package:mangayomi/models/manga.dart';
import 'package:mangayomi/modules/manga/archive_reader/models/models.dart'; import 'package:mangayomi/modules/manga/archive_reader/models/models.dart';
import 'package:mangayomi/modules/manga/archive_reader/providers/archive_reader_providers.dart'; import 'package:mangayomi/modules/manga/archive_reader/providers/archive_reader_providers.dart';
import 'package:riverpod_annotation/riverpod_annotation.dart'; import 'package:riverpod_annotation/riverpod_annotation.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
part 'local_archive.g.dart'; part 'local_archive.g.dart';
@riverpod @riverpod

View file

@ -6,191 +6,91 @@ part of 'local_archive.dart';
// RiverpodGenerator // RiverpodGenerator
// ************************************************************************** // **************************************************************************
String _$importArchivesFromFileHash() => // GENERATED CODE - DO NOT MODIFY BY HAND
r'784b9d45958695faffdf04ee7c105c9b486122de'; // ignore_for_file: type=lint, type=warning
/// Copied from Dart SDK
class _SystemHash {
_SystemHash._();
static int combine(int hash, int value) {
// ignore: parameter_assignments
hash = 0x1fffffff & (hash + value);
// ignore: parameter_assignments
hash = 0x1fffffff & (hash + ((0x0007ffff & hash) << 10));
return hash ^ (hash >> 6);
}
static int finish(int hash) {
// ignore: parameter_assignments
hash = 0x1fffffff & (hash + ((0x03ffffff & hash) << 3));
// ignore: parameter_assignments
hash = hash ^ (hash >> 11);
return 0x1fffffff & (hash + ((0x00003fff & hash) << 15));
}
}
/// See also [importArchivesFromFile].
@ProviderFor(importArchivesFromFile) @ProviderFor(importArchivesFromFile)
const importArchivesFromFileProvider = ImportArchivesFromFileFamily(); const importArchivesFromFileProvider = ImportArchivesFromFileFamily._();
/// See also [importArchivesFromFile]. final class ImportArchivesFromFileProvider
class ImportArchivesFromFileFamily extends Family<AsyncValue> { extends $FunctionalProvider<AsyncValue<dynamic>, dynamic, FutureOr<dynamic>>
/// See also [importArchivesFromFile]. with $FutureModifier<dynamic>, $FutureProvider<dynamic> {
const ImportArchivesFromFileFamily(); const ImportArchivesFromFileProvider._({
required ImportArchivesFromFileFamily super.from,
/// See also [importArchivesFromFile]. required (Manga?, {ItemType itemType, bool init}) super.argument,
ImportArchivesFromFileProvider call( }) : super(
Manga? mManga, { retry: null,
required ItemType itemType,
required bool init,
}) {
return ImportArchivesFromFileProvider(
mManga,
itemType: itemType,
init: init,
);
}
@override
ImportArchivesFromFileProvider getProviderOverride(
covariant ImportArchivesFromFileProvider provider,
) {
return call(
provider.mManga,
itemType: provider.itemType,
init: provider.init,
);
}
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'importArchivesFromFileProvider';
}
/// See also [importArchivesFromFile].
class ImportArchivesFromFileProvider
extends AutoDisposeFutureProvider<Object?> {
/// See also [importArchivesFromFile].
ImportArchivesFromFileProvider(
Manga? mManga, {
required ItemType itemType,
required bool init,
}) : this._internal(
(ref) => importArchivesFromFile(
ref as ImportArchivesFromFileRef,
mManga,
itemType: itemType,
init: init,
),
from: importArchivesFromFileProvider,
name: r'importArchivesFromFileProvider', name: r'importArchivesFromFileProvider',
debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product') isAutoDispose: true,
? null dependencies: null,
: _$importArchivesFromFileHash, $allTransitiveDependencies: null,
dependencies: ImportArchivesFromFileFamily._dependencies,
allTransitiveDependencies:
ImportArchivesFromFileFamily._allTransitiveDependencies,
mManga: mManga,
itemType: itemType,
init: init,
); );
ImportArchivesFromFileProvider._internal( @override
super._createNotifier, { String debugGetCreateSourceHash() => _$importArchivesFromFileHash();
required super.name,
required super.dependencies,
required super.allTransitiveDependencies,
required super.debugGetCreateSourceHash,
required super.from,
required this.mManga,
required this.itemType,
required this.init,
}) : super.internal();
final Manga? mManga;
final ItemType itemType;
final bool init;
@override @override
Override overrideWith( String toString() {
FutureOr<Object?> Function(ImportArchivesFromFileRef provider) create, return r'importArchivesFromFileProvider'
) { ''
return ProviderOverride( '$argument';
origin: this,
override: ImportArchivesFromFileProvider._internal(
(ref) => create(ref as ImportArchivesFromFileRef),
from: from,
name: null,
dependencies: null,
allTransitiveDependencies: null,
debugGetCreateSourceHash: null,
mManga: mManga,
itemType: itemType,
init: init,
),
);
} }
@$internal
@override @override
AutoDisposeFutureProviderElement<Object?> createElement() { $FutureProviderElement<dynamic> $createElement($ProviderPointer pointer) =>
return _ImportArchivesFromFileProviderElement(this); $FutureProviderElement(pointer);
@override
FutureOr<dynamic> create(Ref ref) {
final argument = this.argument as (Manga?, {ItemType itemType, bool init});
return importArchivesFromFile(
ref,
argument.$1,
itemType: argument.itemType,
init: argument.init,
);
} }
@override @override
bool operator ==(Object other) { bool operator ==(Object other) {
return other is ImportArchivesFromFileProvider && return other is ImportArchivesFromFileProvider &&
other.mManga == mManga && other.argument == argument;
other.itemType == itemType &&
other.init == init;
} }
@override @override
int get hashCode { int get hashCode {
var hash = _SystemHash.combine(0, runtimeType.hashCode); return argument.hashCode;
hash = _SystemHash.combine(hash, mManga.hashCode);
hash = _SystemHash.combine(hash, itemType.hashCode);
hash = _SystemHash.combine(hash, init.hashCode);
return _SystemHash.finish(hash);
} }
} }
@Deprecated('Will be removed in 3.0. Use Ref instead') String _$importArchivesFromFileHash() =>
// ignore: unused_element r'784b9d45958695faffdf04ee7c105c9b486122de';
mixin ImportArchivesFromFileRef on AutoDisposeFutureProviderRef<Object?> {
/// The parameter `mManga` of this provider.
Manga? get mManga;
/// The parameter `itemType` of this provider. final class ImportArchivesFromFileFamily extends $Family
ItemType get itemType; with
$FunctionalFamilyOverride<
FutureOr<dynamic>,
(Manga?, {ItemType itemType, bool init})
> {
const ImportArchivesFromFileFamily._()
: super(
retry: null,
name: r'importArchivesFromFileProvider',
dependencies: null,
$allTransitiveDependencies: null,
isAutoDispose: true,
);
/// The parameter `init` of this provider. ImportArchivesFromFileProvider call(
bool get init; Manga? mManga, {
required ItemType itemType,
required bool init,
}) => ImportArchivesFromFileProvider._(
argument: (mManga, itemType: itemType, init: init),
from: this,
);
@override
String toString() => r'importArchivesFromFileProvider';
} }
class _ImportArchivesFromFileProviderElement
extends AutoDisposeFutureProviderElement<Object?>
with ImportArchivesFromFileRef {
_ImportArchivesFromFileProviderElement(super.provider);
@override
Manga? get mManga => (origin as ImportArchivesFromFileProvider).mManga;
@override
ItemType get itemType => (origin as ImportArchivesFromFileProvider).itemType;
@override
bool get init => (origin as ImportArchivesFromFileProvider).init;
}
// 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

@ -1,7 +1,7 @@
import 'dart:typed_data'; import 'dart:typed_data';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:isar/isar.dart'; import 'package:isar_community/isar.dart';
import 'package:mangayomi/main.dart'; import 'package:mangayomi/main.dart';
import 'package:mangayomi/models/chapter.dart'; import 'package:mangayomi/models/chapter.dart';
import 'package:mangayomi/models/download.dart'; import 'package:mangayomi/models/download.dart';

View file

@ -1,7 +1,7 @@
import 'dart:typed_data'; import 'dart:typed_data';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:isar/isar.dart'; import 'package:isar_community/isar.dart';
import 'package:mangayomi/main.dart'; import 'package:mangayomi/main.dart';
import 'package:mangayomi/models/chapter.dart'; import 'package:mangayomi/models/chapter.dart';
import 'package:mangayomi/models/download.dart'; import 'package:mangayomi/models/download.dart';

View file

@ -4,7 +4,7 @@ import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:go_router/go_router.dart'; import 'package:go_router/go_router.dart';
import 'package:google_fonts/google_fonts.dart'; import 'package:google_fonts/google_fonts.dart';
import 'package:isar/isar.dart'; import 'package:isar_community/isar.dart';
import 'package:mangayomi/eval/model/m_bridge.dart'; import 'package:mangayomi/eval/model/m_bridge.dart';
import 'package:mangayomi/main.dart'; import 'package:mangayomi/main.dart';
import 'package:mangayomi/models/chapter.dart'; import 'package:mangayomi/models/chapter.dart';
@ -121,7 +121,7 @@ class _MainScreenState extends ConsumerState<MainScreen> {
ref.read(checkForUpdateProvider(context: context)); ref.read(checkForUpdateProvider(context: context));
for (var type in ItemType.values) { for (var type in ItemType.values) {
ref.read( ref.read(
FetchItemSourcesListProvider( fetchItemSourcesListProvider(
id: null, id: null,
reFresh: false, reFresh: false,
itemType: type, itemType: type,

View file

@ -1,73 +1,72 @@
import 'package:isar/isar.dart'; // import 'package:isar_community/isar.dart';
import 'package:mangayomi/main.dart'; // import 'package:mangayomi/main.dart';
import 'package:mangayomi/models/category.dart'; // import 'package:mangayomi/models/category.dart';
import 'package:mangayomi/models/history.dart'; // import 'package:mangayomi/models/history.dart';
import 'package:mangayomi/models/manga.dart'; // import 'package:mangayomi/models/manga.dart';
import 'package:mangayomi/models/source.dart'; // import 'package:mangayomi/models/source.dart';
import 'package:mangayomi/models/track.dart'; // import 'package:mangayomi/models/track.dart';
import 'package:riverpod_annotation/riverpod_annotation.dart'; import 'package:riverpod_annotation/riverpod_annotation.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
part 'migration.g.dart'; part 'migration.g.dart';
@riverpod @riverpod
Future<void> migration(Ref ref) async { Future<void> migration(Ref ref) async {
final mangas = isar.mangas // final mangas = isar.mangas
.filter() // .filter()
.idIsNotNull() // .idIsNotNull()
.isMangaIsNotNull() // .isMangaIsNotNull()
.findAllSync(); // .findAllSync();
final categories = isar.categorys // final categories = isar.categorys
.filter() // .filter()
.idIsNotNull() // .idIsNotNull()
.forMangaIsNotNull() // .forMangaIsNotNull()
.findAllSync(); // .findAllSync();
final histories = isar.historys // final histories = isar.historys
.filter() // .filter()
.idIsNotNull() // .idIsNotNull()
.chapterIdIsNull() // .chapterIdIsNull()
.isMangaIsNotNull() // .isMangaIsNotNull()
.or() // .or()
.idIsNotNull() // .idIsNotNull()
.isMangaIsNotNull() // .isMangaIsNotNull()
.findAllSync(); // .findAllSync();
final sources = isar.sources // final sources = isar.sources
.filter() // .filter()
.idIsNotNull() // .idIsNotNull()
.isMangaIsNotNull() // .isMangaIsNotNull()
.findAllSync(); // .findAllSync();
final tracks = isar.tracks // final tracks = isar.tracks
.filter() // .filter()
.idIsNotNull() // .idIsNotNull()
.isMangaIsNotNull() // .isMangaIsNotNull()
.findAllSync(); // .findAllSync();
isar.writeTxnSync(() { // isar.writeTxnSync(() {
for (var history in histories) { // for (var history in histories) {
isar.historys.putSync( // isar.historys.putSync(
history..itemType = _convertToItemType(history.isManga!), // history..itemType = _convertToItemType(history.isManga!),
); // );
} // }
for (var source in sources) { // for (var source in sources) {
isar.sources.putSync( // isar.sources.putSync(
source..itemType = _convertToItemType(source.isManga!), // source..itemType = _convertToItemType(source.isManga!),
); // );
} // }
for (var track in tracks) { // for (var track in tracks) {
isar.tracks.putSync(track..itemType = _convertToItemType(track.isManga!)); // isar.tracks.putSync(track..itemType = _convertToItemType(track.isManga!));
} // }
for (var manga in mangas) { // for (var manga in mangas) {
isar.mangas.putSync(manga..itemType = _convertToItemType(manga.isManga!)); // isar.mangas.putSync(manga..itemType = _convertToItemType(manga.isManga!));
} // }
for (var category in categories) { // for (var category in categories) {
isar.categorys.putSync( // isar.categorys.putSync(
category..forItemType = _convertToItemType(category.forManga!), // category..forItemType = _convertToItemType(category.forManga!),
); // );
} // }
}); // });
} }
ItemType _convertToItemType(bool isManga) { // ItemType _convertToItemType(bool isManga) {
return isManga ? ItemType.manga : ItemType.anime; // return isManga ? ItemType.manga : ItemType.anime;
} // }

View file

@ -6,22 +6,38 @@ part of 'migration.dart';
// RiverpodGenerator // RiverpodGenerator
// ************************************************************************** // **************************************************************************
String _$migrationHash() => r'2a82120544e693a3162da887a3ca1b3066f3799f'; // GENERATED CODE - DO NOT MODIFY BY HAND
// ignore_for_file: type=lint, type=warning
/// See also [migration].
@ProviderFor(migration) @ProviderFor(migration)
final migrationProvider = AutoDisposeFutureProvider<void>.internal( const migrationProvider = MigrationProvider._();
migration,
name: r'migrationProvider',
debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product')
? null
: _$migrationHash,
dependencies: null,
allTransitiveDependencies: null,
);
@Deprecated('Will be removed in 3.0. Use Ref instead') final class MigrationProvider
// ignore: unused_element extends $FunctionalProvider<AsyncValue<void>, void, FutureOr<void>>
typedef MigrationRef = AutoDisposeFutureProviderRef<void>; with $FutureModifier<void>, $FutureProvider<void> {
// ignore_for_file: type=lint const MigrationProvider._()
// 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 : super(
from: null,
argument: null,
retry: null,
name: r'migrationProvider',
isAutoDispose: true,
dependencies: null,
$allTransitiveDependencies: null,
);
@override
String debugGetCreateSourceHash() => _$migrationHash();
@$internal
@override
$FutureProviderElement<void> $createElement($ProviderPointer pointer) =>
$FutureProviderElement(pointer);
@override
FutureOr<void> create(Ref ref) {
return migration(ref);
}
}
String _$migrationHash() => r'2a82120544e693a3162da887a3ca1b3066f3799f';

View file

@ -3,7 +3,6 @@ import 'package:archive/archive_io.dart';
import 'package:flutter/foundation.dart'; import 'package:flutter/foundation.dart';
import 'package:mangayomi/modules/manga/archive_reader/models/models.dart'; import 'package:mangayomi/modules/manga/archive_reader/models/models.dart';
import 'package:riverpod_annotation/riverpod_annotation.dart'; import 'package:riverpod_annotation/riverpod_annotation.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:path/path.dart' as p; import 'package:path/path.dart' as p;
part 'archive_reader_providers.g.dart'; part 'archive_reader_providers.g.dart';

View file

@ -6,565 +6,329 @@ part of 'archive_reader_providers.dart';
// RiverpodGenerator // RiverpodGenerator
// ************************************************************************** // **************************************************************************
String _$getArchivesDataFromDirectoryHash() => // GENERATED CODE - DO NOT MODIFY BY HAND
r'2a4d1a11e2b028e569ffd8a2700e4a1779bb9264'; // ignore_for_file: type=lint, type=warning
/// Copied from Dart SDK
class _SystemHash {
_SystemHash._();
static int combine(int hash, int value) {
// ignore: parameter_assignments
hash = 0x1fffffff & (hash + value);
// ignore: parameter_assignments
hash = 0x1fffffff & (hash + ((0x0007ffff & hash) << 10));
return hash ^ (hash >> 6);
}
static int finish(int hash) {
// ignore: parameter_assignments
hash = 0x1fffffff & (hash + ((0x03ffffff & hash) << 3));
// ignore: parameter_assignments
hash = hash ^ (hash >> 11);
return 0x1fffffff & (hash + ((0x00003fff & hash) << 15));
}
}
/// See also [getArchivesDataFromDirectory].
@ProviderFor(getArchivesDataFromDirectory) @ProviderFor(getArchivesDataFromDirectory)
const getArchivesDataFromDirectoryProvider = const getArchivesDataFromDirectoryProvider =
GetArchivesDataFromDirectoryFamily(); GetArchivesDataFromDirectoryFamily._();
/// See also [getArchivesDataFromDirectory]. final class GetArchivesDataFromDirectoryProvider
class GetArchivesDataFromDirectoryFamily
extends extends
Family< $FunctionalProvider<
AsyncValue<List<(String, LocalExtensionType, Uint8List, String)>> AsyncValue<List<(String, LocalExtensionType, Uint8List, String)>>,
> { List<(String, LocalExtensionType, Uint8List, String)>,
/// See also [getArchivesDataFromDirectory]. FutureOr<List<(String, LocalExtensionType, Uint8List, String)>>
const GetArchivesDataFromDirectoryFamily(); >
with
/// See also [getArchivesDataFromDirectory]. $FutureModifier<List<(String, LocalExtensionType, Uint8List, String)>>,
GetArchivesDataFromDirectoryProvider call(String path) { $FutureProvider<List<(String, LocalExtensionType, Uint8List, String)>> {
return GetArchivesDataFromDirectoryProvider(path); const GetArchivesDataFromDirectoryProvider._({
} required GetArchivesDataFromDirectoryFamily super.from,
required String super.argument,
}) : super(
retry: null,
name: r'getArchivesDataFromDirectoryProvider',
isAutoDispose: true,
dependencies: null,
$allTransitiveDependencies: null,
);
@override @override
GetArchivesDataFromDirectoryProvider getProviderOverride( String debugGetCreateSourceHash() => _$getArchivesDataFromDirectoryHash();
covariant GetArchivesDataFromDirectoryProvider provider,
@override
String toString() {
return r'getArchivesDataFromDirectoryProvider'
''
'($argument)';
}
@$internal
@override
$FutureProviderElement<List<(String, LocalExtensionType, Uint8List, String)>>
$createElement($ProviderPointer pointer) => $FutureProviderElement(pointer);
@override
FutureOr<List<(String, LocalExtensionType, Uint8List, String)>> create(
Ref ref,
) { ) {
return call(provider.path); final argument = this.argument as String;
} return getArchivesDataFromDirectory(ref, argument);
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'getArchivesDataFromDirectoryProvider';
}
/// See also [getArchivesDataFromDirectory].
class GetArchivesDataFromDirectoryProvider
extends
AutoDisposeFutureProvider<
List<(String, LocalExtensionType, Uint8List, String)>
> {
/// See also [getArchivesDataFromDirectory].
GetArchivesDataFromDirectoryProvider(String path)
: this._internal(
(ref) => getArchivesDataFromDirectory(
ref as GetArchivesDataFromDirectoryRef,
path,
),
from: getArchivesDataFromDirectoryProvider,
name: r'getArchivesDataFromDirectoryProvider',
debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product')
? null
: _$getArchivesDataFromDirectoryHash,
dependencies: GetArchivesDataFromDirectoryFamily._dependencies,
allTransitiveDependencies:
GetArchivesDataFromDirectoryFamily._allTransitiveDependencies,
path: path,
);
GetArchivesDataFromDirectoryProvider._internal(
super._createNotifier, {
required super.name,
required super.dependencies,
required super.allTransitiveDependencies,
required super.debugGetCreateSourceHash,
required super.from,
required this.path,
}) : super.internal();
final String path;
@override
Override overrideWith(
FutureOr<List<(String, LocalExtensionType, Uint8List, String)>> Function(
GetArchivesDataFromDirectoryRef provider,
)
create,
) {
return ProviderOverride(
origin: this,
override: GetArchivesDataFromDirectoryProvider._internal(
(ref) => create(ref as GetArchivesDataFromDirectoryRef),
from: from,
name: null,
dependencies: null,
allTransitiveDependencies: null,
debugGetCreateSourceHash: null,
path: path,
),
);
}
@override
AutoDisposeFutureProviderElement<
List<(String, LocalExtensionType, Uint8List, String)>
>
createElement() {
return _GetArchivesDataFromDirectoryProviderElement(this);
} }
@override @override
bool operator ==(Object other) { bool operator ==(Object other) {
return other is GetArchivesDataFromDirectoryProvider && other.path == path; return other is GetArchivesDataFromDirectoryProvider &&
other.argument == argument;
} }
@override @override
int get hashCode { int get hashCode {
var hash = _SystemHash.combine(0, runtimeType.hashCode); return argument.hashCode;
hash = _SystemHash.combine(hash, path.hashCode);
return _SystemHash.finish(hash);
} }
} }
@Deprecated('Will be removed in 3.0. Use Ref instead') String _$getArchivesDataFromDirectoryHash() =>
// ignore: unused_element r'2a4d1a11e2b028e569ffd8a2700e4a1779bb9264';
mixin GetArchivesDataFromDirectoryRef
on
AutoDisposeFutureProviderRef<
List<(String, LocalExtensionType, Uint8List, String)>
> {
/// The parameter `path` of this provider.
String get path;
}
class _GetArchivesDataFromDirectoryProviderElement final class GetArchivesDataFromDirectoryFamily extends $Family
extends with
AutoDisposeFutureProviderElement< $FunctionalFamilyOverride<
List<(String, LocalExtensionType, Uint8List, String)> FutureOr<List<(String, LocalExtensionType, Uint8List, String)>>,
> String
with GetArchivesDataFromDirectoryRef { > {
_GetArchivesDataFromDirectoryProviderElement(super.provider); const GetArchivesDataFromDirectoryFamily._()
: super(
retry: null,
name: r'getArchivesDataFromDirectoryProvider',
dependencies: null,
$allTransitiveDependencies: null,
isAutoDispose: true,
);
GetArchivesDataFromDirectoryProvider call(String path) =>
GetArchivesDataFromDirectoryProvider._(argument: path, from: this);
@override @override
String get path => (origin as GetArchivesDataFromDirectoryProvider).path; String toString() => r'getArchivesDataFromDirectoryProvider';
}
@ProviderFor(getArchiveDataFromDirectory)
const getArchiveDataFromDirectoryProvider =
GetArchiveDataFromDirectoryFamily._();
final class GetArchiveDataFromDirectoryProvider
extends
$FunctionalProvider<
AsyncValue<List<LocalArchive>>,
List<LocalArchive>,
FutureOr<List<LocalArchive>>
>
with
$FutureModifier<List<LocalArchive>>,
$FutureProvider<List<LocalArchive>> {
const GetArchiveDataFromDirectoryProvider._({
required GetArchiveDataFromDirectoryFamily super.from,
required String super.argument,
}) : super(
retry: null,
name: r'getArchiveDataFromDirectoryProvider',
isAutoDispose: true,
dependencies: null,
$allTransitiveDependencies: null,
);
@override
String debugGetCreateSourceHash() => _$getArchiveDataFromDirectoryHash();
@override
String toString() {
return r'getArchiveDataFromDirectoryProvider'
''
'($argument)';
}
@$internal
@override
$FutureProviderElement<List<LocalArchive>> $createElement(
$ProviderPointer pointer,
) => $FutureProviderElement(pointer);
@override
FutureOr<List<LocalArchive>> create(Ref ref) {
final argument = this.argument as String;
return getArchiveDataFromDirectory(ref, argument);
}
@override
bool operator ==(Object other) {
return other is GetArchiveDataFromDirectoryProvider &&
other.argument == argument;
}
@override
int get hashCode {
return argument.hashCode;
}
} }
String _$getArchiveDataFromDirectoryHash() => String _$getArchiveDataFromDirectoryHash() =>
r'49aa47895feafd9fa0c4f20e25d7674a3d54b212'; r'49aa47895feafd9fa0c4f20e25d7674a3d54b212';
/// See also [getArchiveDataFromDirectory]. final class GetArchiveDataFromDirectoryFamily extends $Family
@ProviderFor(getArchiveDataFromDirectory) with $FunctionalFamilyOverride<FutureOr<List<LocalArchive>>, String> {
const getArchiveDataFromDirectoryProvider = GetArchiveDataFromDirectoryFamily(); const GetArchiveDataFromDirectoryFamily._()
: super(
/// See also [getArchiveDataFromDirectory]. retry: null,
class GetArchiveDataFromDirectoryFamily
extends Family<AsyncValue<List<LocalArchive>>> {
/// See also [getArchiveDataFromDirectory].
const GetArchiveDataFromDirectoryFamily();
/// See also [getArchiveDataFromDirectory].
GetArchiveDataFromDirectoryProvider call(String path) {
return GetArchiveDataFromDirectoryProvider(path);
}
@override
GetArchiveDataFromDirectoryProvider getProviderOverride(
covariant GetArchiveDataFromDirectoryProvider provider,
) {
return call(provider.path);
}
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'getArchiveDataFromDirectoryProvider';
}
/// See also [getArchiveDataFromDirectory].
class GetArchiveDataFromDirectoryProvider
extends AutoDisposeFutureProvider<List<LocalArchive>> {
/// See also [getArchiveDataFromDirectory].
GetArchiveDataFromDirectoryProvider(String path)
: this._internal(
(ref) => getArchiveDataFromDirectory(
ref as GetArchiveDataFromDirectoryRef,
path,
),
from: getArchiveDataFromDirectoryProvider,
name: r'getArchiveDataFromDirectoryProvider', name: r'getArchiveDataFromDirectoryProvider',
debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product') dependencies: null,
? null $allTransitiveDependencies: null,
: _$getArchiveDataFromDirectoryHash, isAutoDispose: true,
dependencies: GetArchiveDataFromDirectoryFamily._dependencies,
allTransitiveDependencies:
GetArchiveDataFromDirectoryFamily._allTransitiveDependencies,
path: path,
); );
GetArchiveDataFromDirectoryProvider._internal( GetArchiveDataFromDirectoryProvider call(String path) =>
super._createNotifier, { GetArchiveDataFromDirectoryProvider._(argument: path, from: this);
required super.name,
required super.dependencies,
required super.allTransitiveDependencies,
required super.debugGetCreateSourceHash,
required super.from,
required this.path,
}) : super.internal();
final String path;
@override @override
Override overrideWith( String toString() => r'getArchiveDataFromDirectoryProvider';
FutureOr<List<LocalArchive>> Function( }
GetArchiveDataFromDirectoryRef provider,
) @ProviderFor(getArchivesDataFromFile)
create, const getArchivesDataFromFileProvider = GetArchivesDataFromFileFamily._();
) {
return ProviderOverride( final class GetArchivesDataFromFileProvider
origin: this, extends
override: GetArchiveDataFromDirectoryProvider._internal( $FunctionalProvider<
(ref) => create(ref as GetArchiveDataFromDirectoryRef), AsyncValue<(String, LocalExtensionType, Uint8List, String)>,
from: from, (String, LocalExtensionType, Uint8List, String),
name: null, FutureOr<(String, LocalExtensionType, Uint8List, String)>
dependencies: null, >
allTransitiveDependencies: null, with
debugGetCreateSourceHash: null, $FutureModifier<(String, LocalExtensionType, Uint8List, String)>,
path: path, $FutureProvider<(String, LocalExtensionType, Uint8List, String)> {
), const GetArchivesDataFromFileProvider._({
); required GetArchivesDataFromFileFamily super.from,
required String super.argument,
}) : super(
retry: null,
name: r'getArchivesDataFromFileProvider',
isAutoDispose: true,
dependencies: null,
$allTransitiveDependencies: null,
);
@override
String debugGetCreateSourceHash() => _$getArchivesDataFromFileHash();
@override
String toString() {
return r'getArchivesDataFromFileProvider'
''
'($argument)';
} }
@$internal
@override @override
AutoDisposeFutureProviderElement<List<LocalArchive>> createElement() { $FutureProviderElement<(String, LocalExtensionType, Uint8List, String)>
return _GetArchiveDataFromDirectoryProviderElement(this); $createElement($ProviderPointer pointer) => $FutureProviderElement(pointer);
@override
FutureOr<(String, LocalExtensionType, Uint8List, String)> create(Ref ref) {
final argument = this.argument as String;
return getArchivesDataFromFile(ref, argument);
} }
@override @override
bool operator ==(Object other) { bool operator ==(Object other) {
return other is GetArchiveDataFromDirectoryProvider && other.path == path; return other is GetArchivesDataFromFileProvider &&
other.argument == argument;
} }
@override @override
int get hashCode { int get hashCode {
var hash = _SystemHash.combine(0, runtimeType.hashCode); return argument.hashCode;
hash = _SystemHash.combine(hash, path.hashCode);
return _SystemHash.finish(hash);
} }
} }
@Deprecated('Will be removed in 3.0. Use Ref instead')
// ignore: unused_element
mixin GetArchiveDataFromDirectoryRef
on AutoDisposeFutureProviderRef<List<LocalArchive>> {
/// The parameter `path` of this provider.
String get path;
}
class _GetArchiveDataFromDirectoryProviderElement
extends AutoDisposeFutureProviderElement<List<LocalArchive>>
with GetArchiveDataFromDirectoryRef {
_GetArchiveDataFromDirectoryProviderElement(super.provider);
@override
String get path => (origin as GetArchiveDataFromDirectoryProvider).path;
}
String _$getArchivesDataFromFileHash() => String _$getArchivesDataFromFileHash() =>
r'79874b548614b4410c19bca5f74978ec761742c5'; r'79874b548614b4410c19bca5f74978ec761742c5';
/// See also [getArchivesDataFromFile]. final class GetArchivesDataFromFileFamily extends $Family
@ProviderFor(getArchivesDataFromFile) with
const getArchivesDataFromFileProvider = GetArchivesDataFromFileFamily(); $FunctionalFamilyOverride<
FutureOr<(String, LocalExtensionType, Uint8List, String)>,
/// See also [getArchivesDataFromFile]. String
class GetArchivesDataFromFileFamily
extends
Family<AsyncValue<(String, LocalExtensionType, Uint8List, String)>> {
/// See also [getArchivesDataFromFile].
const GetArchivesDataFromFileFamily();
/// See also [getArchivesDataFromFile].
GetArchivesDataFromFileProvider call(String path) {
return GetArchivesDataFromFileProvider(path);
}
@override
GetArchivesDataFromFileProvider getProviderOverride(
covariant GetArchivesDataFromFileProvider provider,
) {
return call(provider.path);
}
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'getArchivesDataFromFileProvider';
}
/// See also [getArchivesDataFromFile].
class GetArchivesDataFromFileProvider
extends
AutoDisposeFutureProvider<
(String, LocalExtensionType, Uint8List, String)
> { > {
/// See also [getArchivesDataFromFile]. const GetArchivesDataFromFileFamily._()
GetArchivesDataFromFileProvider(String path) : super(
: this._internal( retry: null,
(ref) =>
getArchivesDataFromFile(ref as GetArchivesDataFromFileRef, path),
from: getArchivesDataFromFileProvider,
name: r'getArchivesDataFromFileProvider', name: r'getArchivesDataFromFileProvider',
debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product') dependencies: null,
? null $allTransitiveDependencies: null,
: _$getArchivesDataFromFileHash, isAutoDispose: true,
dependencies: GetArchivesDataFromFileFamily._dependencies,
allTransitiveDependencies:
GetArchivesDataFromFileFamily._allTransitiveDependencies,
path: path,
); );
GetArchivesDataFromFileProvider._internal( GetArchivesDataFromFileProvider call(String path) =>
super._createNotifier, { GetArchivesDataFromFileProvider._(argument: path, from: this);
required super.name,
required super.dependencies,
required super.allTransitiveDependencies,
required super.debugGetCreateSourceHash,
required super.from,
required this.path,
}) : super.internal();
final String path;
@override @override
Override overrideWith( String toString() => r'getArchivesDataFromFileProvider';
FutureOr<(String, LocalExtensionType, Uint8List, String)> Function( }
GetArchivesDataFromFileRef provider,
) @ProviderFor(getArchiveDataFromFile)
create, const getArchiveDataFromFileProvider = GetArchiveDataFromFileFamily._();
) {
return ProviderOverride( final class GetArchiveDataFromFileProvider
origin: this, extends
override: GetArchivesDataFromFileProvider._internal( $FunctionalProvider<
(ref) => create(ref as GetArchivesDataFromFileRef), AsyncValue<LocalArchive>,
from: from, LocalArchive,
name: null, FutureOr<LocalArchive>
dependencies: null, >
allTransitiveDependencies: null, with $FutureModifier<LocalArchive>, $FutureProvider<LocalArchive> {
debugGetCreateSourceHash: null, const GetArchiveDataFromFileProvider._({
path: path, required GetArchiveDataFromFileFamily super.from,
), required String super.argument,
); }) : super(
retry: null,
name: r'getArchiveDataFromFileProvider',
isAutoDispose: true,
dependencies: null,
$allTransitiveDependencies: null,
);
@override
String debugGetCreateSourceHash() => _$getArchiveDataFromFileHash();
@override
String toString() {
return r'getArchiveDataFromFileProvider'
''
'($argument)';
} }
@$internal
@override @override
AutoDisposeFutureProviderElement< $FutureProviderElement<LocalArchive> $createElement(
(String, LocalExtensionType, Uint8List, String) $ProviderPointer pointer,
> ) => $FutureProviderElement(pointer);
createElement() {
return _GetArchivesDataFromFileProviderElement(this); @override
FutureOr<LocalArchive> create(Ref ref) {
final argument = this.argument as String;
return getArchiveDataFromFile(ref, argument);
} }
@override @override
bool operator ==(Object other) { bool operator ==(Object other) {
return other is GetArchivesDataFromFileProvider && other.path == path; return other is GetArchiveDataFromFileProvider &&
other.argument == argument;
} }
@override @override
int get hashCode { int get hashCode {
var hash = _SystemHash.combine(0, runtimeType.hashCode); return argument.hashCode;
hash = _SystemHash.combine(hash, path.hashCode);
return _SystemHash.finish(hash);
} }
} }
@Deprecated('Will be removed in 3.0. Use Ref instead')
// ignore: unused_element
mixin GetArchivesDataFromFileRef
on
AutoDisposeFutureProviderRef<
(String, LocalExtensionType, Uint8List, String)
> {
/// The parameter `path` of this provider.
String get path;
}
class _GetArchivesDataFromFileProviderElement
extends
AutoDisposeFutureProviderElement<
(String, LocalExtensionType, Uint8List, String)
>
with GetArchivesDataFromFileRef {
_GetArchivesDataFromFileProviderElement(super.provider);
@override
String get path => (origin as GetArchivesDataFromFileProvider).path;
}
String _$getArchiveDataFromFileHash() => String _$getArchiveDataFromFileHash() =>
r'a5d8bf8246bfa250af6a7fd3c09bba6a012e0b2d'; r'a5d8bf8246bfa250af6a7fd3c09bba6a012e0b2d';
/// See also [getArchiveDataFromFile]. final class GetArchiveDataFromFileFamily extends $Family
@ProviderFor(getArchiveDataFromFile) with $FunctionalFamilyOverride<FutureOr<LocalArchive>, String> {
const getArchiveDataFromFileProvider = GetArchiveDataFromFileFamily(); const GetArchiveDataFromFileFamily._()
: super(
/// See also [getArchiveDataFromFile]. retry: null,
class GetArchiveDataFromFileFamily extends Family<AsyncValue<LocalArchive>> {
/// See also [getArchiveDataFromFile].
const GetArchiveDataFromFileFamily();
/// See also [getArchiveDataFromFile].
GetArchiveDataFromFileProvider call(String path) {
return GetArchiveDataFromFileProvider(path);
}
@override
GetArchiveDataFromFileProvider getProviderOverride(
covariant GetArchiveDataFromFileProvider provider,
) {
return call(provider.path);
}
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'getArchiveDataFromFileProvider';
}
/// See also [getArchiveDataFromFile].
class GetArchiveDataFromFileProvider
extends AutoDisposeFutureProvider<LocalArchive> {
/// See also [getArchiveDataFromFile].
GetArchiveDataFromFileProvider(String path)
: this._internal(
(ref) => getArchiveDataFromFile(ref as GetArchiveDataFromFileRef, path),
from: getArchiveDataFromFileProvider,
name: r'getArchiveDataFromFileProvider', name: r'getArchiveDataFromFileProvider',
debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product') dependencies: null,
? null $allTransitiveDependencies: null,
: _$getArchiveDataFromFileHash, isAutoDispose: true,
dependencies: GetArchiveDataFromFileFamily._dependencies,
allTransitiveDependencies:
GetArchiveDataFromFileFamily._allTransitiveDependencies,
path: path,
); );
GetArchiveDataFromFileProvider._internal( GetArchiveDataFromFileProvider call(String path) =>
super._createNotifier, { GetArchiveDataFromFileProvider._(argument: path, from: this);
required super.name,
required super.dependencies,
required super.allTransitiveDependencies,
required super.debugGetCreateSourceHash,
required super.from,
required this.path,
}) : super.internal();
final String path;
@override @override
Override overrideWith( String toString() => r'getArchiveDataFromFileProvider';
FutureOr<LocalArchive> Function(GetArchiveDataFromFileRef provider) create,
) {
return ProviderOverride(
origin: this,
override: GetArchiveDataFromFileProvider._internal(
(ref) => create(ref as GetArchiveDataFromFileRef),
from: from,
name: null,
dependencies: null,
allTransitiveDependencies: null,
debugGetCreateSourceHash: null,
path: path,
),
);
}
@override
AutoDisposeFutureProviderElement<LocalArchive> createElement() {
return _GetArchiveDataFromFileProviderElement(this);
}
@override
bool operator ==(Object other) {
return other is GetArchiveDataFromFileProvider && other.path == path;
}
@override
int get hashCode {
var hash = _SystemHash.combine(0, runtimeType.hashCode);
hash = _SystemHash.combine(hash, path.hashCode);
return _SystemHash.finish(hash);
}
} }
@Deprecated('Will be removed in 3.0. Use Ref instead')
// ignore: unused_element
mixin GetArchiveDataFromFileRef on AutoDisposeFutureProviderRef<LocalArchive> {
/// The parameter `path` of this provider.
String get path;
}
class _GetArchiveDataFromFileProviderElement
extends AutoDisposeFutureProviderElement<LocalArchive>
with GetArchiveDataFromFileRef {
_GetArchiveDataFromFileProviderElement(super.provider);
@override
String get path => (origin as GetArchiveDataFromFileProvider).path;
}
// 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

@ -1,6 +1,6 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:isar/isar.dart'; import 'package:isar_community/isar.dart';
import 'package:mangayomi/main.dart'; import 'package:mangayomi/main.dart';
import 'package:mangayomi/models/source.dart'; import 'package:mangayomi/models/source.dart';
import 'package:mangayomi/modules/manga/detail/manga_details_view.dart'; import 'package:mangayomi/modules/manga/detail/manga_details_view.dart';
@ -24,7 +24,7 @@ class _MangaReaderDetailState extends ConsumerState<MangaReaderDetail> {
_init(); _init();
} }
_init() async { Future<void> _init() async {
await Future.delayed(const Duration(milliseconds: 100)); await Future.delayed(const Duration(milliseconds: 100));
await ref.read( await ref.read(
updateMangaDetailProvider(mangaId: widget.mangaId, isInit: true).future, updateMangaDetailProvider(mangaId: widget.mangaId, isInit: true).future,

View file

@ -7,7 +7,7 @@ import 'package:flutter/material.dart';
import 'package:flutter/rendering.dart'; import 'package:flutter/rendering.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:go_router/go_router.dart'; import 'package:go_router/go_router.dart';
import 'package:isar/isar.dart'; import 'package:isar_community/isar.dart';
import 'package:mangayomi/eval/model/m_bridge.dart'; import 'package:mangayomi/eval/model/m_bridge.dart';
import 'package:mangayomi/main.dart'; import 'package:mangayomi/main.dart';
import 'package:mangayomi/models/category.dart'; import 'package:mangayomi/models/category.dart';
@ -35,6 +35,7 @@ import 'package:mangayomi/providers/l10n_providers.dart';
import 'package:mangayomi/providers/storage_provider.dart'; import 'package:mangayomi/providers/storage_provider.dart';
import 'package:mangayomi/services/http/m_client.dart'; import 'package:mangayomi/services/http/m_client.dart';
import 'package:mangayomi/utils/extensions/string_extensions.dart'; import 'package:mangayomi/utils/extensions/string_extensions.dart';
import 'package:mangayomi/utils/riverpod.dart';
import 'package:mangayomi/utils/utils.dart'; import 'package:mangayomi/utils/utils.dart';
import 'package:mangayomi/utils/cached_network.dart'; import 'package:mangayomi/utils/cached_network.dart';
import 'package:mangayomi/utils/extensions/build_context_extensions.dart'; import 'package:mangayomi/utils/extensions/build_context_extensions.dart';
@ -100,7 +101,7 @@ class _MangaDetailViewState extends ConsumerState<MangaDetailView>
super.dispose(); super.dispose();
} }
final offetProvider = StateProvider((ref) => 0.0); final offetProvider = StateProvider(() => 0.0);
bool _expanded = false; bool _expanded = false;
late final ScrollController _scrollController; late final ScrollController _scrollController;
late final isLocalArchive = widget.manga!.isLocalArchive ?? false; late final isLocalArchive = widget.manga!.isLocalArchive ?? false;
@ -2139,7 +2140,7 @@ class _MangaDetailViewState extends ConsumerState<MangaDetailView>
), ),
onPressed: () async { onPressed: () async {
final trackSearch = final trackSearch =
await trackersSearchraggableMenu( await trackersSearchDraggableMenu(
context, context,
itemType: itemType:
widget.manga!.itemType, widget.manga!.itemType,
@ -2502,7 +2503,7 @@ class _MangaDetailViewState extends ConsumerState<MangaDetailView>
text: l10nLocalizations(context)!.add_tracker, text: l10nLocalizations(context)!.add_tracker,
onTap: () async { onTap: () async {
final trackSearch = final trackSearch =
await trackersSearchraggableMenu( await trackersSearchDraggableMenu(
context, context,
itemType: widget.manga!.itemType, itemType: widget.manga!.itemType,
track: Track( track: Track(
@ -2518,6 +2519,7 @@ class _MangaDetailViewState extends ConsumerState<MangaDetailView>
trackStateProvider( trackStateProvider(
track: null, track: null,
itemType: widget.manga!.itemType, itemType: widget.manga!.itemType,
widgetRef: ref,
).notifier, ).notifier,
) )
.setTrackSearch( .setTrackSearch(

View file

@ -1,6 +1,6 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:isar/isar.dart'; import 'package:isar_community/isar.dart';
import 'package:mangayomi/main.dart'; import 'package:mangayomi/main.dart';
import 'package:mangayomi/models/category.dart'; import 'package:mangayomi/models/category.dart';
import 'package:mangayomi/models/chapter.dart'; import 'package:mangayomi/models/chapter.dart';

View file

@ -1,9 +1,8 @@
import 'package:isar/isar.dart'; import 'package:isar_community/isar.dart';
import 'package:mangayomi/main.dart'; import 'package:mangayomi/main.dart';
import 'package:mangayomi/models/chapter.dart'; import 'package:mangayomi/models/chapter.dart';
import 'package:mangayomi/models/manga.dart'; import 'package:mangayomi/models/manga.dart';
import 'package:riverpod_annotation/riverpod_annotation.dart'; import 'package:riverpod_annotation/riverpod_annotation.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
part 'isar_providers.g.dart'; part 'isar_providers.g.dart';
@riverpod @riverpod

View file

@ -6,272 +6,150 @@ part of 'isar_providers.dart';
// RiverpodGenerator // RiverpodGenerator
// ************************************************************************** // **************************************************************************
String _$getMangaDetailStreamHash() => // GENERATED CODE - DO NOT MODIFY BY HAND
r'6e7c5dc20ee7d32a091e884ac6980e191f698c8c'; // ignore_for_file: type=lint, type=warning
/// Copied from Dart SDK
class _SystemHash {
_SystemHash._();
static int combine(int hash, int value) {
// ignore: parameter_assignments
hash = 0x1fffffff & (hash + value);
// ignore: parameter_assignments
hash = 0x1fffffff & (hash + ((0x0007ffff & hash) << 10));
return hash ^ (hash >> 6);
}
static int finish(int hash) {
// ignore: parameter_assignments
hash = 0x1fffffff & (hash + ((0x03ffffff & hash) << 3));
// ignore: parameter_assignments
hash = hash ^ (hash >> 11);
return 0x1fffffff & (hash + ((0x00003fff & hash) << 15));
}
}
/// See also [getMangaDetailStream].
@ProviderFor(getMangaDetailStream) @ProviderFor(getMangaDetailStream)
const getMangaDetailStreamProvider = GetMangaDetailStreamFamily(); const getMangaDetailStreamProvider = GetMangaDetailStreamFamily._();
/// See also [getMangaDetailStream]. final class GetMangaDetailStreamProvider
class GetMangaDetailStreamFamily extends Family<AsyncValue<Manga?>> { extends $FunctionalProvider<AsyncValue<Manga?>, Manga?, Stream<Manga?>>
/// See also [getMangaDetailStream]. with $FutureModifier<Manga?>, $StreamProvider<Manga?> {
const GetMangaDetailStreamFamily(); const GetMangaDetailStreamProvider._({
required GetMangaDetailStreamFamily super.from,
required int super.argument,
}) : super(
retry: null,
name: r'getMangaDetailStreamProvider',
isAutoDispose: true,
dependencies: null,
$allTransitiveDependencies: null,
);
/// See also [getMangaDetailStream]. @override
GetMangaDetailStreamProvider call({required int mangaId}) { String debugGetCreateSourceHash() => _$getMangaDetailStreamHash();
return GetMangaDetailStreamProvider(mangaId: mangaId);
@override
String toString() {
return r'getMangaDetailStreamProvider'
''
'($argument)';
} }
@$internal
@override @override
GetMangaDetailStreamProvider getProviderOverride( $StreamProviderElement<Manga?> $createElement($ProviderPointer pointer) =>
covariant GetMangaDetailStreamProvider provider, $StreamProviderElement(pointer);
) {
return call(mangaId: provider.mangaId);
}
static const Iterable<ProviderOrFamily>? _dependencies = null;
@override @override
Iterable<ProviderOrFamily>? get dependencies => _dependencies; Stream<Manga?> create(Ref ref) {
final argument = this.argument as int;
static const Iterable<ProviderOrFamily>? _allTransitiveDependencies = null; return getMangaDetailStream(ref, mangaId: argument);
@override
Iterable<ProviderOrFamily>? get allTransitiveDependencies =>
_allTransitiveDependencies;
@override
String? get name => r'getMangaDetailStreamProvider';
}
/// See also [getMangaDetailStream].
class GetMangaDetailStreamProvider extends AutoDisposeStreamProvider<Manga?> {
/// See also [getMangaDetailStream].
GetMangaDetailStreamProvider({required int mangaId})
: this._internal(
(ref) => getMangaDetailStream(
ref as GetMangaDetailStreamRef,
mangaId: mangaId,
),
from: getMangaDetailStreamProvider,
name: r'getMangaDetailStreamProvider',
debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product')
? null
: _$getMangaDetailStreamHash,
dependencies: GetMangaDetailStreamFamily._dependencies,
allTransitiveDependencies:
GetMangaDetailStreamFamily._allTransitiveDependencies,
mangaId: mangaId,
);
GetMangaDetailStreamProvider._internal(
super._createNotifier, {
required super.name,
required super.dependencies,
required super.allTransitiveDependencies,
required super.debugGetCreateSourceHash,
required super.from,
required this.mangaId,
}) : super.internal();
final int mangaId;
@override
Override overrideWith(
Stream<Manga?> Function(GetMangaDetailStreamRef provider) create,
) {
return ProviderOverride(
origin: this,
override: GetMangaDetailStreamProvider._internal(
(ref) => create(ref as GetMangaDetailStreamRef),
from: from,
name: null,
dependencies: null,
allTransitiveDependencies: null,
debugGetCreateSourceHash: null,
mangaId: mangaId,
),
);
}
@override
AutoDisposeStreamProviderElement<Manga?> createElement() {
return _GetMangaDetailStreamProviderElement(this);
} }
@override @override
bool operator ==(Object other) { bool operator ==(Object other) {
return other is GetMangaDetailStreamProvider && other.mangaId == mangaId; return other is GetMangaDetailStreamProvider && other.argument == argument;
} }
@override @override
int get hashCode { int get hashCode {
var hash = _SystemHash.combine(0, runtimeType.hashCode); return argument.hashCode;
hash = _SystemHash.combine(hash, mangaId.hashCode);
return _SystemHash.finish(hash);
} }
} }
@Deprecated('Will be removed in 3.0. Use Ref instead') String _$getMangaDetailStreamHash() =>
// ignore: unused_element r'6e7c5dc20ee7d32a091e884ac6980e191f698c8c';
mixin GetMangaDetailStreamRef on AutoDisposeStreamProviderRef<Manga?> {
/// The parameter `mangaId` of this provider.
int get mangaId;
}
class _GetMangaDetailStreamProviderElement final class GetMangaDetailStreamFamily extends $Family
extends AutoDisposeStreamProviderElement<Manga?> with $FunctionalFamilyOverride<Stream<Manga?>, int> {
with GetMangaDetailStreamRef { const GetMangaDetailStreamFamily._()
_GetMangaDetailStreamProviderElement(super.provider); : super(
retry: null,
name: r'getMangaDetailStreamProvider',
dependencies: null,
$allTransitiveDependencies: null,
isAutoDispose: true,
);
GetMangaDetailStreamProvider call({required int mangaId}) =>
GetMangaDetailStreamProvider._(argument: mangaId, from: this);
@override @override
int get mangaId => (origin as GetMangaDetailStreamProvider).mangaId; String toString() => r'getMangaDetailStreamProvider';
}
@ProviderFor(getChaptersStream)
const getChaptersStreamProvider = GetChaptersStreamFamily._();
final class GetChaptersStreamProvider
extends
$FunctionalProvider<
AsyncValue<List<Chapter>>,
List<Chapter>,
Stream<List<Chapter>>
>
with $FutureModifier<List<Chapter>>, $StreamProvider<List<Chapter>> {
const GetChaptersStreamProvider._({
required GetChaptersStreamFamily super.from,
required int super.argument,
}) : super(
retry: null,
name: r'getChaptersStreamProvider',
isAutoDispose: true,
dependencies: null,
$allTransitiveDependencies: null,
);
@override
String debugGetCreateSourceHash() => _$getChaptersStreamHash();
@override
String toString() {
return r'getChaptersStreamProvider'
''
'($argument)';
}
@$internal
@override
$StreamProviderElement<List<Chapter>> $createElement(
$ProviderPointer pointer,
) => $StreamProviderElement(pointer);
@override
Stream<List<Chapter>> create(Ref ref) {
final argument = this.argument as int;
return getChaptersStream(ref, mangaId: argument);
}
@override
bool operator ==(Object other) {
return other is GetChaptersStreamProvider && other.argument == argument;
}
@override
int get hashCode {
return argument.hashCode;
}
} }
String _$getChaptersStreamHash() => r'0f03db54c5a639c4356a81e4bad50fa8a077ceac'; String _$getChaptersStreamHash() => r'0f03db54c5a639c4356a81e4bad50fa8a077ceac';
/// See also [getChaptersStream]. final class GetChaptersStreamFamily extends $Family
@ProviderFor(getChaptersStream) with $FunctionalFamilyOverride<Stream<List<Chapter>>, int> {
const getChaptersStreamProvider = GetChaptersStreamFamily(); const GetChaptersStreamFamily._()
: super(
/// See also [getChaptersStream]. retry: null,
class GetChaptersStreamFamily extends Family<AsyncValue<List<Chapter>>> {
/// See also [getChaptersStream].
const GetChaptersStreamFamily();
/// See also [getChaptersStream].
GetChaptersStreamProvider call({required int mangaId}) {
return GetChaptersStreamProvider(mangaId: mangaId);
}
@override
GetChaptersStreamProvider getProviderOverride(
covariant GetChaptersStreamProvider provider,
) {
return call(mangaId: provider.mangaId);
}
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'getChaptersStreamProvider';
}
/// See also [getChaptersStream].
class GetChaptersStreamProvider
extends AutoDisposeStreamProvider<List<Chapter>> {
/// See also [getChaptersStream].
GetChaptersStreamProvider({required int mangaId})
: this._internal(
(ref) =>
getChaptersStream(ref as GetChaptersStreamRef, mangaId: mangaId),
from: getChaptersStreamProvider,
name: r'getChaptersStreamProvider', name: r'getChaptersStreamProvider',
debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product') dependencies: null,
? null $allTransitiveDependencies: null,
: _$getChaptersStreamHash, isAutoDispose: true,
dependencies: GetChaptersStreamFamily._dependencies,
allTransitiveDependencies:
GetChaptersStreamFamily._allTransitiveDependencies,
mangaId: mangaId,
); );
GetChaptersStreamProvider._internal( GetChaptersStreamProvider call({required int mangaId}) =>
super._createNotifier, { GetChaptersStreamProvider._(argument: mangaId, from: this);
required super.name,
required super.dependencies,
required super.allTransitiveDependencies,
required super.debugGetCreateSourceHash,
required super.from,
required this.mangaId,
}) : super.internal();
final int mangaId;
@override @override
Override overrideWith( String toString() => r'getChaptersStreamProvider';
Stream<List<Chapter>> Function(GetChaptersStreamRef provider) create,
) {
return ProviderOverride(
origin: this,
override: GetChaptersStreamProvider._internal(
(ref) => create(ref as GetChaptersStreamRef),
from: from,
name: null,
dependencies: null,
allTransitiveDependencies: null,
debugGetCreateSourceHash: null,
mangaId: mangaId,
),
);
}
@override
AutoDisposeStreamProviderElement<List<Chapter>> createElement() {
return _GetChaptersStreamProviderElement(this);
}
@override
bool operator ==(Object other) {
return other is GetChaptersStreamProvider && other.mangaId == mangaId;
}
@override
int get hashCode {
var hash = _SystemHash.combine(0, runtimeType.hashCode);
hash = _SystemHash.combine(hash, mangaId.hashCode);
return _SystemHash.finish(hash);
}
} }
@Deprecated('Will be removed in 3.0. Use Ref instead')
// ignore: unused_element
mixin GetChaptersStreamRef on AutoDisposeStreamProviderRef<List<Chapter>> {
/// The parameter `mangaId` of this provider.
int get mangaId;
}
class _GetChaptersStreamProviderElement
extends AutoDisposeStreamProviderElement<List<Chapter>>
with GetChaptersStreamRef {
_GetChaptersStreamProviderElement(super.provider);
@override
int get mangaId => (origin as GetChaptersStreamProvider).mangaId;
}
// 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

@ -1,4 +1,4 @@
import 'package:isar/isar.dart'; import 'package:isar_community/isar.dart';
import 'package:mangayomi/main.dart'; import 'package:mangayomi/main.dart';
import 'package:mangayomi/models/chapter.dart'; import 'package:mangayomi/models/chapter.dart';
import 'package:mangayomi/models/download.dart'; import 'package:mangayomi/models/download.dart';
@ -307,7 +307,7 @@ class ChapterSetIsBookmarkState extends _$ChapterSetIsBookmarkState {
@override @override
void build({required Manga manga}) {} void build({required Manga manga}) {}
set() { void set() {
final allChapters = <Chapter>[]; final allChapters = <Chapter>[];
final chapters = ref.watch(chaptersListStateProvider); final chapters = ref.watch(chaptersListStateProvider);
for (var chapter in chapters) { for (var chapter in chapters) {
@ -327,7 +327,7 @@ class ChapterSetIsReadState extends _$ChapterSetIsReadState {
@override @override
void build({required Manga manga}) {} void build({required Manga manga}) {}
set() { void set() {
final allChapters = <Chapter>[]; final allChapters = <Chapter>[];
final chapters = ref.watch(chaptersListStateProvider); final chapters = ref.watch(chaptersListStateProvider);
for (var chapter in chapters) { for (var chapter in chapters) {
@ -347,7 +347,7 @@ class ChapterSetDownloadState extends _$ChapterSetDownloadState {
@override @override
void build({required Manga manga}) {} void build({required Manga manga}) {}
set() { void set() {
ref.read(isLongPressedStateProvider.notifier).update(false); ref.read(isLongPressedStateProvider.notifier).update(false);
isar.txnSync(() { isar.txnSync(() {
for (var chapter in ref.watch(chaptersListStateProvider)) { for (var chapter in ref.watch(chaptersListStateProvider)) {
@ -372,7 +372,7 @@ class ChaptersListttState extends _$ChaptersListttState {
return []; return [];
} }
set(List<Chapter> chapters) async { void set(List<Chapter> chapters) async {
await Future.delayed(const Duration(milliseconds: 10)); await Future.delayed(const Duration(milliseconds: 10));
state = chapters; state = chapters;
} }
@ -431,7 +431,7 @@ class ScanlatorsFilterState extends _$ScanlatorsFilterState {
return filter.isEmpty ? null : filter.first.scanlators; return filter.isEmpty ? null : filter.first.scanlators;
} }
setFilteredList(String scanlator) { void setFilteredList(String scanlator) {
List<String> scanlatorFilteredList = []; List<String> scanlatorFilteredList = [];
for (var a in state.$3) { for (var a in state.$3) {
scanlatorFilteredList.add(a); scanlatorFilteredList.add(a);

File diff suppressed because it is too large Load diff

View file

@ -1,3 +1,4 @@
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:mangayomi/main.dart'; import 'package:mangayomi/main.dart';
import 'package:mangayomi/models/manga.dart'; import 'package:mangayomi/models/manga.dart';
import 'package:mangayomi/models/settings.dart'; import 'package:mangayomi/models/settings.dart';
@ -17,29 +18,57 @@ part 'track_state_providers.g.dart';
@riverpod @riverpod
class TrackState extends _$TrackState { class TrackState extends _$TrackState {
@override @override
Track build({Track? track, required ItemType? itemType}) { Track build({
Track? track,
required ItemType? itemType,
required WidgetRef widgetRef,
}) {
return track!; return track!;
} }
BaseTracker getNotifier(int syncId) { BaseTracker getNotifier(int syncId) {
return switch (syncId) { return switch (syncId) {
1 => ref.read( 1 => widgetRef.read(
myAnimeListProvider(syncId: syncId, itemType: itemType).notifier, myAnimeListProvider(
syncId: syncId,
itemType: itemType,
widgetRef: widgetRef,
).notifier,
), ),
2 => ref.read( 2 => widgetRef.read(
anilistProvider(syncId: syncId, itemType: itemType).notifier, anilistProvider(
syncId: syncId,
itemType: itemType,
widgetRef: widgetRef,
).notifier,
), ),
3 => ref.read(kitsuProvider(syncId: syncId, itemType: itemType).notifier), 3 => widgetRef.read(
4 => ref.read(simklProvider(syncId: syncId, itemType: itemType).notifier), kitsuProvider(
5 => ref.read( syncId: syncId,
traktTvProvider(syncId: syncId, itemType: itemType).notifier, itemType: itemType,
widgetRef: widgetRef,
).notifier,
),
4 => widgetRef.read(
simklProvider(
syncId: syncId,
itemType: itemType,
widgetRef: widgetRef,
).notifier,
),
5 => widgetRef.read(
traktTvProvider(
syncId: syncId,
itemType: itemType,
widgetRef: widgetRef,
).notifier,
), ),
_ => throw Exception('Unsupported syncId: $syncId'), _ => throw Exception('Unsupported syncId: $syncId'),
}; };
} }
void writeBack(Track t) { void writeBack(Track t) {
ref widgetRef
.read(tracksProvider(syncId: t.syncId!).notifier) .read(tracksProvider(syncId: t.syncId!).notifier)
.updateTrackManga(t, itemType!); .updateTrackManga(t, itemType!);
} }

View file

@ -6,192 +6,176 @@ part of 'track_state_providers.dart';
// RiverpodGenerator // RiverpodGenerator
// ************************************************************************** // **************************************************************************
String _$trackStateHash() => r'19fcc38b559996509aa71645de9531bc4b2d4205'; // GENERATED CODE - DO NOT MODIFY BY HAND
// ignore_for_file: type=lint, type=warning
/// Copied from Dart SDK
class _SystemHash {
_SystemHash._();
static int combine(int hash, int value) {
// ignore: parameter_assignments
hash = 0x1fffffff & (hash + value);
// ignore: parameter_assignments
hash = 0x1fffffff & (hash + ((0x0007ffff & hash) << 10));
return hash ^ (hash >> 6);
}
static int finish(int hash) {
// ignore: parameter_assignments
hash = 0x1fffffff & (hash + ((0x03ffffff & hash) << 3));
// ignore: parameter_assignments
hash = hash ^ (hash >> 11);
return 0x1fffffff & (hash + ((0x00003fff & hash) << 15));
}
}
abstract class _$TrackState extends BuildlessAutoDisposeNotifier<Track> {
late final Track? track;
late final ItemType? itemType;
Track build({Track? track, required ItemType? itemType});
}
/// See also [TrackState].
@ProviderFor(TrackState) @ProviderFor(TrackState)
const trackStateProvider = TrackStateFamily(); const trackStateProvider = TrackStateFamily._();
/// See also [TrackState]. final class TrackStateProvider extends $NotifierProvider<TrackState, Track> {
class TrackStateFamily extends Family<Track> { const TrackStateProvider._({
/// See also [TrackState]. required TrackStateFamily super.from,
const TrackStateFamily(); required ({Track? track, ItemType? itemType, WidgetRef widgetRef})
super.argument,
}) : super(
retry: null,
name: r'trackStateProvider',
isAutoDispose: true,
dependencies: null,
$allTransitiveDependencies: null,
);
/// See also [TrackState]. @override
TrackStateProvider call({Track? track, required ItemType? itemType}) { String debugGetCreateSourceHash() => _$trackStateHash();
return TrackStateProvider(track: track, itemType: itemType);
@override
String toString() {
return r'trackStateProvider'
''
'$argument';
} }
@$internal
@override @override
TrackStateProvider getProviderOverride( TrackState create() => TrackState();
covariant TrackStateProvider provider,
) {
return call(track: provider.track, itemType: provider.itemType);
}
static const Iterable<ProviderOrFamily>? _dependencies = null; /// {@macro riverpod.override_with_value}
Override overrideWithValue(Track value) {
@override return $ProviderOverride(
Iterable<ProviderOrFamily>? get dependencies => _dependencies;
static const Iterable<ProviderOrFamily>? _allTransitiveDependencies = null;
@override
Iterable<ProviderOrFamily>? get allTransitiveDependencies =>
_allTransitiveDependencies;
@override
String? get name => r'trackStateProvider';
}
/// See also [TrackState].
class TrackStateProvider
extends AutoDisposeNotifierProviderImpl<TrackState, Track> {
/// See also [TrackState].
TrackStateProvider({Track? track, required ItemType? itemType})
: this._internal(
() => TrackState()
..track = track
..itemType = itemType,
from: trackStateProvider,
name: r'trackStateProvider',
debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product')
? null
: _$trackStateHash,
dependencies: TrackStateFamily._dependencies,
allTransitiveDependencies: TrackStateFamily._allTransitiveDependencies,
track: track,
itemType: itemType,
);
TrackStateProvider._internal(
super._createNotifier, {
required super.name,
required super.dependencies,
required super.allTransitiveDependencies,
required super.debugGetCreateSourceHash,
required super.from,
required this.track,
required this.itemType,
}) : super.internal();
final Track? track;
final ItemType? itemType;
@override
Track runNotifierBuild(covariant TrackState notifier) {
return notifier.build(track: track, itemType: itemType);
}
@override
Override overrideWith(TrackState Function() create) {
return ProviderOverride(
origin: this, origin: this,
override: TrackStateProvider._internal( providerOverride: $SyncValueProvider<Track>(value),
() => create()
..track = track
..itemType = itemType,
from: from,
name: null,
dependencies: null,
allTransitiveDependencies: null,
debugGetCreateSourceHash: null,
track: track,
itemType: itemType,
),
); );
} }
@override
AutoDisposeNotifierProviderElement<TrackState, Track> createElement() {
return _TrackStateProviderElement(this);
}
@override @override
bool operator ==(Object other) { bool operator ==(Object other) {
return other is TrackStateProvider && return other is TrackStateProvider && other.argument == argument;
other.track == track &&
other.itemType == itemType;
} }
@override @override
int get hashCode { int get hashCode {
var hash = _SystemHash.combine(0, runtimeType.hashCode); return argument.hashCode;
hash = _SystemHash.combine(hash, track.hashCode);
hash = _SystemHash.combine(hash, itemType.hashCode);
return _SystemHash.finish(hash);
} }
} }
@Deprecated('Will be removed in 3.0. Use Ref instead') String _$trackStateHash() => r'cd19c5662338c7f0e508cf2f99e89c21f146d664';
// ignore: unused_element
mixin TrackStateRef on AutoDisposeNotifierProviderRef<Track> {
/// The parameter `track` of this provider.
Track? get track;
/// The parameter `itemType` of this provider. final class TrackStateFamily extends $Family
ItemType? get itemType; with
$ClassFamilyOverride<
TrackState,
Track,
Track,
Track,
({Track? track, ItemType? itemType, WidgetRef widgetRef})
> {
const TrackStateFamily._()
: super(
retry: null,
name: r'trackStateProvider',
dependencies: null,
$allTransitiveDependencies: null,
isAutoDispose: true,
);
TrackStateProvider call({
Track? track,
required ItemType? itemType,
required WidgetRef widgetRef,
}) => TrackStateProvider._(
argument: (track: track, itemType: itemType, widgetRef: widgetRef),
from: this,
);
@override
String toString() => r'trackStateProvider';
} }
class _TrackStateProviderElement abstract class _$TrackState extends $Notifier<Track> {
extends AutoDisposeNotifierProviderElement<TrackState, Track> late final _$args =
with TrackStateRef { ref.$arg as ({Track? track, ItemType? itemType, WidgetRef widgetRef});
_TrackStateProviderElement(super.provider); Track? get track => _$args.track;
ItemType? get itemType => _$args.itemType;
WidgetRef get widgetRef => _$args.widgetRef;
Track build({
Track? track,
required ItemType? itemType,
required WidgetRef widgetRef,
});
@$mustCallSuper
@override
void runBuild() {
final created = build(
track: _$args.track,
itemType: _$args.itemType,
widgetRef: _$args.widgetRef,
);
final ref = this.ref as $Ref<Track, Track>;
final element =
ref.element
as $ClassProviderElement<
AnyNotifier<Track, Track>,
Track,
Object?,
Object?
>;
element.handleValue(ref, created);
}
}
@ProviderFor(LastTrackerLibraryLocationState)
const lastTrackerLibraryLocationStateProvider =
LastTrackerLibraryLocationStateProvider._();
final class LastTrackerLibraryLocationStateProvider
extends $NotifierProvider<LastTrackerLibraryLocationState, (int, bool)> {
const LastTrackerLibraryLocationStateProvider._()
: super(
from: null,
argument: null,
retry: null,
name: r'lastTrackerLibraryLocationStateProvider',
isAutoDispose: true,
dependencies: null,
$allTransitiveDependencies: null,
);
@override @override
Track? get track => (origin as TrackStateProvider).track; String debugGetCreateSourceHash() => _$lastTrackerLibraryLocationStateHash();
@$internal
@override @override
ItemType? get itemType => (origin as TrackStateProvider).itemType; LastTrackerLibraryLocationState create() => LastTrackerLibraryLocationState();
/// {@macro riverpod.override_with_value}
Override overrideWithValue((int, bool) value) {
return $ProviderOverride(
origin: this,
providerOverride: $SyncValueProvider<(int, bool)>(value),
);
}
} }
String _$lastTrackerLibraryLocationStateHash() => String _$lastTrackerLibraryLocationStateHash() =>
r'c09efe7fe4f8dda723c31bc6543dbaa571718342'; r'c09efe7fe4f8dda723c31bc6543dbaa571718342';
/// See also [LastTrackerLibraryLocationState]. abstract class _$LastTrackerLibraryLocationState
@ProviderFor(LastTrackerLibraryLocationState) extends $Notifier<(int, bool)> {
final lastTrackerLibraryLocationStateProvider = (int, bool) build();
AutoDisposeNotifierProvider< @$mustCallSuper
LastTrackerLibraryLocationState, @override
(int, bool) void runBuild() {
>.internal( final created = build();
LastTrackerLibraryLocationState.new, final ref = this.ref as $Ref<(int, bool), (int, bool)>;
name: r'lastTrackerLibraryLocationStateProvider', final element =
debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product') ref.element
? null as $ClassProviderElement<
: _$lastTrackerLibraryLocationStateHash, AnyNotifier<(int, bool), (int, bool)>,
dependencies: null, (int, bool),
allTransitiveDependencies: null, Object?,
); Object?
>;
typedef _$LastTrackerLibraryLocationState = AutoDisposeNotifier<(int, bool)>; element.handleValue(ref, created);
// 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

@ -11,7 +11,6 @@ import 'package:mangayomi/utils/extensions/others.dart';
import 'package:mangayomi/utils/extensions/string_extensions.dart'; import 'package:mangayomi/utils/extensions/string_extensions.dart';
import 'package:mangayomi/utils/utils.dart'; import 'package:mangayomi/utils/utils.dart';
import 'package:riverpod_annotation/riverpod_annotation.dart'; import 'package:riverpod_annotation/riverpod_annotation.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
part 'update_manga_detail_providers.g.dart'; part 'update_manga_detail_providers.g.dart';
@riverpod @riverpod

View file

@ -6,189 +6,90 @@ part of 'update_manga_detail_providers.dart';
// RiverpodGenerator // RiverpodGenerator
// ************************************************************************** // **************************************************************************
String _$updateMangaDetailHash() => r'3b15af65efba4f27e0fe990c903e66973ac31af3'; // GENERATED CODE - DO NOT MODIFY BY HAND
// ignore_for_file: type=lint, type=warning
/// Copied from Dart SDK
class _SystemHash {
_SystemHash._();
static int combine(int hash, int value) {
// ignore: parameter_assignments
hash = 0x1fffffff & (hash + value);
// ignore: parameter_assignments
hash = 0x1fffffff & (hash + ((0x0007ffff & hash) << 10));
return hash ^ (hash >> 6);
}
static int finish(int hash) {
// ignore: parameter_assignments
hash = 0x1fffffff & (hash + ((0x03ffffff & hash) << 3));
// ignore: parameter_assignments
hash = hash ^ (hash >> 11);
return 0x1fffffff & (hash + ((0x00003fff & hash) << 15));
}
}
/// See also [updateMangaDetail].
@ProviderFor(updateMangaDetail) @ProviderFor(updateMangaDetail)
const updateMangaDetailProvider = UpdateMangaDetailFamily(); const updateMangaDetailProvider = UpdateMangaDetailFamily._();
/// See also [updateMangaDetail]. final class UpdateMangaDetailProvider
class UpdateMangaDetailFamily extends Family<AsyncValue<dynamic>> { extends $FunctionalProvider<AsyncValue<dynamic>, dynamic, FutureOr<dynamic>>
/// See also [updateMangaDetail]. with $FutureModifier<dynamic>, $FutureProvider<dynamic> {
const UpdateMangaDetailFamily(); const UpdateMangaDetailProvider._({
required UpdateMangaDetailFamily super.from,
/// See also [updateMangaDetail]. required ({int? mangaId, bool isInit, bool showToast}) super.argument,
UpdateMangaDetailProvider call({ }) : super(
required int? mangaId, retry: null,
required bool isInit,
bool showToast = true,
}) {
return UpdateMangaDetailProvider(
mangaId: mangaId,
isInit: isInit,
showToast: showToast,
);
}
@override
UpdateMangaDetailProvider getProviderOverride(
covariant UpdateMangaDetailProvider provider,
) {
return call(
mangaId: provider.mangaId,
isInit: provider.isInit,
showToast: provider.showToast,
);
}
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'updateMangaDetailProvider';
}
/// See also [updateMangaDetail].
class UpdateMangaDetailProvider extends AutoDisposeFutureProvider<dynamic> {
/// See also [updateMangaDetail].
UpdateMangaDetailProvider({
required int? mangaId,
required bool isInit,
bool showToast = true,
}) : this._internal(
(ref) => updateMangaDetail(
ref as UpdateMangaDetailRef,
mangaId: mangaId,
isInit: isInit,
showToast: showToast,
),
from: updateMangaDetailProvider,
name: r'updateMangaDetailProvider', name: r'updateMangaDetailProvider',
debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product') isAutoDispose: true,
? null dependencies: null,
: _$updateMangaDetailHash, $allTransitiveDependencies: null,
dependencies: UpdateMangaDetailFamily._dependencies,
allTransitiveDependencies:
UpdateMangaDetailFamily._allTransitiveDependencies,
mangaId: mangaId,
isInit: isInit,
showToast: showToast,
); );
UpdateMangaDetailProvider._internal( @override
super._createNotifier, { String debugGetCreateSourceHash() => _$updateMangaDetailHash();
required super.name,
required super.dependencies,
required super.allTransitiveDependencies,
required super.debugGetCreateSourceHash,
required super.from,
required this.mangaId,
required this.isInit,
required this.showToast,
}) : super.internal();
final int? mangaId;
final bool isInit;
final bool showToast;
@override @override
Override overrideWith( String toString() {
FutureOr<dynamic> Function(UpdateMangaDetailRef provider) create, return r'updateMangaDetailProvider'
) { ''
return ProviderOverride( '$argument';
origin: this,
override: UpdateMangaDetailProvider._internal(
(ref) => create(ref as UpdateMangaDetailRef),
from: from,
name: null,
dependencies: null,
allTransitiveDependencies: null,
debugGetCreateSourceHash: null,
mangaId: mangaId,
isInit: isInit,
showToast: showToast,
),
);
} }
@$internal
@override @override
AutoDisposeFutureProviderElement<dynamic> createElement() { $FutureProviderElement<dynamic> $createElement($ProviderPointer pointer) =>
return _UpdateMangaDetailProviderElement(this); $FutureProviderElement(pointer);
@override
FutureOr<dynamic> create(Ref ref) {
final argument =
this.argument as ({int? mangaId, bool isInit, bool showToast});
return updateMangaDetail(
ref,
mangaId: argument.mangaId,
isInit: argument.isInit,
showToast: argument.showToast,
);
} }
@override @override
bool operator ==(Object other) { bool operator ==(Object other) {
return other is UpdateMangaDetailProvider && return other is UpdateMangaDetailProvider && other.argument == argument;
other.mangaId == mangaId &&
other.isInit == isInit &&
other.showToast == showToast;
} }
@override @override
int get hashCode { int get hashCode {
var hash = _SystemHash.combine(0, runtimeType.hashCode); return argument.hashCode;
hash = _SystemHash.combine(hash, mangaId.hashCode);
hash = _SystemHash.combine(hash, isInit.hashCode);
hash = _SystemHash.combine(hash, showToast.hashCode);
return _SystemHash.finish(hash);
} }
} }
@Deprecated('Will be removed in 3.0. Use Ref instead') String _$updateMangaDetailHash() => r'ac2b3fcd446d50a81ad647015e3010c2309f3385';
// ignore: unused_element
mixin UpdateMangaDetailRef on AutoDisposeFutureProviderRef<dynamic> {
/// The parameter `mangaId` of this provider.
int? get mangaId;
/// The parameter `isInit` of this provider. final class UpdateMangaDetailFamily extends $Family
bool get isInit; with
$FunctionalFamilyOverride<
FutureOr<dynamic>,
({int? mangaId, bool isInit, bool showToast})
> {
const UpdateMangaDetailFamily._()
: super(
retry: null,
name: r'updateMangaDetailProvider',
dependencies: null,
$allTransitiveDependencies: null,
isAutoDispose: true,
);
/// The parameter `showToast` of this provider. UpdateMangaDetailProvider call({
bool get showToast; required int? mangaId,
required bool isInit,
bool showToast = true,
}) => UpdateMangaDetailProvider._(
argument: (mangaId: mangaId, isInit: isInit, showToast: showToast),
from: this,
);
@override
String toString() => r'updateMangaDetailProvider';
} }
class _UpdateMangaDetailProviderElement
extends AutoDisposeFutureProviderElement<dynamic>
with UpdateMangaDetailRef {
_UpdateMangaDetailProviderElement(super.provider);
@override
int? get mangaId => (origin as UpdateMangaDetailProvider).mangaId;
@override
bool get isInit => (origin as UpdateMangaDetailProvider).isInit;
@override
bool get showToast => (origin as UpdateMangaDetailProvider).showToast;
}
// 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

@ -2,7 +2,7 @@ import 'dart:typed_data';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:go_router/go_router.dart'; import 'package:go_router/go_router.dart';
import 'package:isar/isar.dart'; import 'package:isar_community/isar.dart';
import 'package:mangayomi/eval/model/m_manga.dart'; import 'package:mangayomi/eval/model/m_manga.dart';
import 'package:mangayomi/eval/model/m_pages.dart'; import 'package:mangayomi/eval/model/m_pages.dart';
import 'package:mangayomi/main.dart'; import 'package:mangayomi/main.dart';
@ -170,7 +170,7 @@ class _MigrationSourceSearchScreenState
String _errorMessage = ""; String _errorMessage = "";
bool _isLoading = true; bool _isLoading = true;
MPages? pages; MPages? pages;
_init() async { Future<void> _init() async {
try { try {
_errorMessage = ""; _errorMessage = "";
pages = await ref.read( pages = await ref.read(
@ -599,6 +599,7 @@ class _MigrationMangaGlobalImageCardState
trackStateProvider( trackStateProvider(
track: null, track: null,
itemType: widget.oldManga.itemType, itemType: widget.oldManga.itemType,
widgetRef: ref,
).notifier, ).notifier,
) )
.setTrackSearch( .setTrackSearch(

View file

@ -37,7 +37,7 @@ class _TrackerWidgetSearchState extends ConsumerState<TrackerWidgetSearch> {
bool hide = false; bool hide = false;
late List<TrackSearch>? tracks = []; late List<TrackSearch>? tracks = [];
String? _errorMsg; String? _errorMsg;
_init() async { Future<void> _init() async {
await Future.delayed(const Duration(microseconds: 100)); await Future.delayed(const Duration(microseconds: 100));
try { try {
tracks = await ref tracks = await ref
@ -45,6 +45,7 @@ class _TrackerWidgetSearchState extends ConsumerState<TrackerWidgetSearch> {
trackStateProvider( trackStateProvider(
track: widget.track, track: widget.track,
itemType: widget.itemType, itemType: widget.itemType,
widgetRef: ref,
).notifier, ).notifier,
) )
.search(query); .search(query);
@ -233,6 +234,7 @@ class _TrackerWidgetSearchState extends ConsumerState<TrackerWidgetSearch> {
trackStateProvider( trackStateProvider(
track: widget.track, track: widget.track,
itemType: widget.itemType, itemType: widget.itemType,
widgetRef: ref,
).notifier, ).notifier,
) )
.search(d.trim()); .search(d.trim());
@ -280,7 +282,7 @@ class _TrackerWidgetSearchState extends ConsumerState<TrackerWidgetSearch> {
} }
} }
trackersSearchraggableMenu( Future<dynamic> trackersSearchDraggableMenu(
BuildContext context, { BuildContext context, {
required Track track, required Track track,
required ItemType itemType, required ItemType itemType,

View file

@ -39,13 +39,14 @@ class _TrackerWidgetState extends ConsumerState<TrackerWidget> {
_init(); _init();
} }
_init() async { Future<void> _init() async {
await Future.delayed(const Duration(microseconds: 100)); await Future.delayed(const Duration(microseconds: 100));
final findManga = await ref final findManga = await ref
.read( .read(
trackStateProvider( trackStateProvider(
track: widget.trackRes, track: widget.trackRes,
itemType: widget.itemType, itemType: widget.itemType,
widgetRef: ref,
).notifier, ).notifier,
) )
.findManga(); .findManga();
@ -100,7 +101,7 @@ class _TrackerWidgetState extends ConsumerState<TrackerWidget> {
onPressed: !widget.hide onPressed: !widget.hide
? () async { ? () async {
final trackSearch = final trackSearch =
await trackersSearchraggableMenu( await trackersSearchDraggableMenu(
context, context,
itemType: widget.itemType, itemType: widget.itemType,
track: widget.trackRes, track: widget.trackRes,
@ -112,6 +113,7 @@ class _TrackerWidgetState extends ConsumerState<TrackerWidget> {
trackStateProvider( trackStateProvider(
track: null, track: null,
itemType: widget.itemType, itemType: widget.itemType,
widgetRef: ref,
).notifier, ).notifier,
) )
.setTrackSearch( .setTrackSearch(
@ -186,6 +188,7 @@ class _TrackerWidgetState extends ConsumerState<TrackerWidget> {
trackStateProvider( trackStateProvider(
track: widget.trackRes, track: widget.trackRes,
itemType: widget.itemType, itemType: widget.itemType,
widgetRef: ref,
).notifier, ).notifier,
) )
.getStatusList() .getStatusList()
@ -196,6 +199,7 @@ class _TrackerWidgetState extends ConsumerState<TrackerWidget> {
trackStateProvider( trackStateProvider(
track: widget.trackRes, track: widget.trackRes,
itemType: widget.itemType, itemType: widget.itemType,
widgetRef: ref,
).notifier, ).notifier,
) )
.getStatusList()[index]; .getStatusList()[index];
@ -211,6 +215,7 @@ class _TrackerWidgetState extends ConsumerState<TrackerWidget> {
track: widget.trackRes track: widget.trackRes
..status = status, ..status = status,
itemType: widget.itemType, itemType: widget.itemType,
widgetRef: ref,
).notifier, ).notifier,
) )
.updateManga(); .updateManga();
@ -315,6 +320,7 @@ class _TrackerWidgetState extends ConsumerState<TrackerWidget> {
..lastChapterRead = ..lastChapterRead =
currentIntValue, currentIntValue,
itemType: widget.itemType, itemType: widget.itemType,
widgetRef: ref,
).notifier, ).notifier,
) )
.updateManga(); .updateManga();
@ -363,6 +369,7 @@ class _TrackerWidgetState extends ConsumerState<TrackerWidget> {
trackStateProvider( trackStateProvider(
track: widget.trackRes, track: widget.trackRes,
itemType: widget.itemType, itemType: widget.itemType,
widgetRef: ref,
).notifier, ).notifier,
) )
.getScoreMaxValue(), .getScoreMaxValue(),
@ -372,6 +379,7 @@ class _TrackerWidgetState extends ConsumerState<TrackerWidget> {
trackStateProvider( trackStateProvider(
track: widget.trackRes, track: widget.trackRes,
itemType: widget.itemType, itemType: widget.itemType,
widgetRef: ref,
).notifier, ).notifier,
) )
.getTextMapper(numberText); .getTextMapper(numberText);
@ -381,6 +389,7 @@ class _TrackerWidgetState extends ConsumerState<TrackerWidget> {
trackStateProvider( trackStateProvider(
track: widget.trackRes, track: widget.trackRes,
itemType: widget.itemType, itemType: widget.itemType,
widgetRef: ref,
).notifier, ).notifier,
) )
.getScoreStep(), .getScoreStep(),
@ -415,6 +424,7 @@ class _TrackerWidgetState extends ConsumerState<TrackerWidget> {
track: widget.trackRes track: widget.trackRes
..score = currentIntValue, ..score = currentIntValue,
itemType: widget.itemType, itemType: widget.itemType,
widgetRef: ref,
).notifier, ).notifier,
) )
.updateManga(); .updateManga();
@ -440,6 +450,7 @@ class _TrackerWidgetState extends ConsumerState<TrackerWidget> {
trackStateProvider( trackStateProvider(
track: widget.trackRes, track: widget.trackRes,
itemType: widget.itemType, itemType: widget.itemType,
widgetRef: ref,
).notifier, ).notifier,
) )
.displayScore(widget.trackRes.score!) .displayScore(widget.trackRes.score!)
@ -473,6 +484,7 @@ class _TrackerWidgetState extends ConsumerState<TrackerWidget> {
..startedReadingDate = ..startedReadingDate =
newDate.millisecondsSinceEpoch, newDate.millisecondsSinceEpoch,
itemType: widget.itemType, itemType: widget.itemType,
widgetRef: ref,
).notifier, ).notifier,
) )
.updateManga(); .updateManga();
@ -513,6 +525,7 @@ class _TrackerWidgetState extends ConsumerState<TrackerWidget> {
..finishedReadingDate = ..finishedReadingDate =
newDate.millisecondsSinceEpoch, newDate.millisecondsSinceEpoch,
itemType: widget.itemType, itemType: widget.itemType,
widgetRef: ref,
).notifier, ).notifier,
) )
.updateManga(); .updateManga();

View file

@ -1,6 +1,6 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:go_router/go_router.dart'; import 'package:go_router/go_router.dart';
import 'package:isar/isar.dart'; import 'package:isar_community/isar.dart';
import 'package:mangayomi/main.dart'; import 'package:mangayomi/main.dart';
import 'package:mangayomi/models/manga.dart'; import 'package:mangayomi/models/manga.dart';
import 'package:mangayomi/models/track.dart'; import 'package:mangayomi/models/track.dart';

View file

@ -2,7 +2,7 @@ import 'dart:io';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:font_awesome_flutter/font_awesome_flutter.dart'; import 'package:font_awesome_flutter/font_awesome_flutter.dart';
import 'package:isar/isar.dart'; import 'package:isar_community/isar.dart';
import 'package:mangayomi/main.dart'; import 'package:mangayomi/main.dart';
import 'package:mangayomi/models/chapter.dart'; import 'package:mangayomi/models/chapter.dart';
import 'package:mangayomi/models/download.dart'; import 'package:mangayomi/models/download.dart';

View file

@ -2,7 +2,6 @@ import 'dart:io';
import 'package:archive/archive_io.dart'; import 'package:archive/archive_io.dart';
import 'package:flutter/foundation.dart'; import 'package:flutter/foundation.dart';
import 'package:riverpod_annotation/riverpod_annotation.dart'; import 'package:riverpod_annotation/riverpod_annotation.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:path/path.dart' as path; import 'package:path/path.dart' as path;
part 'convert_to_cbz.g.dart'; part 'convert_to_cbz.g.dart';

View file

@ -6,200 +6,97 @@ part of 'convert_to_cbz.dart';
// RiverpodGenerator // RiverpodGenerator
// ************************************************************************** // **************************************************************************
String _$convertToCBZHash() => r'56f4320034ec2420c8c2c2b22a2522721181ab54'; // GENERATED CODE - DO NOT MODIFY BY HAND
// ignore_for_file: type=lint, type=warning
/// Copied from Dart SDK @ProviderFor(convertToCBZ)
class _SystemHash { const convertToCBZProvider = ConvertToCBZFamily._();
_SystemHash._();
static int combine(int hash, int value) { final class ConvertToCBZProvider
// ignore: parameter_assignments extends
hash = 0x1fffffff & (hash + value); $FunctionalProvider<
// ignore: parameter_assignments AsyncValue<List<String>>,
hash = 0x1fffffff & (hash + ((0x0007ffff & hash) << 10)); List<String>,
return hash ^ (hash >> 6); FutureOr<List<String>>
>
with $FutureModifier<List<String>>, $FutureProvider<List<String>> {
const ConvertToCBZProvider._({
required ConvertToCBZFamily super.from,
required (String, String, String, List<String>) super.argument,
}) : super(
retry: null,
name: r'convertToCBZProvider',
isAutoDispose: true,
dependencies: null,
$allTransitiveDependencies: null,
);
@override
String debugGetCreateSourceHash() => _$convertToCBZHash();
@override
String toString() {
return r'convertToCBZProvider'
''
'$argument';
} }
static int finish(int hash) { @$internal
// ignore: parameter_assignments @override
hash = 0x1fffffff & (hash + ((0x03ffffff & hash) << 3)); $FutureProviderElement<List<String>> $createElement(
// ignore: parameter_assignments $ProviderPointer pointer,
hash = hash ^ (hash >> 11); ) => $FutureProviderElement(pointer);
return 0x1fffffff & (hash + ((0x00003fff & hash) << 15));
@override
FutureOr<List<String>> create(Ref ref) {
final argument = this.argument as (String, String, String, List<String>);
return convertToCBZ(
ref,
argument.$1,
argument.$2,
argument.$3,
argument.$4,
);
}
@override
bool operator ==(Object other) {
return other is ConvertToCBZProvider && other.argument == argument;
}
@override
int get hashCode {
return argument.hashCode;
} }
} }
/// See also [convertToCBZ]. String _$convertToCBZHash() => r'56f4320034ec2420c8c2c2b22a2522721181ab54';
@ProviderFor(convertToCBZ)
const convertToCBZProvider = ConvertToCBZFamily();
/// See also [convertToCBZ]. final class ConvertToCBZFamily extends $Family
class ConvertToCBZFamily extends Family<AsyncValue<List<String>>> { with
/// See also [convertToCBZ]. $FunctionalFamilyOverride<
const ConvertToCBZFamily(); FutureOr<List<String>>,
(String, String, String, List<String>)
> {
const ConvertToCBZFamily._()
: super(
retry: null,
name: r'convertToCBZProvider',
dependencies: null,
$allTransitiveDependencies: null,
isAutoDispose: true,
);
/// See also [convertToCBZ].
ConvertToCBZProvider call( ConvertToCBZProvider call(
String chapterDir, String chapterDir,
String mangaDir, String mangaDir,
String chapterName, String chapterName,
List<String> pageList, List<String> pageList,
) { ) => ConvertToCBZProvider._(
return ConvertToCBZProvider(chapterDir, mangaDir, chapterName, pageList); argument: (chapterDir, mangaDir, chapterName, pageList),
} from: this,
);
@override @override
ConvertToCBZProvider getProviderOverride( String toString() => r'convertToCBZProvider';
covariant ConvertToCBZProvider provider,
) {
return call(
provider.chapterDir,
provider.mangaDir,
provider.chapterName,
provider.pageList,
);
}
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'convertToCBZProvider';
} }
/// See also [convertToCBZ].
class ConvertToCBZProvider extends AutoDisposeFutureProvider<List<String>> {
/// See also [convertToCBZ].
ConvertToCBZProvider(
String chapterDir,
String mangaDir,
String chapterName,
List<String> pageList,
) : this._internal(
(ref) => convertToCBZ(
ref as ConvertToCBZRef,
chapterDir,
mangaDir,
chapterName,
pageList,
),
from: convertToCBZProvider,
name: r'convertToCBZProvider',
debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product')
? null
: _$convertToCBZHash,
dependencies: ConvertToCBZFamily._dependencies,
allTransitiveDependencies:
ConvertToCBZFamily._allTransitiveDependencies,
chapterDir: chapterDir,
mangaDir: mangaDir,
chapterName: chapterName,
pageList: pageList,
);
ConvertToCBZProvider._internal(
super._createNotifier, {
required super.name,
required super.dependencies,
required super.allTransitiveDependencies,
required super.debugGetCreateSourceHash,
required super.from,
required this.chapterDir,
required this.mangaDir,
required this.chapterName,
required this.pageList,
}) : super.internal();
final String chapterDir;
final String mangaDir;
final String chapterName;
final List<String> pageList;
@override
Override overrideWith(
FutureOr<List<String>> Function(ConvertToCBZRef provider) create,
) {
return ProviderOverride(
origin: this,
override: ConvertToCBZProvider._internal(
(ref) => create(ref as ConvertToCBZRef),
from: from,
name: null,
dependencies: null,
allTransitiveDependencies: null,
debugGetCreateSourceHash: null,
chapterDir: chapterDir,
mangaDir: mangaDir,
chapterName: chapterName,
pageList: pageList,
),
);
}
@override
AutoDisposeFutureProviderElement<List<String>> createElement() {
return _ConvertToCBZProviderElement(this);
}
@override
bool operator ==(Object other) {
return other is ConvertToCBZProvider &&
other.chapterDir == chapterDir &&
other.mangaDir == mangaDir &&
other.chapterName == chapterName &&
other.pageList == pageList;
}
@override
int get hashCode {
var hash = _SystemHash.combine(0, runtimeType.hashCode);
hash = _SystemHash.combine(hash, chapterDir.hashCode);
hash = _SystemHash.combine(hash, mangaDir.hashCode);
hash = _SystemHash.combine(hash, chapterName.hashCode);
hash = _SystemHash.combine(hash, pageList.hashCode);
return _SystemHash.finish(hash);
}
}
@Deprecated('Will be removed in 3.0. Use Ref instead')
// ignore: unused_element
mixin ConvertToCBZRef on AutoDisposeFutureProviderRef<List<String>> {
/// The parameter `chapterDir` of this provider.
String get chapterDir;
/// The parameter `mangaDir` of this provider.
String get mangaDir;
/// The parameter `chapterName` of this provider.
String get chapterName;
/// The parameter `pageList` of this provider.
List<String> get pageList;
}
class _ConvertToCBZProviderElement
extends AutoDisposeFutureProviderElement<List<String>>
with ConvertToCBZRef {
_ConvertToCBZProviderElement(super.provider);
@override
String get chapterDir => (origin as ConvertToCBZProvider).chapterDir;
@override
String get mangaDir => (origin as ConvertToCBZProvider).mangaDir;
@override
String get chapterName => (origin as ConvertToCBZProvider).chapterName;
@override
List<String> get pageList => (origin as ConvertToCBZProvider).pageList;
}
// 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

@ -2,7 +2,8 @@ import 'dart:convert';
import 'dart:io'; import 'dart:io';
import 'dart:ui'; import 'dart:ui';
import 'package:connectivity_plus/connectivity_plus.dart'; import 'package:connectivity_plus/connectivity_plus.dart';
import 'package:isar/isar.dart'; import 'package:flutter/widgets.dart';
import 'package:isar_community/isar.dart';
import 'package:mangayomi/eval/model/m_bridge.dart'; import 'package:mangayomi/eval/model/m_bridge.dart';
import 'package:mangayomi/models/manga.dart'; import 'package:mangayomi/models/manga.dart';
import 'package:mangayomi/models/page.dart'; import 'package:mangayomi/models/page.dart';
@ -28,7 +29,6 @@ import 'package:mangayomi/utils/headers.dart';
import 'package:mangayomi/utils/reg_exp_matcher.dart'; import 'package:mangayomi/utils/reg_exp_matcher.dart';
import 'package:path/path.dart' as p; import 'package:path/path.dart' as p;
import 'package:riverpod_annotation/riverpod_annotation.dart'; import 'package:riverpod_annotation/riverpod_annotation.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
part 'download_provider.g.dart'; part 'download_provider.g.dart';
@riverpod @riverpod
@ -56,350 +56,369 @@ Future<void> downloadChapter(
bool? useWifi, bool? useWifi,
VoidCallback? callback, VoidCallback? callback,
}) async { }) async {
bool onlyOnWifi = useWifi ?? ref.read(onlyOnWifiStateProvider); final keepAlive = ref.keepAlive();
final connectivity = await Connectivity().checkConnectivity();
final isOnWifi =
connectivity.contains(ConnectivityResult.wifi) ||
connectivity.contains(ConnectivityResult.ethernet);
if (onlyOnWifi && !isOnWifi) {
botToast(navigatorKey.currentContext!.l10n.downloads_are_limited_to_wifi);
return;
}
final http = MClient.init(
reqcopyWith: {'useDartHttpClient': true, 'followRedirects': false},
);
List<PageUrl> pageUrls = []; try {
List<PageUrl> pages = []; bool onlyOnWifi = useWifi ?? ref.read(onlyOnWifiStateProvider);
final StorageProvider storageProvider = StorageProvider(); final connectivity = await Connectivity().checkConnectivity();
await storageProvider.requestPermission(); final isOnWifi =
final mangaMainDirectory = await storageProvider.getMangaMainDirectory( connectivity.contains(ConnectivityResult.wifi) ||
chapter, connectivity.contains(ConnectivityResult.ethernet);
); if (onlyOnWifi && !isOnWifi) {
List<Track>? subtitles; botToast(navigatorKey.currentContext!.l10n.downloads_are_limited_to_wifi);
bool isOk = false; return;
final manga = chapter.manga.value!;
final chapterName = chapter.name!.replaceForbiddenCharacters(' ');
final itemType = chapter.manga.value!.itemType;
final chapterDirectory = (await storageProvider.getMangaChapterDirectory(
chapter,
mangaMainDirectory: mangaMainDirectory,
))!;
await Directory(chapterDirectory.path).create(recursive: true);
Map<String, String> videoHeader = {};
Map<String, String> htmlHeader = {
"Priority": "u=0, i",
"User-Agent":
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.0.0 Safari/537.36",
};
bool hasM3U8File = false;
bool nonM3U8File = false;
M3u8Downloader? m3u8Downloader;
Future<void> processConvert() async {
if (!ref.read(saveAsCBZArchiveStateProvider)) return;
try {
await ref.read(
convertToCBZProvider(
chapterDirectory.path,
mangaMainDirectory!.path,
chapter.name!,
pages.map((e) => e.fileName!).toList(),
).future,
);
} catch (error) {
botToast("Failed to create CBZ: $error");
} }
} final http = MClient.init(
reqcopyWith: {'useDartHttpClient': true, 'followRedirects': false},
);
Future<void> setProgress(DownloadProgress progress) async { List<PageUrl> pageUrls = [];
if (progress.isCompleted && itemType == ItemType.manga) { List<PageUrl> pages = [];
await processConvert(); final StorageProvider storageProvider = StorageProvider();
await storageProvider.requestPermission();
final mangaMainDirectory = await storageProvider.getMangaMainDirectory(
chapter,
);
List<Track>? subtitles;
bool isOk = false;
final manga = chapter.manga.value!;
final chapterName = chapter.name!.replaceForbiddenCharacters(' ');
final itemType = chapter.manga.value!.itemType;
final chapterDirectory = (await storageProvider.getMangaChapterDirectory(
chapter,
mangaMainDirectory: mangaMainDirectory,
))!;
await Directory(chapterDirectory.path).create(recursive: true);
Map<String, String> videoHeader = {};
Map<String, String> htmlHeader = {
"Priority": "u=0, i",
"User-Agent":
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.0.0 Safari/537.36",
};
bool hasM3U8File = false;
bool nonM3U8File = false;
M3u8Downloader? m3u8Downloader;
Future<void> processConvert() async {
if (!ref.read(saveAsCBZArchiveStateProvider)) return;
try {
await ref.read(
convertToCBZProvider(
chapterDirectory.path,
mangaMainDirectory!.path,
chapter.name!,
pages.map((e) => e.fileName!).toList(),
).future,
);
} catch (error) {
botToast("Failed to create CBZ: $error");
}
} }
final download = isar.downloads.getSync(chapter.id!);
if (download == null) { Future<void> setProgress(DownloadProgress progress) async {
final download = Download( if (progress.isCompleted && itemType == ItemType.manga) {
id: chapter.id, await processConvert();
succeeded: progress.completed == 0 }
? 0
: (progress.completed / progress.total * 100).toInt(),
failed: 0,
total: 100,
isDownload: progress.isCompleted,
isStartDownload: true,
);
isar.writeTxnSync(() {
isar.downloads.putSync(download..chapter.value = chapter);
});
} else {
final download = isar.downloads.getSync(chapter.id!); final download = isar.downloads.getSync(chapter.id!);
if (download != null && progress.total != 0) { if (download == null) {
final download = Download(
id: chapter.id,
succeeded: progress.completed == 0
? 0
: (progress.completed / progress.total * 100).toInt(),
failed: 0,
total: 100,
isDownload: progress.isCompleted,
isStartDownload: true,
);
isar.writeTxnSync(() { isar.writeTxnSync(() {
isar.downloads.putSync( isar.downloads.putSync(download..chapter.value = chapter);
download });
..succeeded = progress.completed == 0 } else {
? 0 final download = isar.downloads.getSync(chapter.id!);
: (progress.completed / progress.total * 100).toInt() if (download != null && progress.total != 0) {
..total = 100 isar.writeTxnSync(() {
..failed = 0 isar.downloads.putSync(
..isDownload = progress.isCompleted, download
); ..succeeded = progress.completed == 0
? 0
: (progress.completed / progress.total * 100).toInt()
..total = 100
..failed = 0
..isDownload = progress.isCompleted,
);
});
}
}
}
setProgress(DownloadProgress(0, 0, itemType));
void savePageUrls() {
final settings = isar.settings.getSync(227)!;
List<ChapterPageurls>? chapterPageUrls = [];
for (var chapterPageUrl in settings.chapterPageUrlsList ?? []) {
if (chapterPageUrl.chapterId != chapter.id) {
chapterPageUrls.add(chapterPageUrl);
}
}
final chapterPageHeaders = pageUrls
.map((e) => e.headers == null ? null : jsonEncode(e.headers))
.toList();
chapterPageUrls.add(
ChapterPageurls()
..chapterId = chapter.id
..urls = pageUrls.map((e) => e.url).toList()
..chapterUrl = chapter.url
..headers = chapterPageHeaders.first != null
? chapterPageHeaders.map((e) => e.toString()).toList()
: null,
);
isar.writeTxnSync(
() => isar.settings.putSync(
settings
..chapterPageUrlsList = chapterPageUrls
..updatedAt = DateTime.now().millisecondsSinceEpoch,
),
);
}
if (itemType == ItemType.manga) {
ref.read(getChapterPagesProvider(chapter: chapter).future).then((value) {
if (value.pageUrls.isNotEmpty) {
pageUrls = value.pageUrls;
isOk = true;
}
});
} else if (itemType == ItemType.anime) {
ref.read(getVideoListProvider(episode: chapter).future).then((
value,
) async {
final m3u8Urls = value.$1
.where(
(element) =>
element.originalUrl.endsWith(".m3u8") ||
element.originalUrl.endsWith(".m3u"),
)
.toList();
final nonM3u8Urls = value.$1
.where((element) => element.originalUrl.isMediaVideo())
.toList();
nonM3U8File = nonM3u8Urls.isNotEmpty;
hasM3U8File = nonM3U8File ? false : m3u8Urls.isNotEmpty;
final videosUrls = nonM3U8File ? nonM3u8Urls : m3u8Urls;
if (videosUrls.isNotEmpty) {
subtitles = videosUrls.first.subtitles;
if (hasM3U8File) {
m3u8Downloader = M3u8Downloader(
m3u8Url: videosUrls.first.url,
downloadDir: chapterDirectory.path,
headers: videosUrls.first.headers ?? {},
subtitles: subtitles,
fileName: p.join(mangaMainDirectory!.path, "$chapterName.mp4"),
chapter: chapter,
);
} else {
pageUrls = [PageUrl(videosUrls.first.url)];
}
videoHeader.addAll(videosUrls.first.headers ?? {});
isOk = true;
}
});
} else if (itemType == ItemType.novel && chapter.url != null) {
final cookie = MClient.getCookiesPref(chapter.url!);
final headers = htmlHeader;
if (cookie.isNotEmpty) {
final userAgent = isar.settings.getSync(227)!.userAgent!;
headers.addAll(cookie);
headers[HttpHeaders.userAgentHeader] = userAgent;
}
final res = await http.get(Uri.parse(chapter.url!), headers: headers);
if (res.headers.containsKey("Location")) {
pageUrls = [PageUrl(res.headers["Location"]!)];
} else {
pageUrls = [PageUrl(chapter.url!)];
}
isOk = true;
}
await Future.doWhile(() async {
await Future.delayed(const Duration(seconds: 1));
if (isOk == true) {
return false;
}
return true;
});
if (pageUrls.isNotEmpty) {
bool cbzFileExist =
await File(
p.join(mangaMainDirectory!.path, "${chapter.name}.cbz"),
).exists() &&
ref.read(saveAsCBZArchiveStateProvider);
bool mp4FileExist = await File(
p.join(mangaMainDirectory.path, "$chapterName.mp4"),
).exists();
bool htmlFileExist = await File(
p.join(mangaMainDirectory.path, "$chapterName.html"),
).exists();
if (!cbzFileExist && itemType == ItemType.manga ||
!mp4FileExist && itemType == ItemType.anime ||
!htmlFileExist && itemType == ItemType.novel) {
final mainDirectory = (await storageProvider.getDirectory())!;
for (var index = 0; index < pageUrls.length; index++) {
if (Platform.isAndroid) {
if (!(await File(
p.join(mainDirectory.path, ".nomedia"),
).exists())) {
await File(p.join(mainDirectory.path, ".nomedia")).create();
}
}
final page = pageUrls[index];
final cookie = MClient.getCookiesPref(page.url);
final headers = itemType == ItemType.manga
? ref.read(
headersProvider(
source: manga.source!,
lang: manga.lang!,
sourceId: manga.sourceId,
),
)
: itemType == ItemType.anime
? videoHeader
: htmlHeader;
if (cookie.isNotEmpty) {
final userAgent = isar.settings.getSync(227)!.userAgent!;
headers.addAll(cookie);
headers[HttpHeaders.userAgentHeader] = userAgent;
}
Map<String, String> pageHeaders = headers;
pageHeaders.addAll(page.headers ?? {});
if (itemType == ItemType.manga) {
final file = File(
p.join(chapterDirectory.path, "${padIndex(index)}.jpg"),
);
if (!file.existsSync()) {
pages.add(
PageUrl(
page.url.trim().trimLeft().trimRight(),
headers: pageHeaders,
fileName: p.join(
chapterDirectory.path,
"${padIndex(index)}.jpg",
),
),
);
}
} else if (itemType == ItemType.anime) {
final file = File(
p.join(mangaMainDirectory.path, "$chapterName.mp4"),
);
if (!file.existsSync()) {
pages.add(
PageUrl(
page.url.trim().trimLeft().trimRight(),
headers: pageHeaders,
fileName: p.join(mangaMainDirectory.path, "$chapterName.mp4"),
),
);
}
} else {
final file = File(
p.join(chapterDirectory.path, "$chapterName.html"),
);
if (!file.existsSync()) {
pages.add(
PageUrl(
page.url.trim().trimLeft().trimRight(),
headers: pageHeaders,
fileName: p.join(chapterDirectory.path, "$chapterName.html"),
),
);
}
}
}
}
if (pages.isEmpty && pageUrls.isNotEmpty) {
await processConvert();
savePageUrls();
final download = Download(
id: chapter.id,
succeeded: 0,
failed: 0,
total: 0,
isDownload: true,
isStartDownload: false,
);
isar.writeTxnSync(() {
isar.downloads.putSync(download..chapter.value = chapter);
});
} else {
savePageUrls();
await MDownloader(
chapter: chapter,
pageUrls: pages,
subtitles: subtitles,
subDownloadDir: chapterDirectory.path,
).download((progress) {
setProgress(progress);
}); });
} }
} } else if (hasM3U8File) {
} await m3u8Downloader?.download((progress) {
setProgress(DownloadProgress(0, 0, itemType));
void savePageUrls() {
final settings = isar.settings.getSync(227)!;
List<ChapterPageurls>? chapterPageUrls = [];
for (var chapterPageUrl in settings.chapterPageUrlsList ?? []) {
if (chapterPageUrl.chapterId != chapter.id) {
chapterPageUrls.add(chapterPageUrl);
}
}
final chapterPageHeaders = pageUrls
.map((e) => e.headers == null ? null : jsonEncode(e.headers))
.toList();
chapterPageUrls.add(
ChapterPageurls()
..chapterId = chapter.id
..urls = pageUrls.map((e) => e.url).toList()
..chapterUrl = chapter.url
..headers = chapterPageHeaders.first != null
? chapterPageHeaders.map((e) => e.toString()).toList()
: null,
);
isar.writeTxnSync(
() => isar.settings.putSync(
settings
..chapterPageUrlsList = chapterPageUrls
..updatedAt = DateTime.now().millisecondsSinceEpoch,
),
);
}
if (itemType == ItemType.manga) {
ref.read(getChapterPagesProvider(chapter: chapter).future).then((value) {
if (value.pageUrls.isNotEmpty) {
pageUrls = value.pageUrls;
isOk = true;
}
});
} else if (itemType == ItemType.anime) {
ref.read(getVideoListProvider(episode: chapter).future).then((value) async {
final m3u8Urls = value.$1
.where(
(element) =>
element.originalUrl.endsWith(".m3u8") ||
element.originalUrl.endsWith(".m3u"),
)
.toList();
final nonM3u8Urls = value.$1
.where((element) => element.originalUrl.isMediaVideo())
.toList();
nonM3U8File = nonM3u8Urls.isNotEmpty;
hasM3U8File = nonM3U8File ? false : m3u8Urls.isNotEmpty;
final videosUrls = nonM3U8File ? nonM3u8Urls : m3u8Urls;
if (videosUrls.isNotEmpty) {
subtitles = videosUrls.first.subtitles;
if (hasM3U8File) {
m3u8Downloader = M3u8Downloader(
m3u8Url: videosUrls.first.url,
downloadDir: chapterDirectory.path,
headers: videosUrls.first.headers ?? {},
subtitles: subtitles,
fileName: p.join(mangaMainDirectory!.path, "$chapterName.mp4"),
chapter: chapter,
);
} else {
pageUrls = [PageUrl(videosUrls.first.url)];
}
videoHeader.addAll(videosUrls.first.headers ?? {});
isOk = true;
}
});
} else if (itemType == ItemType.novel && chapter.url != null) {
final cookie = MClient.getCookiesPref(chapter.url!);
final headers = htmlHeader;
if (cookie.isNotEmpty) {
final userAgent = isar.settings.getSync(227)!.userAgent!;
headers.addAll(cookie);
headers[HttpHeaders.userAgentHeader] = userAgent;
}
final res = await http.get(Uri.parse(chapter.url!), headers: headers);
if (res.headers.containsKey("Location")) {
pageUrls = [PageUrl(res.headers["Location"]!)];
} else {
pageUrls = [PageUrl(chapter.url!)];
}
isOk = true;
}
await Future.doWhile(() async {
await Future.delayed(const Duration(seconds: 1));
if (isOk == true) {
return false;
}
return true;
});
if (pageUrls.isNotEmpty) {
bool cbzFileExist =
await File(
p.join(mangaMainDirectory!.path, "${chapter.name}.cbz"),
).exists() &&
ref.read(saveAsCBZArchiveStateProvider);
bool mp4FileExist = await File(
p.join(mangaMainDirectory.path, "$chapterName.mp4"),
).exists();
bool htmlFileExist = await File(
p.join(mangaMainDirectory.path, "$chapterName.html"),
).exists();
if (!cbzFileExist && itemType == ItemType.manga ||
!mp4FileExist && itemType == ItemType.anime ||
!htmlFileExist && itemType == ItemType.novel) {
final mainDirectory = (await storageProvider.getDirectory())!;
for (var index = 0; index < pageUrls.length; index++) {
if (Platform.isAndroid) {
if (!(await File(p.join(mainDirectory.path, ".nomedia")).exists())) {
await File(p.join(mainDirectory.path, ".nomedia")).create();
}
}
final page = pageUrls[index];
final cookie = MClient.getCookiesPref(page.url);
final headers = itemType == ItemType.manga
? ref.read(
headersProvider(
source: manga.source!,
lang: manga.lang!,
sourceId: manga.sourceId,
),
)
: itemType == ItemType.anime
? videoHeader
: htmlHeader;
if (cookie.isNotEmpty) {
final userAgent = isar.settings.getSync(227)!.userAgent!;
headers.addAll(cookie);
headers[HttpHeaders.userAgentHeader] = userAgent;
}
Map<String, String> pageHeaders = headers;
pageHeaders.addAll(page.headers ?? {});
if (itemType == ItemType.manga) {
final file = File(
p.join(chapterDirectory.path, "${padIndex(index)}.jpg"),
);
if (!file.existsSync()) {
pages.add(
PageUrl(
page.url.trim().trimLeft().trimRight(),
headers: pageHeaders,
fileName: p.join(
chapterDirectory.path,
"${padIndex(index)}.jpg",
),
),
);
}
} else if (itemType == ItemType.anime) {
final file = File(
p.join(mangaMainDirectory.path, "$chapterName.mp4"),
);
if (!file.existsSync()) {
pages.add(
PageUrl(
page.url.trim().trimLeft().trimRight(),
headers: pageHeaders,
fileName: p.join(mangaMainDirectory.path, "$chapterName.mp4"),
),
);
}
} else {
final file = File(p.join(chapterDirectory.path, "$chapterName.html"));
if (!file.existsSync()) {
pages.add(
PageUrl(
page.url.trim().trimLeft().trimRight(),
headers: pageHeaders,
fileName: p.join(chapterDirectory.path, "$chapterName.html"),
),
);
}
}
}
}
if (pages.isEmpty && pageUrls.isNotEmpty) {
await processConvert();
savePageUrls();
final download = Download(
id: chapter.id,
succeeded: 0,
failed: 0,
total: 0,
isDownload: true,
isStartDownload: false,
);
isar.writeTxnSync(() {
isar.downloads.putSync(download..chapter.value = chapter);
});
} else {
savePageUrls();
await MDownloader(
chapter: chapter,
pageUrls: pages,
subtitles: subtitles,
subDownloadDir: chapterDirectory.path,
).download((progress) {
setProgress(progress); setProgress(progress);
}); });
} }
} else if (hasM3U8File) { if (callback != null) {
await m3u8Downloader?.download((progress) { callback();
setProgress(progress); }
}); keepAlive.close();
} } catch (_) {
if (callback != null) { keepAlive.close();
callback();
} }
} }
@riverpod @riverpod
Future<void> processDownloads(Ref ref, {bool? useWifi}) async { Future<void> processDownloads(Ref ref, {bool? useWifi}) async {
final ongoingDownloads = await isar.downloads final keepAlive = ref.keepAlive();
.filter() try {
.idIsNotNull() final ongoingDownloads = await isar.downloads
.isDownloadEqualTo(false) .filter()
.isStartDownloadEqualTo(true) .idIsNotNull()
.findAll(); .isDownloadEqualTo(false)
final maxConcurrentDownloads = ref.read(concurrentDownloadsStateProvider); .isStartDownloadEqualTo(true)
int index = 0; .findAll();
int downloaded = 0; final maxConcurrentDownloads = ref.read(concurrentDownloadsStateProvider);
int current = 0; int index = 0;
await Future.doWhile(() async { int downloaded = 0;
await Future.delayed(const Duration(seconds: 1)); int current = 0;
if (ongoingDownloads.length == downloaded) { await Future.doWhile(() async {
return false; await Future.delayed(const Duration(seconds: 1));
} if (ongoingDownloads.length == downloaded) {
if (current < maxConcurrentDownloads) { return false;
current++; }
final downloadItem = ongoingDownloads[index++]; if (current < maxConcurrentDownloads) {
final chapter = downloadItem.chapter.value!; current++;
chapter.cancelDownloads(downloadItem.id); final downloadItem = ongoingDownloads[index++];
ref.read( final chapter = downloadItem.chapter.value!;
downloadChapterProvider( chapter.cancelDownloads(downloadItem.id);
chapter: chapter, ref.read(
useWifi: useWifi, downloadChapterProvider(
callback: () { chapter: chapter,
downloaded++; useWifi: useWifi,
current--; callback: () {
}, downloaded++;
), current--;
); },
} ),
return true; );
}); }
return true;
});
keepAlive.close();
} catch (_) {
keepAlive.close();
}
} }

View file

@ -6,431 +6,231 @@ part of 'download_provider.dart';
// RiverpodGenerator // RiverpodGenerator
// ************************************************************************** // **************************************************************************
String _$addDownloadToQueueHash() => // GENERATED CODE - DO NOT MODIFY BY HAND
r'35e8e724755be265a9bf167e4641336630a465d2'; // ignore_for_file: type=lint, type=warning
/// Copied from Dart SDK
class _SystemHash {
_SystemHash._();
static int combine(int hash, int value) {
// ignore: parameter_assignments
hash = 0x1fffffff & (hash + value);
// ignore: parameter_assignments
hash = 0x1fffffff & (hash + ((0x0007ffff & hash) << 10));
return hash ^ (hash >> 6);
}
static int finish(int hash) {
// ignore: parameter_assignments
hash = 0x1fffffff & (hash + ((0x03ffffff & hash) << 3));
// ignore: parameter_assignments
hash = hash ^ (hash >> 11);
return 0x1fffffff & (hash + ((0x00003fff & hash) << 15));
}
}
/// See also [addDownloadToQueue].
@ProviderFor(addDownloadToQueue) @ProviderFor(addDownloadToQueue)
const addDownloadToQueueProvider = AddDownloadToQueueFamily(); const addDownloadToQueueProvider = AddDownloadToQueueFamily._();
/// See also [addDownloadToQueue]. final class AddDownloadToQueueProvider
class AddDownloadToQueueFamily extends Family<AsyncValue<void>> { extends $FunctionalProvider<AsyncValue<void>, void, FutureOr<void>>
/// See also [addDownloadToQueue]. with $FutureModifier<void>, $FutureProvider<void> {
const AddDownloadToQueueFamily(); const AddDownloadToQueueProvider._({
required AddDownloadToQueueFamily super.from,
required Chapter super.argument,
}) : super(
retry: null,
name: r'addDownloadToQueueProvider',
isAutoDispose: true,
dependencies: null,
$allTransitiveDependencies: null,
);
/// See also [addDownloadToQueue]. @override
AddDownloadToQueueProvider call({required Chapter chapter}) { String debugGetCreateSourceHash() => _$addDownloadToQueueHash();
return AddDownloadToQueueProvider(chapter: chapter);
@override
String toString() {
return r'addDownloadToQueueProvider'
''
'($argument)';
} }
@$internal
@override @override
AddDownloadToQueueProvider getProviderOverride( $FutureProviderElement<void> $createElement($ProviderPointer pointer) =>
covariant AddDownloadToQueueProvider provider, $FutureProviderElement(pointer);
) {
return call(chapter: provider.chapter);
}
static const Iterable<ProviderOrFamily>? _dependencies = null;
@override @override
Iterable<ProviderOrFamily>? get dependencies => _dependencies; FutureOr<void> create(Ref ref) {
final argument = this.argument as Chapter;
static const Iterable<ProviderOrFamily>? _allTransitiveDependencies = null; return addDownloadToQueue(ref, chapter: argument);
@override
Iterable<ProviderOrFamily>? get allTransitiveDependencies =>
_allTransitiveDependencies;
@override
String? get name => r'addDownloadToQueueProvider';
}
/// See also [addDownloadToQueue].
class AddDownloadToQueueProvider extends AutoDisposeFutureProvider<void> {
/// See also [addDownloadToQueue].
AddDownloadToQueueProvider({required Chapter chapter})
: this._internal(
(ref) =>
addDownloadToQueue(ref as AddDownloadToQueueRef, chapter: chapter),
from: addDownloadToQueueProvider,
name: r'addDownloadToQueueProvider',
debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product')
? null
: _$addDownloadToQueueHash,
dependencies: AddDownloadToQueueFamily._dependencies,
allTransitiveDependencies:
AddDownloadToQueueFamily._allTransitiveDependencies,
chapter: chapter,
);
AddDownloadToQueueProvider._internal(
super._createNotifier, {
required super.name,
required super.dependencies,
required super.allTransitiveDependencies,
required super.debugGetCreateSourceHash,
required super.from,
required this.chapter,
}) : super.internal();
final Chapter chapter;
@override
Override overrideWith(
FutureOr<void> Function(AddDownloadToQueueRef provider) create,
) {
return ProviderOverride(
origin: this,
override: AddDownloadToQueueProvider._internal(
(ref) => create(ref as AddDownloadToQueueRef),
from: from,
name: null,
dependencies: null,
allTransitiveDependencies: null,
debugGetCreateSourceHash: null,
chapter: chapter,
),
);
}
@override
AutoDisposeFutureProviderElement<void> createElement() {
return _AddDownloadToQueueProviderElement(this);
} }
@override @override
bool operator ==(Object other) { bool operator ==(Object other) {
return other is AddDownloadToQueueProvider && other.chapter == chapter; return other is AddDownloadToQueueProvider && other.argument == argument;
} }
@override @override
int get hashCode { int get hashCode {
var hash = _SystemHash.combine(0, runtimeType.hashCode); return argument.hashCode;
hash = _SystemHash.combine(hash, chapter.hashCode);
return _SystemHash.finish(hash);
} }
} }
@Deprecated('Will be removed in 3.0. Use Ref instead') String _$addDownloadToQueueHash() =>
// ignore: unused_element r'35e8e724755be265a9bf167e4641336630a465d2';
mixin AddDownloadToQueueRef on AutoDisposeFutureProviderRef<void> {
/// The parameter `chapter` of this provider.
Chapter get chapter;
}
class _AddDownloadToQueueProviderElement final class AddDownloadToQueueFamily extends $Family
extends AutoDisposeFutureProviderElement<void> with $FunctionalFamilyOverride<FutureOr<void>, Chapter> {
with AddDownloadToQueueRef { const AddDownloadToQueueFamily._()
_AddDownloadToQueueProviderElement(super.provider); : super(
retry: null,
name: r'addDownloadToQueueProvider',
dependencies: null,
$allTransitiveDependencies: null,
isAutoDispose: true,
);
AddDownloadToQueueProvider call({required Chapter chapter}) =>
AddDownloadToQueueProvider._(argument: chapter, from: this);
@override @override
Chapter get chapter => (origin as AddDownloadToQueueProvider).chapter; String toString() => r'addDownloadToQueueProvider';
}
@ProviderFor(downloadChapter)
const downloadChapterProvider = DownloadChapterFamily._();
final class DownloadChapterProvider
extends $FunctionalProvider<AsyncValue<void>, void, FutureOr<void>>
with $FutureModifier<void>, $FutureProvider<void> {
const DownloadChapterProvider._({
required DownloadChapterFamily super.from,
required ({Chapter chapter, bool? useWifi, VoidCallback? callback})
super.argument,
}) : super(
retry: null,
name: r'downloadChapterProvider',
isAutoDispose: true,
dependencies: null,
$allTransitiveDependencies: null,
);
@override
String debugGetCreateSourceHash() => _$downloadChapterHash();
@override
String toString() {
return r'downloadChapterProvider'
''
'$argument';
}
@$internal
@override
$FutureProviderElement<void> $createElement($ProviderPointer pointer) =>
$FutureProviderElement(pointer);
@override
FutureOr<void> create(Ref ref) {
final argument =
this.argument
as ({Chapter chapter, bool? useWifi, VoidCallback? callback});
return downloadChapter(
ref,
chapter: argument.chapter,
useWifi: argument.useWifi,
callback: argument.callback,
);
}
@override
bool operator ==(Object other) {
return other is DownloadChapterProvider && other.argument == argument;
}
@override
int get hashCode {
return argument.hashCode;
}
} }
String _$downloadChapterHash() => r'5eb401736efdfb2990fda6e2d97160aaeb94aec1'; String _$downloadChapterHash() => r'5eb401736efdfb2990fda6e2d97160aaeb94aec1';
/// See also [downloadChapter]. final class DownloadChapterFamily extends $Family
@ProviderFor(downloadChapter) with
const downloadChapterProvider = DownloadChapterFamily(); $FunctionalFamilyOverride<
FutureOr<void>,
({Chapter chapter, bool? useWifi, VoidCallback? callback})
> {
const DownloadChapterFamily._()
: super(
retry: null,
name: r'downloadChapterProvider',
dependencies: null,
$allTransitiveDependencies: null,
isAutoDispose: true,
);
/// See also [downloadChapter].
class DownloadChapterFamily extends Family<AsyncValue<void>> {
/// See also [downloadChapter].
const DownloadChapterFamily();
/// See also [downloadChapter].
DownloadChapterProvider call({ DownloadChapterProvider call({
required Chapter chapter, required Chapter chapter,
bool? useWifi, bool? useWifi,
void Function()? callback, VoidCallback? callback,
}) { }) => DownloadChapterProvider._(
return DownloadChapterProvider( argument: (chapter: chapter, useWifi: useWifi, callback: callback),
chapter: chapter, from: this,
useWifi: useWifi, );
callback: callback,
);
}
@override @override
DownloadChapterProvider getProviderOverride( String toString() => r'downloadChapterProvider';
covariant DownloadChapterProvider provider,
) {
return call(
chapter: provider.chapter,
useWifi: provider.useWifi,
callback: provider.callback,
);
}
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'downloadChapterProvider';
} }
/// See also [downloadChapter]. @ProviderFor(processDownloads)
class DownloadChapterProvider extends AutoDisposeFutureProvider<void> { const processDownloadsProvider = ProcessDownloadsFamily._();
/// See also [downloadChapter].
DownloadChapterProvider({ final class ProcessDownloadsProvider
required Chapter chapter, extends $FunctionalProvider<AsyncValue<void>, void, FutureOr<void>>
bool? useWifi, with $FutureModifier<void>, $FutureProvider<void> {
void Function()? callback, const ProcessDownloadsProvider._({
}) : this._internal( required ProcessDownloadsFamily super.from,
(ref) => downloadChapter( required bool? super.argument,
ref as DownloadChapterRef, }) : super(
chapter: chapter, retry: null,
useWifi: useWifi, name: r'processDownloadsProvider',
callback: callback, isAutoDispose: true,
), dependencies: null,
from: downloadChapterProvider, $allTransitiveDependencies: null,
name: r'downloadChapterProvider',
debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product')
? null
: _$downloadChapterHash,
dependencies: DownloadChapterFamily._dependencies,
allTransitiveDependencies:
DownloadChapterFamily._allTransitiveDependencies,
chapter: chapter,
useWifi: useWifi,
callback: callback,
); );
DownloadChapterProvider._internal( @override
super._createNotifier, { String debugGetCreateSourceHash() => _$processDownloadsHash();
required super.name,
required super.dependencies,
required super.allTransitiveDependencies,
required super.debugGetCreateSourceHash,
required super.from,
required this.chapter,
required this.useWifi,
required this.callback,
}) : super.internal();
final Chapter chapter;
final bool? useWifi;
final void Function()? callback;
@override @override
Override overrideWith( String toString() {
FutureOr<void> Function(DownloadChapterRef provider) create, return r'processDownloadsProvider'
) { ''
return ProviderOverride( '($argument)';
origin: this,
override: DownloadChapterProvider._internal(
(ref) => create(ref as DownloadChapterRef),
from: from,
name: null,
dependencies: null,
allTransitiveDependencies: null,
debugGetCreateSourceHash: null,
chapter: chapter,
useWifi: useWifi,
callback: callback,
),
);
} }
@$internal
@override @override
AutoDisposeFutureProviderElement<void> createElement() { $FutureProviderElement<void> $createElement($ProviderPointer pointer) =>
return _DownloadChapterProviderElement(this); $FutureProviderElement(pointer);
@override
FutureOr<void> create(Ref ref) {
final argument = this.argument as bool?;
return processDownloads(ref, useWifi: argument);
} }
@override @override
bool operator ==(Object other) { bool operator ==(Object other) {
return other is DownloadChapterProvider && return other is ProcessDownloadsProvider && other.argument == argument;
other.chapter == chapter &&
other.useWifi == useWifi &&
other.callback == callback;
} }
@override @override
int get hashCode { int get hashCode {
var hash = _SystemHash.combine(0, runtimeType.hashCode); return argument.hashCode;
hash = _SystemHash.combine(hash, chapter.hashCode);
hash = _SystemHash.combine(hash, useWifi.hashCode);
hash = _SystemHash.combine(hash, callback.hashCode);
return _SystemHash.finish(hash);
} }
} }
@Deprecated('Will be removed in 3.0. Use Ref instead')
// ignore: unused_element
mixin DownloadChapterRef on AutoDisposeFutureProviderRef<void> {
/// The parameter `chapter` of this provider.
Chapter get chapter;
/// The parameter `useWifi` of this provider.
bool? get useWifi;
/// The parameter `callback` of this provider.
void Function()? get callback;
}
class _DownloadChapterProviderElement
extends AutoDisposeFutureProviderElement<void>
with DownloadChapterRef {
_DownloadChapterProviderElement(super.provider);
@override
Chapter get chapter => (origin as DownloadChapterProvider).chapter;
@override
bool? get useWifi => (origin as DownloadChapterProvider).useWifi;
@override
void Function()? get callback => (origin as DownloadChapterProvider).callback;
}
String _$processDownloadsHash() => r'ef5107f9674f2175a7aa18b8e4fc4555f3b6b584'; String _$processDownloadsHash() => r'ef5107f9674f2175a7aa18b8e4fc4555f3b6b584';
/// See also [processDownloads]. final class ProcessDownloadsFamily extends $Family
@ProviderFor(processDownloads) with $FunctionalFamilyOverride<FutureOr<void>, bool?> {
const processDownloadsProvider = ProcessDownloadsFamily(); const ProcessDownloadsFamily._()
: super(
/// See also [processDownloads]. retry: null,
class ProcessDownloadsFamily extends Family<AsyncValue<void>> {
/// See also [processDownloads].
const ProcessDownloadsFamily();
/// See also [processDownloads].
ProcessDownloadsProvider call({bool? useWifi}) {
return ProcessDownloadsProvider(useWifi: useWifi);
}
@override
ProcessDownloadsProvider getProviderOverride(
covariant ProcessDownloadsProvider provider,
) {
return call(useWifi: provider.useWifi);
}
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'processDownloadsProvider';
}
/// See also [processDownloads].
class ProcessDownloadsProvider extends AutoDisposeFutureProvider<void> {
/// See also [processDownloads].
ProcessDownloadsProvider({bool? useWifi})
: this._internal(
(ref) => processDownloads(ref as ProcessDownloadsRef, useWifi: useWifi),
from: processDownloadsProvider,
name: r'processDownloadsProvider', name: r'processDownloadsProvider',
debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product') dependencies: null,
? null $allTransitiveDependencies: null,
: _$processDownloadsHash, isAutoDispose: true,
dependencies: ProcessDownloadsFamily._dependencies,
allTransitiveDependencies:
ProcessDownloadsFamily._allTransitiveDependencies,
useWifi: useWifi,
); );
ProcessDownloadsProvider._internal( ProcessDownloadsProvider call({bool? useWifi}) =>
super._createNotifier, { ProcessDownloadsProvider._(argument: useWifi, from: this);
required super.name,
required super.dependencies,
required super.allTransitiveDependencies,
required super.debugGetCreateSourceHash,
required super.from,
required this.useWifi,
}) : super.internal();
final bool? useWifi;
@override @override
Override overrideWith( String toString() => r'processDownloadsProvider';
FutureOr<void> Function(ProcessDownloadsRef provider) create,
) {
return ProviderOverride(
origin: this,
override: ProcessDownloadsProvider._internal(
(ref) => create(ref as ProcessDownloadsRef),
from: from,
name: null,
dependencies: null,
allTransitiveDependencies: null,
debugGetCreateSourceHash: null,
useWifi: useWifi,
),
);
}
@override
AutoDisposeFutureProviderElement<void> createElement() {
return _ProcessDownloadsProviderElement(this);
}
@override
bool operator ==(Object other) {
return other is ProcessDownloadsProvider && other.useWifi == useWifi;
}
@override
int get hashCode {
var hash = _SystemHash.combine(0, runtimeType.hashCode);
hash = _SystemHash.combine(hash, useWifi.hashCode);
return _SystemHash.finish(hash);
}
} }
@Deprecated('Will be removed in 3.0. Use Ref instead')
// ignore: unused_element
mixin ProcessDownloadsRef on AutoDisposeFutureProviderRef<void> {
/// The parameter `useWifi` of this provider.
bool? get useWifi;
}
class _ProcessDownloadsProviderElement
extends AutoDisposeFutureProviderElement<void>
with ProcessDownloadsRef {
_ProcessDownloadsProviderElement(super.provider);
@override
bool? get useWifi => (origin as ProcessDownloadsProvider).useWifi;
}
// 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,25 +6,59 @@ part of 'state_provider.dart';
// RiverpodGenerator // RiverpodGenerator
// ************************************************************************** // **************************************************************************
// GENERATED CODE - DO NOT MODIFY BY HAND
// ignore_for_file: type=lint, type=warning
@ProviderFor(MangaHomeDisplayTypeState)
const mangaHomeDisplayTypeStateProvider = MangaHomeDisplayTypeStateProvider._();
final class MangaHomeDisplayTypeStateProvider
extends $NotifierProvider<MangaHomeDisplayTypeState, DisplayType> {
const MangaHomeDisplayTypeStateProvider._()
: super(
from: null,
argument: null,
retry: null,
name: r'mangaHomeDisplayTypeStateProvider',
isAutoDispose: true,
dependencies: null,
$allTransitiveDependencies: null,
);
@override
String debugGetCreateSourceHash() => _$mangaHomeDisplayTypeStateHash();
@$internal
@override
MangaHomeDisplayTypeState create() => MangaHomeDisplayTypeState();
/// {@macro riverpod.override_with_value}
Override overrideWithValue(DisplayType value) {
return $ProviderOverride(
origin: this,
providerOverride: $SyncValueProvider<DisplayType>(value),
);
}
}
String _$mangaHomeDisplayTypeStateHash() => String _$mangaHomeDisplayTypeStateHash() =>
r'6e91cef2e4a9925cab1a7a764ac6a0e741398fb2'; r'6e91cef2e4a9925cab1a7a764ac6a0e741398fb2';
/// See also [MangaHomeDisplayTypeState]. abstract class _$MangaHomeDisplayTypeState extends $Notifier<DisplayType> {
@ProviderFor(MangaHomeDisplayTypeState) DisplayType build();
final mangaHomeDisplayTypeStateProvider = @$mustCallSuper
AutoDisposeNotifierProvider< @override
MangaHomeDisplayTypeState, void runBuild() {
DisplayType final created = build();
>.internal( final ref = this.ref as $Ref<DisplayType, DisplayType>;
MangaHomeDisplayTypeState.new, final element =
name: r'mangaHomeDisplayTypeStateProvider', ref.element
debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product') as $ClassProviderElement<
? null AnyNotifier<DisplayType, DisplayType>,
: _$mangaHomeDisplayTypeStateHash, DisplayType,
dependencies: null, Object?,
allTransitiveDependencies: null, Object?
); >;
element.handleValue(ref, created);
typedef _$MangaHomeDisplayTypeState = AutoDisposeNotifier<DisplayType>; }
// 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,62 +6,169 @@ part of 'color_filter_provider.dart';
// RiverpodGenerator // RiverpodGenerator
// ************************************************************************** // **************************************************************************
// GENERATED CODE - DO NOT MODIFY BY HAND
// ignore_for_file: type=lint, type=warning
@ProviderFor(CustomColorFilterState)
const customColorFilterStateProvider = CustomColorFilterStateProvider._();
final class CustomColorFilterStateProvider
extends $NotifierProvider<CustomColorFilterState, CustomColorFilter?> {
const CustomColorFilterStateProvider._()
: super(
from: null,
argument: null,
retry: null,
name: r'customColorFilterStateProvider',
isAutoDispose: true,
dependencies: null,
$allTransitiveDependencies: null,
);
@override
String debugGetCreateSourceHash() => _$customColorFilterStateHash();
@$internal
@override
CustomColorFilterState create() => CustomColorFilterState();
/// {@macro riverpod.override_with_value}
Override overrideWithValue(CustomColorFilter? value) {
return $ProviderOverride(
origin: this,
providerOverride: $SyncValueProvider<CustomColorFilter?>(value),
);
}
}
String _$customColorFilterStateHash() => String _$customColorFilterStateHash() =>
r'e83ed3712f2f69c6ad15b2b3b10ff17cf8bb2898'; r'e83ed3712f2f69c6ad15b2b3b10ff17cf8bb2898';
/// See also [CustomColorFilterState]. abstract class _$CustomColorFilterState extends $Notifier<CustomColorFilter?> {
@ProviderFor(CustomColorFilterState) CustomColorFilter? build();
final customColorFilterStateProvider = @$mustCallSuper
AutoDisposeNotifierProvider< @override
CustomColorFilterState, void runBuild() {
CustomColorFilter? final created = build();
>.internal( final ref = this.ref as $Ref<CustomColorFilter?, CustomColorFilter?>;
CustomColorFilterState.new, final element =
name: r'customColorFilterStateProvider', ref.element
debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product') as $ClassProviderElement<
? null AnyNotifier<CustomColorFilter?, CustomColorFilter?>,
: _$customColorFilterStateHash, CustomColorFilter?,
dependencies: null, Object?,
allTransitiveDependencies: null, Object?
); >;
element.handleValue(ref, created);
}
}
@ProviderFor(EnableCustomColorFilterState)
const enableCustomColorFilterStateProvider =
EnableCustomColorFilterStateProvider._();
final class EnableCustomColorFilterStateProvider
extends $NotifierProvider<EnableCustomColorFilterState, bool> {
const EnableCustomColorFilterStateProvider._()
: super(
from: null,
argument: null,
retry: null,
name: r'enableCustomColorFilterStateProvider',
isAutoDispose: true,
dependencies: null,
$allTransitiveDependencies: null,
);
@override
String debugGetCreateSourceHash() => _$enableCustomColorFilterStateHash();
@$internal
@override
EnableCustomColorFilterState create() => EnableCustomColorFilterState();
/// {@macro riverpod.override_with_value}
Override overrideWithValue(bool value) {
return $ProviderOverride(
origin: this,
providerOverride: $SyncValueProvider<bool>(value),
);
}
}
typedef _$CustomColorFilterState = AutoDisposeNotifier<CustomColorFilter?>;
String _$enableCustomColorFilterStateHash() => String _$enableCustomColorFilterStateHash() =>
r'20579f0101c7f64051d63ea85813aeb068fdb3c9'; r'20579f0101c7f64051d63ea85813aeb068fdb3c9';
/// See also [EnableCustomColorFilterState]. abstract class _$EnableCustomColorFilterState extends $Notifier<bool> {
@ProviderFor(EnableCustomColorFilterState) bool build();
final enableCustomColorFilterStateProvider = @$mustCallSuper
AutoDisposeNotifierProvider<EnableCustomColorFilterState, bool>.internal( @override
EnableCustomColorFilterState.new, void runBuild() {
name: r'enableCustomColorFilterStateProvider', final created = build();
debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product') final ref = this.ref as $Ref<bool, bool>;
? null final element =
: _$enableCustomColorFilterStateHash, ref.element
dependencies: null, as $ClassProviderElement<
allTransitiveDependencies: null, AnyNotifier<bool, bool>,
); bool,
Object?,
Object?
>;
element.handleValue(ref, created);
}
}
@ProviderFor(ColorFilterBlendModeState)
const colorFilterBlendModeStateProvider = ColorFilterBlendModeStateProvider._();
final class ColorFilterBlendModeStateProvider
extends $NotifierProvider<ColorFilterBlendModeState, ColorFilterBlendMode> {
const ColorFilterBlendModeStateProvider._()
: super(
from: null,
argument: null,
retry: null,
name: r'colorFilterBlendModeStateProvider',
isAutoDispose: true,
dependencies: null,
$allTransitiveDependencies: null,
);
@override
String debugGetCreateSourceHash() => _$colorFilterBlendModeStateHash();
@$internal
@override
ColorFilterBlendModeState create() => ColorFilterBlendModeState();
/// {@macro riverpod.override_with_value}
Override overrideWithValue(ColorFilterBlendMode value) {
return $ProviderOverride(
origin: this,
providerOverride: $SyncValueProvider<ColorFilterBlendMode>(value),
);
}
}
typedef _$EnableCustomColorFilterState = AutoDisposeNotifier<bool>;
String _$colorFilterBlendModeStateHash() => String _$colorFilterBlendModeStateHash() =>
r'92e84b352b519dd32d1c418d7477a10a8921bc19'; r'92e84b352b519dd32d1c418d7477a10a8921bc19';
/// See also [ColorFilterBlendModeState]. abstract class _$ColorFilterBlendModeState
@ProviderFor(ColorFilterBlendModeState) extends $Notifier<ColorFilterBlendMode> {
final colorFilterBlendModeStateProvider = ColorFilterBlendMode build();
AutoDisposeNotifierProvider< @$mustCallSuper
ColorFilterBlendModeState, @override
ColorFilterBlendMode void runBuild() {
>.internal( final created = build();
ColorFilterBlendModeState.new, final ref = this.ref as $Ref<ColorFilterBlendMode, ColorFilterBlendMode>;
name: r'colorFilterBlendModeStateProvider', final element =
debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product') ref.element
? null as $ClassProviderElement<
: _$colorFilterBlendModeStateHash, AnyNotifier<ColorFilterBlendMode, ColorFilterBlendMode>,
dependencies: null, ColorFilterBlendMode,
allTransitiveDependencies: null, Object?,
); Object?
>;
typedef _$ColorFilterBlendModeState = AutoDisposeNotifier<ColorFilterBlendMode>; element.handleValue(ref, created);
// 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,6 @@ import 'package:mangayomi/src/rust/api/image.dart';
import 'package:mangayomi/src/rust/frb_generated.dart'; import 'package:mangayomi/src/rust/frb_generated.dart';
import 'package:mangayomi/utils/extensions/others.dart'; import 'package:mangayomi/utils/extensions/others.dart';
import 'package:riverpod_annotation/riverpod_annotation.dart'; import 'package:riverpod_annotation/riverpod_annotation.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
part 'crop_borders_provider.g.dart'; part 'crop_borders_provider.g.dart';
@Riverpod(keepAlive: true) @Riverpod(keepAlive: true)

View file

@ -6,166 +6,93 @@ part of 'crop_borders_provider.dart';
// RiverpodGenerator // RiverpodGenerator
// ************************************************************************** // **************************************************************************
String _$cropBordersHash() => r'04b24357737d6cc75caa38feca77bb5d41f00aa6'; // GENERATED CODE - DO NOT MODIFY BY HAND
// ignore_for_file: type=lint, type=warning
/// Copied from Dart SDK
class _SystemHash {
_SystemHash._();
static int combine(int hash, int value) {
// ignore: parameter_assignments
hash = 0x1fffffff & (hash + value);
// ignore: parameter_assignments
hash = 0x1fffffff & (hash + ((0x0007ffff & hash) << 10));
return hash ^ (hash >> 6);
}
static int finish(int hash) {
// ignore: parameter_assignments
hash = 0x1fffffff & (hash + ((0x03ffffff & hash) << 3));
// ignore: parameter_assignments
hash = hash ^ (hash >> 11);
return 0x1fffffff & (hash + ((0x00003fff & hash) << 15));
}
}
/// See also [cropBorders].
@ProviderFor(cropBorders) @ProviderFor(cropBorders)
const cropBordersProvider = CropBordersFamily(); const cropBordersProvider = CropBordersFamily._();
/// See also [cropBorders]. final class CropBordersProvider
class CropBordersFamily extends Family<AsyncValue<Uint8List?>> { extends
/// See also [cropBorders]. $FunctionalProvider<
const CropBordersFamily(); AsyncValue<Uint8List?>,
Uint8List?,
/// See also [cropBorders]. FutureOr<Uint8List?>
CropBordersProvider call({ >
required UChapDataPreload data, with $FutureModifier<Uint8List?>, $FutureProvider<Uint8List?> {
required bool cropBorder, const CropBordersProvider._({
}) { required CropBordersFamily super.from,
return CropBordersProvider(data: data, cropBorder: cropBorder); required ({UChapDataPreload data, bool cropBorder}) super.argument,
} }) : super(
retry: null,
@override
CropBordersProvider getProviderOverride(
covariant CropBordersProvider provider,
) {
return call(data: provider.data, cropBorder: provider.cropBorder);
}
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'cropBordersProvider';
}
/// See also [cropBorders].
class CropBordersProvider extends FutureProvider<Uint8List?> {
/// See also [cropBorders].
CropBordersProvider({
required UChapDataPreload data,
required bool cropBorder,
}) : this._internal(
(ref) => cropBorders(
ref as CropBordersRef,
data: data,
cropBorder: cropBorder,
),
from: cropBordersProvider,
name: r'cropBordersProvider', name: r'cropBordersProvider',
debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product') isAutoDispose: false,
? null dependencies: null,
: _$cropBordersHash, $allTransitiveDependencies: null,
dependencies: CropBordersFamily._dependencies,
allTransitiveDependencies:
CropBordersFamily._allTransitiveDependencies,
data: data,
cropBorder: cropBorder,
); );
CropBordersProvider._internal( @override
super._createNotifier, { String debugGetCreateSourceHash() => _$cropBordersHash();
required super.name,
required super.dependencies,
required super.allTransitiveDependencies,
required super.debugGetCreateSourceHash,
required super.from,
required this.data,
required this.cropBorder,
}) : super.internal();
final UChapDataPreload data;
final bool cropBorder;
@override @override
Override overrideWith( String toString() {
FutureOr<Uint8List?> Function(CropBordersRef provider) create, return r'cropBordersProvider'
) { ''
return ProviderOverride( '$argument';
origin: this, }
override: CropBordersProvider._internal(
(ref) => create(ref as CropBordersRef), @$internal
from: from, @override
name: null, $FutureProviderElement<Uint8List?> $createElement($ProviderPointer pointer) =>
dependencies: null, $FutureProviderElement(pointer);
allTransitiveDependencies: null,
debugGetCreateSourceHash: null, @override
data: data, FutureOr<Uint8List?> create(Ref ref) {
cropBorder: cropBorder, final argument =
), this.argument as ({UChapDataPreload data, bool cropBorder});
return cropBorders(
ref,
data: argument.data,
cropBorder: argument.cropBorder,
); );
} }
@override
FutureProviderElement<Uint8List?> createElement() {
return _CropBordersProviderElement(this);
}
@override @override
bool operator ==(Object other) { bool operator ==(Object other) {
return other is CropBordersProvider && return other is CropBordersProvider && other.argument == argument;
other.data == data &&
other.cropBorder == cropBorder;
} }
@override @override
int get hashCode { int get hashCode {
var hash = _SystemHash.combine(0, runtimeType.hashCode); return argument.hashCode;
hash = _SystemHash.combine(hash, data.hashCode);
hash = _SystemHash.combine(hash, cropBorder.hashCode);
return _SystemHash.finish(hash);
} }
} }
@Deprecated('Will be removed in 3.0. Use Ref instead') String _$cropBordersHash() => r'04b24357737d6cc75caa38feca77bb5d41f00aa6';
// ignore: unused_element
mixin CropBordersRef on FutureProviderRef<Uint8List?> {
/// The parameter `data` of this provider.
UChapDataPreload get data;
/// The parameter `cropBorder` of this provider. final class CropBordersFamily extends $Family
bool get cropBorder; with
} $FunctionalFamilyOverride<
FutureOr<Uint8List?>,
({UChapDataPreload data, bool cropBorder})
> {
const CropBordersFamily._()
: super(
retry: null,
name: r'cropBordersProvider',
dependencies: null,
$allTransitiveDependencies: null,
isAutoDispose: false,
);
class _CropBordersProviderElement extends FutureProviderElement<Uint8List?> CropBordersProvider call({
with CropBordersRef { required UChapDataPreload data,
_CropBordersProviderElement(super.provider); required bool cropBorder,
}) => CropBordersProvider._(
argument: (data: data, cropBorder: cropBorder),
from: this,
);
@override @override
UChapDataPreload get data => (origin as CropBordersProvider).data; String toString() => r'cropBordersProvider';
@override
bool get cropBorder => (origin as CropBordersProvider).cropBorder;
} }
// 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

@ -1,7 +1,8 @@
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:mangayomi/main.dart'; import 'package:mangayomi/main.dart';
import 'package:mangayomi/models/chapter.dart'; import 'package:mangayomi/models/chapter.dart';
import 'package:mangayomi/services/get_chapter_pages.dart'; import 'package:mangayomi/services/get_chapter_pages.dart';
import 'package:riverpod_annotation/riverpod_annotation.dart';
part 'manga_reader_provider.g.dart';
class ChapterWithPages { class ChapterWithPages {
final Chapter chapter; final Chapter chapter;
@ -10,21 +11,14 @@ class ChapterWithPages {
ChapterWithPages({required this.chapter, required this.pages}); ChapterWithPages({required this.chapter, required this.pages});
} }
class MangaReaderController extends FamilyAsyncNotifier<ChapterWithPages, int> { @riverpod
@override Future<ChapterWithPages> mangaReader(Ref ref, int chapterId) async {
Future<ChapterWithPages> build(int chapterId) async { final chap = await isar.chapters.get(chapterId);
final chap = await isar.chapters.get(chapterId); if (chap == null) {
if (chap == null) { throw Exception('Chapter #$chapterId not found');
throw Exception('Chapter #$chapterId not found');
}
final pages = await ref.read(getChapterPagesProvider(chapter: chap).future);
return ChapterWithPages(chapter: chap, pages: pages);
} }
}
final mangaReaderProvider = final pages = await ref.read(getChapterPagesProvider(chapter: chap).future);
AsyncNotifierProvider.family<MangaReaderController, ChapterWithPages, int>(
MangaReaderController.new, return ChapterWithPages(chapter: chap, pages: pages);
); }

View file

@ -0,0 +1,85 @@
// GENERATED CODE - DO NOT MODIFY BY HAND
part of 'manga_reader_provider.dart';
// **************************************************************************
// RiverpodGenerator
// **************************************************************************
// GENERATED CODE - DO NOT MODIFY BY HAND
// ignore_for_file: type=lint, type=warning
@ProviderFor(mangaReader)
const mangaReaderProvider = MangaReaderFamily._();
final class MangaReaderProvider
extends
$FunctionalProvider<
AsyncValue<ChapterWithPages>,
ChapterWithPages,
FutureOr<ChapterWithPages>
>
with $FutureModifier<ChapterWithPages>, $FutureProvider<ChapterWithPages> {
const MangaReaderProvider._({
required MangaReaderFamily super.from,
required int super.argument,
}) : super(
retry: null,
name: r'mangaReaderProvider',
isAutoDispose: true,
dependencies: null,
$allTransitiveDependencies: null,
);
@override
String debugGetCreateSourceHash() => _$mangaReaderHash();
@override
String toString() {
return r'mangaReaderProvider'
''
'($argument)';
}
@$internal
@override
$FutureProviderElement<ChapterWithPages> $createElement(
$ProviderPointer pointer,
) => $FutureProviderElement(pointer);
@override
FutureOr<ChapterWithPages> create(Ref ref) {
final argument = this.argument as int;
return mangaReader(ref, argument);
}
@override
bool operator ==(Object other) {
return other is MangaReaderProvider && other.argument == argument;
}
@override
int get hashCode {
return argument.hashCode;
}
}
String _$mangaReaderHash() => r'cf8c44c6c3567ba4e9a0e08137ab2f29b71307eb';
final class MangaReaderFamily extends $Family
with $FunctionalFamilyOverride<FutureOr<ChapterWithPages>, int> {
const MangaReaderFamily._()
: super(
retry: null,
name: r'mangaReaderProvider',
dependencies: null,
$allTransitiveDependencies: null,
isAutoDispose: true,
);
MangaReaderProvider call(int chapterId) =>
MangaReaderProvider._(argument: chapterId, from: this);
@override
String toString() => r'mangaReaderProvider';
}

View file

@ -1,6 +1,6 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:go_router/go_router.dart'; import 'package:go_router/go_router.dart';
import 'package:isar/isar.dart'; import 'package:isar_community/isar.dart';
import 'package:mangayomi/main.dart'; import 'package:mangayomi/main.dart';
import 'package:mangayomi/models/chapter.dart'; import 'package:mangayomi/models/chapter.dart';
import 'package:mangayomi/models/manga.dart'; import 'package:mangayomi/models/manga.dart';

View file

@ -1,6 +1,7 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:isar/isar.dart'; import 'package:flutter_riverpod/misc.dart';
import 'package:isar_community/isar.dart';
import 'package:mangayomi/main.dart'; import 'package:mangayomi/main.dart';
import 'package:mangayomi/models/chapter.dart'; import 'package:mangayomi/models/chapter.dart';
import 'package:mangayomi/models/download.dart'; import 'package:mangayomi/models/download.dart';
@ -27,7 +28,7 @@ class CurrentIndex extends _$CurrentIndex {
.getPageIndex(); .getPageIndex();
} }
setCurrentIndex(int currentIndex) { void setCurrentIndex(int currentIndex) {
state = currentIndex; state = currentIndex;
} }
} }
@ -46,7 +47,14 @@ BoxFit getBoxFit(ScaleType scaleType) {
@riverpod @riverpod
class ReaderController extends _$ReaderController { class ReaderController extends _$ReaderController {
@override @override
void build({required Chapter chapter}) {} KeepAliveLink build({required Chapter chapter}) {
_keepAliveLink = ref.keepAlive();
return _keepAliveLink!;
}
KeepAliveLink? _keepAliveLink;
KeepAliveLink? get keepAliveLink => _keepAliveLink;
Manga getManga() { Manga getManga() {
return chapter.manga.value!; return chapter.manga.value!;
@ -440,6 +448,7 @@ extension ChapterExtensions on Chapter {
trackStateProvider( trackStateProvider(
track: track, track: track,
itemType: manga.itemType, itemType: manga.itemType,
widgetRef: ref,
).notifier, ).notifier,
) )
.updateManga(); .updateManga();

View file

@ -6,286 +6,193 @@ part of 'reader_controller_provider.dart';
// RiverpodGenerator // RiverpodGenerator
// ************************************************************************** // **************************************************************************
String _$currentIndexHash() => r'7cf7d12cc79f02fec4de750e4aedf5c9e09e5284'; // GENERATED CODE - DO NOT MODIFY BY HAND
// ignore_for_file: type=lint, type=warning
/// Copied from Dart SDK @ProviderFor(CurrentIndex)
class _SystemHash { const currentIndexProvider = CurrentIndexFamily._();
_SystemHash._();
static int combine(int hash, int value) { final class CurrentIndexProvider extends $NotifierProvider<CurrentIndex, int> {
// ignore: parameter_assignments const CurrentIndexProvider._({
hash = 0x1fffffff & (hash + value); required CurrentIndexFamily super.from,
// ignore: parameter_assignments required Chapter super.argument,
hash = 0x1fffffff & (hash + ((0x0007ffff & hash) << 10)); }) : super(
return hash ^ (hash >> 6); retry: null,
name: r'currentIndexProvider',
isAutoDispose: true,
dependencies: null,
$allTransitiveDependencies: null,
);
@override
String debugGetCreateSourceHash() => _$currentIndexHash();
@override
String toString() {
return r'currentIndexProvider'
''
'($argument)';
} }
static int finish(int hash) { @$internal
// ignore: parameter_assignments @override
hash = 0x1fffffff & (hash + ((0x03ffffff & hash) << 3)); CurrentIndex create() => CurrentIndex();
// ignore: parameter_assignments
hash = hash ^ (hash >> 11); /// {@macro riverpod.override_with_value}
return 0x1fffffff & (hash + ((0x00003fff & hash) << 15)); Override overrideWithValue(int value) {
return $ProviderOverride(
origin: this,
providerOverride: $SyncValueProvider<int>(value),
);
}
@override
bool operator ==(Object other) {
return other is CurrentIndexProvider && other.argument == argument;
}
@override
int get hashCode {
return argument.hashCode;
} }
} }
abstract class _$CurrentIndex extends BuildlessAutoDisposeNotifier<int> { String _$currentIndexHash() => r'e0b5e5b8a2afa5e8df699784009720334e1c9e80';
late final Chapter chapter;
final class CurrentIndexFamily extends $Family
with $ClassFamilyOverride<CurrentIndex, int, int, int, Chapter> {
const CurrentIndexFamily._()
: super(
retry: null,
name: r'currentIndexProvider',
dependencies: null,
$allTransitiveDependencies: null,
isAutoDispose: true,
);
CurrentIndexProvider call(Chapter chapter) =>
CurrentIndexProvider._(argument: chapter, from: this);
@override
String toString() => r'currentIndexProvider';
}
abstract class _$CurrentIndex extends $Notifier<int> {
late final _$args = ref.$arg as Chapter;
Chapter get chapter => _$args;
int build(Chapter chapter); int build(Chapter chapter);
} @$mustCallSuper
/// See also [CurrentIndex].
@ProviderFor(CurrentIndex)
const currentIndexProvider = CurrentIndexFamily();
/// See also [CurrentIndex].
class CurrentIndexFamily extends Family<int> {
/// See also [CurrentIndex].
const CurrentIndexFamily();
/// See also [CurrentIndex].
CurrentIndexProvider call(Chapter chapter) {
return CurrentIndexProvider(chapter);
}
@override @override
CurrentIndexProvider getProviderOverride( void runBuild() {
covariant CurrentIndexProvider provider, final created = build(_$args);
) { final ref = this.ref as $Ref<int, int>;
return call(provider.chapter); final element =
} ref.element
as $ClassProviderElement<
static const Iterable<ProviderOrFamily>? _dependencies = null; AnyNotifier<int, int>,
int,
@override Object?,
Iterable<ProviderOrFamily>? get dependencies => _dependencies; Object?
>;
static const Iterable<ProviderOrFamily>? _allTransitiveDependencies = null; element.handleValue(ref, created);
@override
Iterable<ProviderOrFamily>? get allTransitiveDependencies =>
_allTransitiveDependencies;
@override
String? get name => r'currentIndexProvider';
}
/// See also [CurrentIndex].
class CurrentIndexProvider
extends AutoDisposeNotifierProviderImpl<CurrentIndex, int> {
/// See also [CurrentIndex].
CurrentIndexProvider(Chapter chapter)
: this._internal(
() => CurrentIndex()..chapter = chapter,
from: currentIndexProvider,
name: r'currentIndexProvider',
debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product')
? null
: _$currentIndexHash,
dependencies: CurrentIndexFamily._dependencies,
allTransitiveDependencies:
CurrentIndexFamily._allTransitiveDependencies,
chapter: chapter,
);
CurrentIndexProvider._internal(
super._createNotifier, {
required super.name,
required super.dependencies,
required super.allTransitiveDependencies,
required super.debugGetCreateSourceHash,
required super.from,
required this.chapter,
}) : super.internal();
final Chapter chapter;
@override
int runNotifierBuild(covariant CurrentIndex notifier) {
return notifier.build(chapter);
}
@override
Override overrideWith(CurrentIndex Function() create) {
return ProviderOverride(
origin: this,
override: CurrentIndexProvider._internal(
() => create()..chapter = chapter,
from: from,
name: null,
dependencies: null,
allTransitiveDependencies: null,
debugGetCreateSourceHash: null,
chapter: chapter,
),
);
}
@override
AutoDisposeNotifierProviderElement<CurrentIndex, int> createElement() {
return _CurrentIndexProviderElement(this);
}
@override
bool operator ==(Object other) {
return other is CurrentIndexProvider && other.chapter == chapter;
}
@override
int get hashCode {
var hash = _SystemHash.combine(0, runtimeType.hashCode);
hash = _SystemHash.combine(hash, chapter.hashCode);
return _SystemHash.finish(hash);
} }
} }
@Deprecated('Will be removed in 3.0. Use Ref instead')
// ignore: unused_element
mixin CurrentIndexRef on AutoDisposeNotifierProviderRef<int> {
/// The parameter `chapter` of this provider.
Chapter get chapter;
}
class _CurrentIndexProviderElement
extends AutoDisposeNotifierProviderElement<CurrentIndex, int>
with CurrentIndexRef {
_CurrentIndexProviderElement(super.provider);
@override
Chapter get chapter => (origin as CurrentIndexProvider).chapter;
}
String _$readerControllerHash() => r'8b2995dcf849eddff308a105a2e06c9534096fac';
abstract class _$ReaderController extends BuildlessAutoDisposeNotifier<void> {
late final Chapter chapter;
void build({required Chapter chapter});
}
/// See also [ReaderController].
@ProviderFor(ReaderController) @ProviderFor(ReaderController)
const readerControllerProvider = ReaderControllerFamily(); const readerControllerProvider = ReaderControllerFamily._();
/// See also [ReaderController]. final class ReaderControllerProvider
class ReaderControllerFamily extends Family<void> { extends $NotifierProvider<ReaderController, KeepAliveLink> {
/// See also [ReaderController]. const ReaderControllerProvider._({
const ReaderControllerFamily(); required ReaderControllerFamily super.from,
required Chapter super.argument,
}) : super(
retry: null,
name: r'readerControllerProvider',
isAutoDispose: true,
dependencies: null,
$allTransitiveDependencies: null,
);
/// See also [ReaderController]. @override
ReaderControllerProvider call({required Chapter chapter}) { String debugGetCreateSourceHash() => _$readerControllerHash();
return ReaderControllerProvider(chapter: chapter);
@override
String toString() {
return r'readerControllerProvider'
''
'($argument)';
} }
@$internal
@override @override
ReaderControllerProvider getProviderOverride( ReaderController create() => ReaderController();
covariant ReaderControllerProvider provider,
) {
return call(chapter: provider.chapter);
}
static const Iterable<ProviderOrFamily>? _dependencies = null; /// {@macro riverpod.override_with_value}
Override overrideWithValue(KeepAliveLink value) {
@override return $ProviderOverride(
Iterable<ProviderOrFamily>? get dependencies => _dependencies;
static const Iterable<ProviderOrFamily>? _allTransitiveDependencies = null;
@override
Iterable<ProviderOrFamily>? get allTransitiveDependencies =>
_allTransitiveDependencies;
@override
String? get name => r'readerControllerProvider';
}
/// See also [ReaderController].
class ReaderControllerProvider
extends AutoDisposeNotifierProviderImpl<ReaderController, void> {
/// See also [ReaderController].
ReaderControllerProvider({required Chapter chapter})
: this._internal(
() => ReaderController()..chapter = chapter,
from: readerControllerProvider,
name: r'readerControllerProvider',
debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product')
? null
: _$readerControllerHash,
dependencies: ReaderControllerFamily._dependencies,
allTransitiveDependencies:
ReaderControllerFamily._allTransitiveDependencies,
chapter: chapter,
);
ReaderControllerProvider._internal(
super._createNotifier, {
required super.name,
required super.dependencies,
required super.allTransitiveDependencies,
required super.debugGetCreateSourceHash,
required super.from,
required this.chapter,
}) : super.internal();
final Chapter chapter;
@override
void runNotifierBuild(covariant ReaderController notifier) {
return notifier.build(chapter: chapter);
}
@override
Override overrideWith(ReaderController Function() create) {
return ProviderOverride(
origin: this, origin: this,
override: ReaderControllerProvider._internal( providerOverride: $SyncValueProvider<KeepAliveLink>(value),
() => create()..chapter = chapter,
from: from,
name: null,
dependencies: null,
allTransitiveDependencies: null,
debugGetCreateSourceHash: null,
chapter: chapter,
),
); );
} }
@override
AutoDisposeNotifierProviderElement<ReaderController, void> createElement() {
return _ReaderControllerProviderElement(this);
}
@override @override
bool operator ==(Object other) { bool operator ==(Object other) {
return other is ReaderControllerProvider && other.chapter == chapter; return other is ReaderControllerProvider && other.argument == argument;
} }
@override @override
int get hashCode { int get hashCode {
var hash = _SystemHash.combine(0, runtimeType.hashCode); return argument.hashCode;
hash = _SystemHash.combine(hash, chapter.hashCode);
return _SystemHash.finish(hash);
} }
} }
@Deprecated('Will be removed in 3.0. Use Ref instead') String _$readerControllerHash() => r'25b13bbbbd961a5c3dbae3cc0ea58017d7bb5ce8';
// ignore: unused_element
mixin ReaderControllerRef on AutoDisposeNotifierProviderRef<void> {
/// The parameter `chapter` of this provider.
Chapter get chapter;
}
class _ReaderControllerProviderElement final class ReaderControllerFamily extends $Family
extends AutoDisposeNotifierProviderElement<ReaderController, void> with
with ReaderControllerRef { $ClassFamilyOverride<
_ReaderControllerProviderElement(super.provider); ReaderController,
KeepAliveLink,
KeepAliveLink,
KeepAliveLink,
Chapter
> {
const ReaderControllerFamily._()
: super(
retry: null,
name: r'readerControllerProvider',
dependencies: null,
$allTransitiveDependencies: null,
isAutoDispose: true,
);
ReaderControllerProvider call({required Chapter chapter}) =>
ReaderControllerProvider._(argument: chapter, from: this);
@override @override
Chapter get chapter => (origin as ReaderControllerProvider).chapter; String toString() => r'readerControllerProvider';
} }
// ignore_for_file: type=lint abstract class _$ReaderController extends $Notifier<KeepAliveLink> {
// 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 late final _$args = ref.$arg as Chapter;
Chapter get chapter => _$args;
KeepAliveLink build({required Chapter chapter});
@$mustCallSuper
@override
void runBuild() {
final created = build(chapter: _$args);
final ref = this.ref as $Ref<KeepAliveLink, KeepAliveLink>;
final element =
ref.element
as $ClassProviderElement<
AnyNotifier<KeepAliveLink, KeepAliveLink>,
KeepAliveLink,
Object?,
Object?
>;
element.handleValue(ref, created);
}
}

Some files were not shown because too many files have changed in this diff Show more