Refactor and update dependencies for Isar and Riverpod

This commit is contained in:
Moustapha Kodjo Amadou 2025-10-29 13:08:42 +01:00
parent 55ac972989
commit 430e81e021
311 changed files with 11986 additions and 19418 deletions

View file

@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
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 {
id "dev.flutter.flutter-plugin-loader" version "1.0.0"
id "com.android.application" version "8.9.1" apply false
id "org.jetbrains.kotlin.android" version "2.1.0" apply false
id "com.android.application" version "8.12.1" apply false
id "org.jetbrains.kotlin.android" version "2.2.0" apply false
}
include ":app"

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -44,7 +44,7 @@ const ChangedPartSchema = CollectionSchema(
getId: _changedPartGetId,
getLinks: _changedPartGetLinks,
attach: _changedPartAttach,
version: '3.1.0+1',
version: '3.3.0-dev.3',
);
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';
part 'chapter.g.dart';

View file

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

View file

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

View file

@ -58,7 +58,7 @@ const CustomButtonSchema = CollectionSchema(
getId: _customButtonGetId,
getLinks: _customButtonGetLinks,
attach: _customButtonAttach,
version: '3.1.0+1',
version: '3.3.0-dev.3',
);
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';
part 'download.g.dart';

View file

@ -55,7 +55,7 @@ const DownloadSchema = CollectionSchema(
getId: _downloadGetId,
getLinks: _downloadGetLinks,
attach: _downloadAttach,
version: '3.1.0+1',
version: '3.3.0-dev.3',
);
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/manga.dart';
part 'history.g.dart';

View file

@ -57,7 +57,7 @@ const HistorySchema = CollectionSchema(
getId: _historyGetId,
getLinks: _historyGetLinks,
attach: _historyAttach,
version: '3.1.0+1',
version: '3.3.0-dev.3',
);
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';
part 'manga.g.dart';

View file

@ -112,7 +112,7 @@ const MangaSchema = CollectionSchema(
getId: _mangaGetId,
getLinks: _mangaGetLinks,
attach: _mangaAttach,
version: '3.1.0+1',
version: '3.3.0-dev.3',
);
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/utils/constant.dart';
part 'settings.g.dart';
@ -281,7 +281,7 @@ class Settings {
late AudioChannel audioChannels;
int? volumeBoostCap;
bool? downloadedOnlyMode;
late AlgorithmWeights? algorithmWeights;

View file

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

View file

@ -1,6 +1,6 @@
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/m_source.dart';
import 'package:mangayomi/models/manga.dart';
@ -216,9 +216,4 @@ class Source {
}
}
enum SourceCodeLanguage {
dart,
javascript,
mihon,
lnreader
}
enum SourceCodeLanguage { dart, javascript, mihon, lnreader }

View file

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

View file

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

View file

@ -74,7 +74,7 @@ const SyncPreferenceSchema = CollectionSchema(
getId: _syncPreferenceGetId,
getLinks: _syncPreferenceGetLinks,
attach: _syncPreferenceAttach,
version: '3.1.0+1',
version: '3.3.0-dev.3',
);
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';
part 'track.g.dart';

View file

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

View file

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

View file

@ -43,7 +43,7 @@ const TrackPreferenceSchema = CollectionSchema(
getId: _trackPreferenceGetId,
getLinks: _trackPreferenceGetLinks,
attach: _trackPreferenceAttach,
version: '3.1.0+1',
version: '3.3.0-dev.3',
);
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';
part 'update.g.dart';

View file

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

View file

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

View file

@ -1,5 +1,5 @@
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/models/chapter.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/services/aniskip.dart';
import 'package:mangayomi/utils/chapter_recognition.dart';
import 'package:mangayomi/utils/riverpod.dart';
import 'package:riverpod_annotation/riverpod_annotation.dart';
part 'anime_player_controller_provider.g.dart';
final fullscreenProvider = StateProvider<bool>((ref) => false);
final fullscreenProvider = StateProvider<bool>(() => false);
@riverpod
class AnimeStreamController extends _$AnimeStreamController {
@override
void build({required Chapter episode}) {}
KeepAliveLink build({required Chapter episode}) {
_keepAliveLink = ref.keepAlive();
return _keepAliveLink!;
}
KeepAliveLink? _keepAliveLink;
KeepAliveLink? get keepAliveLink => _keepAliveLink;
Manga getAnime() {
return episode.manga.value!;
}

View file

@ -6,159 +6,104 @@ part of 'anime_player_controller_provider.dart';
// RiverpodGenerator
// **************************************************************************
String _$animeStreamControllerHash() =>
r'46cc71afefa3b3c060f7a28c61dc13e1d0b94999';
// 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 _$AnimeStreamController
extends BuildlessAutoDisposeNotifier<void> {
late final Chapter episode;
void build({required Chapter episode});
}
/// See also [AnimeStreamController].
@ProviderFor(AnimeStreamController)
const animeStreamControllerProvider = AnimeStreamControllerFamily();
const animeStreamControllerProvider = AnimeStreamControllerFamily._();
/// See also [AnimeStreamController].
class AnimeStreamControllerFamily extends Family<void> {
/// See also [AnimeStreamController].
const AnimeStreamControllerFamily();
final class AnimeStreamControllerProvider
extends $NotifierProvider<AnimeStreamController, KeepAliveLink> {
const AnimeStreamControllerProvider._({
required AnimeStreamControllerFamily super.from,
required Chapter super.argument,
}) : super(
retry: null,
name: r'animeStreamControllerProvider',
isAutoDispose: true,
dependencies: null,
$allTransitiveDependencies: null,
);
/// See also [AnimeStreamController].
AnimeStreamControllerProvider call({required Chapter episode}) {
return AnimeStreamControllerProvider(episode: episode);
@override
String debugGetCreateSourceHash() => _$animeStreamControllerHash();
@override
String toString() {
return r'animeStreamControllerProvider'
''
'($argument)';
}
@$internal
@override
AnimeStreamControllerProvider getProviderOverride(
covariant AnimeStreamControllerProvider provider,
) {
return call(episode: provider.episode);
}
AnimeStreamController create() => AnimeStreamController();
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'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(
/// {@macro riverpod.override_with_value}
Override overrideWithValue(KeepAliveLink value) {
return $ProviderOverride(
origin: this,
override: AnimeStreamControllerProvider._internal(
() => create()..episode = episode,
from: from,
name: null,
dependencies: null,
allTransitiveDependencies: null,
debugGetCreateSourceHash: null,
episode: episode,
),
providerOverride: $SyncValueProvider<KeepAliveLink>(value),
);
}
@override
AutoDisposeNotifierProviderElement<AnimeStreamController, void>
createElement() {
return _AnimeStreamControllerProviderElement(this);
}
@override
bool operator ==(Object other) {
return other is AnimeStreamControllerProvider && other.episode == episode;
return other is AnimeStreamControllerProvider && other.argument == argument;
}
@override
int get hashCode {
var hash = _SystemHash.combine(0, runtimeType.hashCode);
hash = _SystemHash.combine(hash, episode.hashCode);
return _SystemHash.finish(hash);
return argument.hashCode;
}
}
@Deprecated('Will be removed in 3.0. Use Ref instead')
// ignore: unused_element
mixin AnimeStreamControllerRef on AutoDisposeNotifierProviderRef<void> {
/// The parameter `episode` of this provider.
Chapter get episode;
}
String _$animeStreamControllerHash() =>
r'486889b2b9f71759e4d9ff147b039436572cc01e';
class _AnimeStreamControllerProviderElement
extends AutoDisposeNotifierProviderElement<AnimeStreamController, void>
with AnimeStreamControllerRef {
_AnimeStreamControllerProviderElement(super.provider);
final class AnimeStreamControllerFamily extends $Family
with
$ClassFamilyOverride<
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
Chapter get episode => (origin as AnimeStreamControllerProvider).episode;
String toString() => r'animeStreamControllerProvider';
}
// 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
abstract class _$AnimeStreamController extends $Notifier<KeepAliveLink> {
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
// **************************************************************************
// 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() =>
r'410485b55561b7a307c7a55f6798bca225f39830';
/// See also [SubtitleSettingsState].
@ProviderFor(SubtitleSettingsState)
final subtitleSettingsStateProvider =
AutoDisposeNotifierProvider<
SubtitleSettingsState,
PlayerSubtitleSettings
>.internal(
SubtitleSettingsState.new,
name: r'subtitleSettingsStateProvider',
debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product')
? null
: _$subtitleSettingsStateHash,
dependencies: null,
allTransitiveDependencies: null,
);
typedef _$SubtitleSettingsState = AutoDisposeNotifier<PlayerSubtitleSettings>;
// 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
abstract class _$SubtitleSettingsState
extends $Notifier<PlayerSubtitleSettings> {
PlayerSubtitleSettings build();
@$mustCallSuper
@override
void runBuild() {
final created = build();
final ref =
this.ref as $Ref<PlayerSubtitleSettings, PlayerSubtitleSettings>;
final element =
ref.element
as $ClassProviderElement<
AnyNotifier<PlayerSubtitleSettings, PlayerSubtitleSettings>,
PlayerSubtitleSettings,
Object?,
Object?
>;
element.handleValue(ref, created);
}
}

View file

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

View file

@ -1,7 +1,7 @@
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.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/models/manga.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();
}

View file

@ -1,7 +1,7 @@
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.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/source_preference.dart';
import 'package:mangayomi/main.dart';

View file

@ -1,6 +1,6 @@
import 'package:flutter/material.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/models/manga.dart';
import 'package:mangayomi/models/source.dart';

View file

@ -1,6 +1,6 @@
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/main.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);
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/models/manga.dart';
import 'package:mangayomi/models/settings.dart';
import 'package:mangayomi/models/source.dart';
import 'package:riverpod_annotation/riverpod_annotation.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
part 'extensions_provider.g.dart';
@riverpod

View file

@ -6,148 +6,81 @@ part of 'extensions_provider.dart';
// RiverpodGenerator
// **************************************************************************
String _$getExtensionsStreamHash() =>
r'18790d3d4a7f52e5e7239c8726dcd09bb51d803a';
// 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 [getExtensionsStream].
@ProviderFor(getExtensionsStream)
const getExtensionsStreamProvider = GetExtensionsStreamFamily();
const getExtensionsStreamProvider = GetExtensionsStreamFamily._();
/// See also [getExtensionsStream].
class GetExtensionsStreamFamily extends Family<AsyncValue<List<Source>>> {
/// See also [getExtensionsStream].
const GetExtensionsStreamFamily();
final class GetExtensionsStreamProvider
extends
$FunctionalProvider<
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].
GetExtensionsStreamProvider call(ItemType itemType) {
return GetExtensionsStreamProvider(itemType);
@override
String debugGetCreateSourceHash() => _$getExtensionsStreamHash();
@override
String toString() {
return r'getExtensionsStreamProvider'
''
'($argument)';
}
@$internal
@override
GetExtensionsStreamProvider getProviderOverride(
covariant GetExtensionsStreamProvider provider,
) {
return call(provider.itemType);
}
static const Iterable<ProviderOrFamily>? _dependencies = null;
$StreamProviderElement<List<Source>> $createElement(
$ProviderPointer pointer,
) => $StreamProviderElement(pointer);
@override
Iterable<ProviderOrFamily>? get dependencies => _dependencies;
static const Iterable<ProviderOrFamily>? _allTransitiveDependencies = null;
@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);
Stream<List<Source>> create(Ref ref) {
final argument = this.argument as ItemType;
return getExtensionsStream(ref, argument);
}
@override
bool operator ==(Object other) {
return other is GetExtensionsStreamProvider && other.itemType == itemType;
return other is GetExtensionsStreamProvider && other.argument == argument;
}
@override
int get hashCode {
var hash = _SystemHash.combine(0, runtimeType.hashCode);
hash = _SystemHash.combine(hash, itemType.hashCode);
return _SystemHash.finish(hash);
return argument.hashCode;
}
}
@Deprecated('Will be removed in 3.0. Use Ref instead')
// ignore: unused_element
mixin GetExtensionsStreamRef on AutoDisposeStreamProviderRef<List<Source>> {
/// The parameter `itemType` of this provider.
ItemType get itemType;
}
String _$getExtensionsStreamHash() =>
r'18790d3d4a7f52e5e7239c8726dcd09bb51d803a';
class _GetExtensionsStreamProviderElement
extends AutoDisposeStreamProviderElement<List<Source>>
with GetExtensionsStreamRef {
_GetExtensionsStreamProviderElement(super.provider);
final class GetExtensionsStreamFamily extends $Family
with $FunctionalFamilyOverride<Stream<List<Source>>, ItemType> {
const GetExtensionsStreamFamily._()
: super(
retry: null,
name: r'getExtensionsStreamProvider',
dependencies: null,
$allTransitiveDependencies: null,
isAutoDispose: true,
);
GetExtensionsStreamProvider call(ItemType itemType) =>
GetExtensionsStreamProvider._(argument: itemType, from: this);
@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_riverpod/flutter_riverpod.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/main.dart';
import 'package:mangayomi/models/changed.dart';

View file

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

View file

@ -1,7 +1,7 @@
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.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/models/manga.dart';
import 'package:mangayomi/models/source.dart';

View file

@ -1,7 +1,7 @@
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.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/models/manga.dart';
import 'package:mangayomi/models/source.dart';

View file

@ -1,7 +1,7 @@
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.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/models/manga.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_riverpod/flutter_riverpod.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/manga.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/models/manga.dart';
import 'package:riverpod_annotation/riverpod_annotation.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
part 'calendar_provider.g.dart';
@riverpod

View file

@ -6,147 +6,80 @@ part of 'calendar_provider.dart';
// 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)
const getCalendarStreamProvider = GetCalendarStreamFamily();
const getCalendarStreamProvider = GetCalendarStreamFamily._();
/// See also [getCalendarStream].
class GetCalendarStreamFamily extends Family<AsyncValue<List<Manga>>> {
/// See also [getCalendarStream].
const GetCalendarStreamFamily();
final class GetCalendarStreamProvider
extends
$FunctionalProvider<
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].
GetCalendarStreamProvider call({ItemType? itemType}) {
return GetCalendarStreamProvider(itemType: itemType);
@override
String debugGetCreateSourceHash() => _$getCalendarStreamHash();
@override
String toString() {
return r'getCalendarStreamProvider'
''
'($argument)';
}
@$internal
@override
GetCalendarStreamProvider getProviderOverride(
covariant GetCalendarStreamProvider provider,
) {
return call(itemType: provider.itemType);
}
static const Iterable<ProviderOrFamily>? _dependencies = null;
$StreamProviderElement<List<Manga>> $createElement(
$ProviderPointer pointer,
) => $StreamProviderElement(pointer);
@override
Iterable<ProviderOrFamily>? get dependencies => _dependencies;
static const Iterable<ProviderOrFamily>? _allTransitiveDependencies = null;
@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);
Stream<List<Manga>> create(Ref ref) {
final argument = this.argument as ItemType?;
return getCalendarStream(ref, itemType: argument);
}
@override
bool operator ==(Object other) {
return other is GetCalendarStreamProvider && other.itemType == itemType;
return other is GetCalendarStreamProvider && other.argument == argument;
}
@override
int get hashCode {
var hash = _SystemHash.combine(0, runtimeType.hashCode);
hash = _SystemHash.combine(hash, itemType.hashCode);
return _SystemHash.finish(hash);
return argument.hashCode;
}
}
@Deprecated('Will be removed in 3.0. Use Ref instead')
// ignore: unused_element
mixin GetCalendarStreamRef on AutoDisposeStreamProviderRef<List<Manga>> {
/// The parameter `itemType` of this provider.
ItemType? get itemType;
}
String _$getCalendarStreamHash() => r'850d81742f8ac5ce88175732c0edf57a7a9295d4';
class _GetCalendarStreamProviderElement
extends AutoDisposeStreamProviderElement<List<Manga>>
with GetCalendarStreamRef {
_GetCalendarStreamProviderElement(super.provider);
final class GetCalendarStreamFamily extends $Family
with $FunctionalFamilyOverride<Stream<List<Manga>>, ItemType?> {
const GetCalendarStreamFamily._()
: super(
retry: null,
name: r'getCalendarStreamProvider',
dependencies: null,
$allTransitiveDependencies: null,
isAutoDispose: true,
);
GetCalendarStreamProvider call({ItemType? itemType}) =>
GetCalendarStreamProvider._(argument: itemType, from: this);
@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/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/models/changed.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/models/chapter.dart';
import 'package:mangayomi/models/update.dart';
import 'package:mangayomi/models/history.dart';
import 'package:mangayomi/models/manga.dart';
import 'package:riverpod_annotation/riverpod_annotation.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
part 'isar_providers.g.dart';
@riverpod

View file

@ -6,308 +6,183 @@ part of 'isar_providers.dart';
// RiverpodGenerator
// **************************************************************************
String _$getAllHistoryStreamHash() =>
r'1ce5bd0046fbbec46e91b7a486523945699d95f3';
// 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 [getAllHistoryStream].
@ProviderFor(getAllHistoryStream)
const getAllHistoryStreamProvider = GetAllHistoryStreamFamily();
const getAllHistoryStreamProvider = GetAllHistoryStreamFamily._();
/// See also [getAllHistoryStream].
class GetAllHistoryStreamFamily extends Family<AsyncValue<List<History>>> {
/// See also [getAllHistoryStream].
const GetAllHistoryStreamFamily();
final class GetAllHistoryStreamProvider
extends
$FunctionalProvider<
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].
GetAllHistoryStreamProvider call({
required ItemType itemType,
String search = "",
}) {
return GetAllHistoryStreamProvider(itemType: itemType, search: search);
@override
String debugGetCreateSourceHash() => _$getAllHistoryStreamHash();
@override
String toString() {
return r'getAllHistoryStreamProvider'
''
'$argument';
}
@$internal
@override
GetAllHistoryStreamProvider getProviderOverride(
covariant GetAllHistoryStreamProvider provider,
) {
return call(itemType: provider.itemType, search: provider.search);
}
static const Iterable<ProviderOrFamily>? _dependencies = null;
$StreamProviderElement<List<History>> $createElement(
$ProviderPointer pointer,
) => $StreamProviderElement(pointer);
@override
Iterable<ProviderOrFamily>? get dependencies => _dependencies;
static const Iterable<ProviderOrFamily>? _allTransitiveDependencies = null;
@override
Iterable<ProviderOrFamily>? get allTransitiveDependencies =>
_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,
),
Stream<List<History>> create(Ref ref) {
final argument = this.argument as ({ItemType itemType, String search});
return getAllHistoryStream(
ref,
itemType: argument.itemType,
search: argument.search,
);
}
@override
AutoDisposeStreamProviderElement<List<History>> createElement() {
return _GetAllHistoryStreamProviderElement(this);
}
@override
bool operator ==(Object other) {
return other is GetAllHistoryStreamProvider &&
other.itemType == itemType &&
other.search == search;
return other is GetAllHistoryStreamProvider && other.argument == argument;
}
@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);
return argument.hashCode;
}
}
@Deprecated('Will be removed in 3.0. Use Ref instead')
// ignore: unused_element
mixin GetAllHistoryStreamRef on AutoDisposeStreamProviderRef<List<History>> {
/// The parameter `itemType` of this provider.
ItemType get itemType;
String _$getAllHistoryStreamHash() =>
r'1ce5bd0046fbbec46e91b7a486523945699d95f3';
/// The parameter `search` of this provider.
String get search;
final class GetAllHistoryStreamFamily extends $Family
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
extends AutoDisposeStreamProviderElement<List<History>>
with GetAllHistoryStreamRef {
_GetAllHistoryStreamProviderElement(super.provider);
@ProviderFor(getAllUpdateStream)
const getAllUpdateStreamProvider = GetAllUpdateStreamFamily._();
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
ItemType get itemType => (origin as GetAllHistoryStreamProvider).itemType;
String debugGetCreateSourceHash() => _$getAllUpdateStreamHash();
@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() =>
r'43369b20d702d12aeae627fcd04ceb61caf0dc74';
/// See also [getAllUpdateStream].
@ProviderFor(getAllUpdateStream)
const getAllUpdateStreamProvider = GetAllUpdateStreamFamily();
/// See also [getAllUpdateStream].
class GetAllUpdateStreamFamily extends Family<AsyncValue<List<Update>>> {
/// See also [getAllUpdateStream].
const GetAllUpdateStreamFamily();
/// 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,
final class GetAllUpdateStreamFamily extends $Family
with
$FunctionalFamilyOverride<
Stream<List<Update>>,
({ItemType itemType, String search})
> {
const GetAllUpdateStreamFamily._()
: super(
retry: null,
name: r'getAllUpdateStreamProvider',
debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product')
? null
: _$getAllUpdateStreamHash,
dependencies: GetAllUpdateStreamFamily._dependencies,
allTransitiveDependencies:
GetAllUpdateStreamFamily._allTransitiveDependencies,
itemType: itemType,
search: search,
dependencies: null,
$allTransitiveDependencies: null,
isAutoDispose: true,
);
GetAllUpdateStreamProvider._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;
GetAllUpdateStreamProvider call({
required ItemType itemType,
String search = '',
}) => GetAllUpdateStreamProvider._(
argument: (itemType: itemType, search: search),
from: this,
);
@override
Override overrideWith(
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);
}
String toString() => r'getAllUpdateStreamProvider';
}
@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/services.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/main.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/global_style.dart';
import 'package:path/path.dart' as p;
import 'package:riverpod_annotation/riverpod_annotation.dart';
class LibraryScreen extends ConsumerStatefulWidget {
final ItemType itemType;

View file

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

View file

@ -6,183 +6,92 @@ part of 'add_torrent.dart';
// RiverpodGenerator
// **************************************************************************
String _$addTorrentFromUrlOrFromFileHash() =>
r'a54f90b6708b13eeb8fed098691f9a79dbab50fd';
// 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 [addTorrentFromUrlOrFromFile].
@ProviderFor(addTorrentFromUrlOrFromFile)
const addTorrentFromUrlOrFromFileProvider = AddTorrentFromUrlOrFromFileFamily();
const addTorrentFromUrlOrFromFileProvider =
AddTorrentFromUrlOrFromFileFamily._();
/// See also [addTorrentFromUrlOrFromFile].
class AddTorrentFromUrlOrFromFileFamily extends Family<AsyncValue> {
/// See also [addTorrentFromUrlOrFromFile].
const AddTorrentFromUrlOrFromFileFamily();
/// See also [addTorrentFromUrlOrFromFile].
AddTorrentFromUrlOrFromFileProvider call(
Manga? mManga, {
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,
final class AddTorrentFromUrlOrFromFileProvider
extends $FunctionalProvider<AsyncValue<dynamic>, dynamic, FutureOr<dynamic>>
with $FutureModifier<dynamic>, $FutureProvider<dynamic> {
const AddTorrentFromUrlOrFromFileProvider._({
required AddTorrentFromUrlOrFromFileFamily super.from,
required (Manga?, {bool init, String? url}) super.argument,
}) : super(
retry: null,
name: r'addTorrentFromUrlOrFromFileProvider',
debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product')
? null
: _$addTorrentFromUrlOrFromFileHash,
dependencies: AddTorrentFromUrlOrFromFileFamily._dependencies,
allTransitiveDependencies:
AddTorrentFromUrlOrFromFileFamily._allTransitiveDependencies,
mManga: mManga,
init: init,
url: url,
isAutoDispose: true,
dependencies: null,
$allTransitiveDependencies: null,
);
AddTorrentFromUrlOrFromFileProvider._internal(
super._createNotifier, {
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
String debugGetCreateSourceHash() => _$addTorrentFromUrlOrFromFileHash();
@override
Override overrideWith(
FutureOr<Object?> Function(AddTorrentFromUrlOrFromFileRef provider) create,
) {
return ProviderOverride(
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,
),
);
String toString() {
return r'addTorrentFromUrlOrFromFileProvider'
''
'$argument';
}
@$internal
@override
AutoDisposeFutureProviderElement<Object?> createElement() {
return _AddTorrentFromUrlOrFromFileProviderElement(this);
$FutureProviderElement<dynamic> $createElement($ProviderPointer pointer) =>
$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
bool operator ==(Object other) {
return other is AddTorrentFromUrlOrFromFileProvider &&
other.mManga == mManga &&
other.init == init &&
other.url == url;
other.argument == argument;
}
@override
int get hashCode {
var hash = _SystemHash.combine(0, runtimeType.hashCode);
hash = _SystemHash.combine(hash, mManga.hashCode);
hash = _SystemHash.combine(hash, init.hashCode);
hash = _SystemHash.combine(hash, url.hashCode);
return _SystemHash.finish(hash);
return argument.hashCode;
}
}
@Deprecated('Will be removed in 3.0. Use Ref instead')
// ignore: unused_element
mixin AddTorrentFromUrlOrFromFileRef on AutoDisposeFutureProviderRef<Object?> {
/// The parameter `mManga` of this provider.
Manga? get mManga;
String _$addTorrentFromUrlOrFromFileHash() =>
r'a54f90b6708b13eeb8fed098691f9a79dbab50fd';
/// The parameter `init` of this provider.
bool get init;
final class AddTorrentFromUrlOrFromFileFamily extends $Family
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.
String? get url;
AddTorrentFromUrlOrFromFileProvider call(
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:io'; // For I/O-operations
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/models/settings.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:mangayomi/models/manga.dart'; // Has Manga model and ItemType enum
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:riverpod_annotation/riverpod_annotation.dart'; // Annotations for code generation
part 'file_scanner.g.dart';
@ -387,7 +386,7 @@ Future<Directory?> getLocalLibrary() async {
/// becomes:
/// "Manga 1/chapter1.zip"
/// ```
String _getRelativePath(dir) {
String _getRelativePath(dynamic dir) {
String relativePath;
if (dir is Directory) {

View file

@ -6,7 +6,61 @@ part of 'file_scanner.dart';
// 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.
///
@ -25,37 +79,71 @@ String _$scanLocalLibraryHash() => r'7fdedaa37917728d9f3b9d8f15090c94bdb34238';
/// Archivetypes: cbz, zip, cbt, tar
/// Other types: epub
/// ```
///
/// Copied from [scanLocalLibrary].
@ProviderFor(scanLocalLibrary)
final scanLocalLibraryProvider = AutoDisposeFutureProvider<void>.internal(
scanLocalLibrary,
name: r'scanLocalLibraryProvider',
debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product')
? null
: _$scanLocalLibraryHash,
dependencies: null,
allTransitiveDependencies: null,
);
const scanLocalLibraryProvider = ScanLocalLibraryProvider._();
@Deprecated('Will be removed in 3.0. Use Ref instead')
// ignore: unused_element
typedef ScanLocalLibraryRef = AutoDisposeFutureProviderRef<void>;
String _$localFoldersStateHash() => r'7cf7902ad34ee5ae018b2c9ac3849e822bc5f0b7';
/// Scans `Mangayomi/local` folder (if exists) for Mangas/Animes and imports in library.
///
/// **Folder structure:**
/// ```
/// 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].
@ProviderFor(LocalFoldersState)
final localFoldersStateProvider =
AutoDisposeNotifierProvider<LocalFoldersState, List<String>>.internal(
LocalFoldersState.new,
name: r'localFoldersStateProvider',
debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product')
? null
: _$localFoldersStateHash,
dependencies: null,
allTransitiveDependencies: null,
);
final class ScanLocalLibraryProvider
extends $FunctionalProvider<AsyncValue<void>, void, FutureOr<void>>
with $FutureModifier<void>, $FutureProvider<void> {
/// Scans `Mangayomi/local` folder (if exists) for Mangas/Animes and imports in library.
///
/// **Folder structure:**
/// ```
/// 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
/// ```
const ScanLocalLibraryProvider._()
: super(
from: null,
argument: null,
retry: null,
name: r'scanLocalLibraryProvider',
isAutoDispose: true,
dependencies: null,
$allTransitiveDependencies: null,
);
typedef _$LocalFoldersState = AutoDisposeNotifier<List<String>>;
// 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
@override
String debugGetCreateSourceHash() => _$scanLocalLibraryHash();
@$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/models/manga.dart';
import 'package:mangayomi/models/settings.dart';
import 'package:riverpod_annotation/riverpod_annotation.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
part 'isar_providers.g.dart';
@riverpod

View file

@ -6,321 +6,215 @@ part of 'isar_providers.dart';
// 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)
const getAllMangaStreamProvider = GetAllMangaStreamFamily();
const getAllMangaStreamProvider = GetAllMangaStreamFamily._();
/// See also [getAllMangaStream].
class GetAllMangaStreamFamily extends Family<AsyncValue<List<Manga>>> {
/// See also [getAllMangaStream].
const GetAllMangaStreamFamily();
/// See also [getAllMangaStream].
GetAllMangaStreamProvider call({
required int? categoryId,
required ItemType itemType,
}) {
return GetAllMangaStreamProvider(
categoryId: categoryId,
itemType: itemType,
);
}
@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,
final class GetAllMangaStreamProvider
extends
$FunctionalProvider<
AsyncValue<List<Manga>>,
List<Manga>,
Stream<List<Manga>>
>
with $FutureModifier<List<Manga>>, $StreamProvider<List<Manga>> {
const GetAllMangaStreamProvider._({
required GetAllMangaStreamFamily super.from,
required ({int? categoryId, ItemType itemType}) super.argument,
}) : super(
retry: null,
name: r'getAllMangaStreamProvider',
debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product')
? null
: _$getAllMangaStreamHash,
dependencies: GetAllMangaStreamFamily._dependencies,
allTransitiveDependencies:
GetAllMangaStreamFamily._allTransitiveDependencies,
categoryId: categoryId,
itemType: itemType,
isAutoDispose: true,
dependencies: null,
$allTransitiveDependencies: null,
);
GetAllMangaStreamProvider._internal(
super._createNotifier, {
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
String debugGetCreateSourceHash() => _$getAllMangaStreamHash();
@override
Override overrideWith(
Stream<List<Manga>> Function(GetAllMangaStreamRef provider) create,
) {
return ProviderOverride(
origin: this,
override: GetAllMangaStreamProvider._internal(
(ref) => create(ref as GetAllMangaStreamRef),
from: from,
name: null,
dependencies: null,
allTransitiveDependencies: null,
debugGetCreateSourceHash: null,
categoryId: categoryId,
itemType: itemType,
),
);
String toString() {
return r'getAllMangaStreamProvider'
''
'$argument';
}
@$internal
@override
AutoDisposeStreamProviderElement<List<Manga>> createElement() {
return _GetAllMangaStreamProviderElement(this);
$StreamProviderElement<List<Manga>> $createElement(
$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
bool operator ==(Object other) {
return other is GetAllMangaStreamProvider &&
other.categoryId == categoryId &&
other.itemType == itemType;
return other is GetAllMangaStreamProvider && other.argument == argument;
}
@override
int get hashCode {
var hash = _SystemHash.combine(0, runtimeType.hashCode);
hash = _SystemHash.combine(hash, categoryId.hashCode);
hash = _SystemHash.combine(hash, itemType.hashCode);
return _SystemHash.finish(hash);
return argument.hashCode;
}
}
@Deprecated('Will be removed in 3.0. Use Ref instead')
// ignore: unused_element
mixin GetAllMangaStreamRef on AutoDisposeStreamProviderRef<List<Manga>> {
/// The parameter `categoryId` of this provider.
int? get categoryId;
String _$getAllMangaStreamHash() => r'5e86a22a68ca1a52aefa9c0bc675d284369beac5';
/// The parameter `itemType` of this provider.
ItemType get itemType;
}
class _GetAllMangaStreamProviderElement
extends AutoDisposeStreamProviderElement<List<Manga>>
with GetAllMangaStreamRef {
_GetAllMangaStreamProviderElement(super.provider);
@override
int? get categoryId => (origin as GetAllMangaStreamProvider).categoryId;
@override
ItemType get itemType => (origin as GetAllMangaStreamProvider).itemType;
}
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,
final class GetAllMangaStreamFamily extends $Family
with
$FunctionalFamilyOverride<
Stream<List<Manga>>,
({int? categoryId, ItemType itemType})
> {
const GetAllMangaStreamFamily._()
: super(
retry: null,
name: r'getAllMangaStreamProvider',
dependencies: null,
$allTransitiveDependencies: null,
isAutoDispose: true,
);
GetAllMangaWithoutCategoriesStreamProvider._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;
GetAllMangaStreamProvider call({
required int? categoryId,
required ItemType itemType,
}) => GetAllMangaStreamProvider._(
argument: (categoryId: categoryId, itemType: itemType),
from: this,
);
@override
Override overrideWith(
Stream<List<Manga>> Function(GetAllMangaWithoutCategoriesStreamRef provider)
create,
) {
return ProviderOverride(
origin: this,
override: GetAllMangaWithoutCategoriesStreamProvider._internal(
(ref) => create(ref as GetAllMangaWithoutCategoriesStreamRef),
from: from,
name: null,
dependencies: null,
allTransitiveDependencies: null,
debugGetCreateSourceHash: null,
itemType: itemType,
),
);
String toString() => r'getAllMangaStreamProvider';
}
@ProviderFor(getAllMangaWithoutCategoriesStream)
const getAllMangaWithoutCategoriesStreamProvider =
GetAllMangaWithoutCategoriesStreamFamily._();
final class GetAllMangaWithoutCategoriesStreamProvider
extends
$FunctionalProvider<
AsyncValue<List<Manga>>,
List<Manga>,
Stream<List<Manga>>
>
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
AutoDisposeStreamProviderElement<List<Manga>> createElement() {
return _GetAllMangaWithoutCategoriesStreamProviderElement(this);
$StreamProviderElement<List<Manga>> $createElement(
$ProviderPointer pointer,
) => $StreamProviderElement(pointer);
@override
Stream<List<Manga>> create(Ref ref) {
final argument = this.argument as ItemType;
return getAllMangaWithoutCategoriesStream(ref, itemType: argument);
}
@override
bool operator ==(Object other) {
return other is GetAllMangaWithoutCategoriesStreamProvider &&
other.itemType == itemType;
other.argument == argument;
}
@override
int get hashCode {
var hash = _SystemHash.combine(0, runtimeType.hashCode);
hash = _SystemHash.combine(hash, itemType.hashCode);
return _SystemHash.finish(hash);
return argument.hashCode;
}
}
@Deprecated('Will be removed in 3.0. Use Ref instead')
// ignore: unused_element
mixin GetAllMangaWithoutCategoriesStreamRef
on AutoDisposeStreamProviderRef<List<Manga>> {
/// The parameter `itemType` of this provider.
ItemType get itemType;
}
String _$getAllMangaWithoutCategoriesStreamHash() =>
r'61ea54070c7e87a45aeabce5fd21366faaf4ae6d';
class _GetAllMangaWithoutCategoriesStreamProviderElement
extends AutoDisposeStreamProviderElement<List<Manga>>
with GetAllMangaWithoutCategoriesStreamRef {
_GetAllMangaWithoutCategoriesStreamProviderElement(super.provider);
final class GetAllMangaWithoutCategoriesStreamFamily extends $Family
with $FunctionalFamilyOverride<Stream<List<Manga>>, ItemType> {
const GetAllMangaWithoutCategoriesStreamFamily._()
: super(
retry: null,
name: r'getAllMangaWithoutCategoriesStreamProvider',
dependencies: null,
$allTransitiveDependencies: null,
isAutoDispose: true,
);
GetAllMangaWithoutCategoriesStreamProvider call({
required ItemType itemType,
}) => GetAllMangaWithoutCategoriesStreamProvider._(
argument: itemType,
from: this,
);
@override
ItemType get itemType =>
(origin as GetAllMangaWithoutCategoriesStreamProvider).itemType;
String toString() => r'getAllMangaWithoutCategoriesStreamProvider';
}
@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';
/// 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;
}
update() {
void update() {
if (state == 0) {
setType(1);
} else if (state == 1) {
@ -228,7 +228,7 @@ class MangaFilterUnreadState extends _$MangaFilterUnreadState {
}
}
update() {
List<Manga> update() {
if (state == 0) {
final data = mangaList.where((element) {
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/providers/archive_reader_providers.dart';
import 'package:riverpod_annotation/riverpod_annotation.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
part 'local_archive.g.dart';
@riverpod

View file

@ -6,191 +6,91 @@ part of 'local_archive.dart';
// RiverpodGenerator
// **************************************************************************
String _$importArchivesFromFileHash() =>
r'784b9d45958695faffdf04ee7c105c9b486122de';
// 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 [importArchivesFromFile].
@ProviderFor(importArchivesFromFile)
const importArchivesFromFileProvider = ImportArchivesFromFileFamily();
const importArchivesFromFileProvider = ImportArchivesFromFileFamily._();
/// See also [importArchivesFromFile].
class ImportArchivesFromFileFamily extends Family<AsyncValue> {
/// See also [importArchivesFromFile].
const ImportArchivesFromFileFamily();
/// See also [importArchivesFromFile].
ImportArchivesFromFileProvider call(
Manga? mManga, {
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,
final class ImportArchivesFromFileProvider
extends $FunctionalProvider<AsyncValue<dynamic>, dynamic, FutureOr<dynamic>>
with $FutureModifier<dynamic>, $FutureProvider<dynamic> {
const ImportArchivesFromFileProvider._({
required ImportArchivesFromFileFamily super.from,
required (Manga?, {ItemType itemType, bool init}) super.argument,
}) : super(
retry: null,
name: r'importArchivesFromFileProvider',
debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product')
? null
: _$importArchivesFromFileHash,
dependencies: ImportArchivesFromFileFamily._dependencies,
allTransitiveDependencies:
ImportArchivesFromFileFamily._allTransitiveDependencies,
mManga: mManga,
itemType: itemType,
init: init,
isAutoDispose: true,
dependencies: null,
$allTransitiveDependencies: null,
);
ImportArchivesFromFileProvider._internal(
super._createNotifier, {
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
String debugGetCreateSourceHash() => _$importArchivesFromFileHash();
@override
Override overrideWith(
FutureOr<Object?> Function(ImportArchivesFromFileRef provider) create,
) {
return ProviderOverride(
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,
),
);
String toString() {
return r'importArchivesFromFileProvider'
''
'$argument';
}
@$internal
@override
AutoDisposeFutureProviderElement<Object?> createElement() {
return _ImportArchivesFromFileProviderElement(this);
$FutureProviderElement<dynamic> $createElement($ProviderPointer pointer) =>
$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
bool operator ==(Object other) {
return other is ImportArchivesFromFileProvider &&
other.mManga == mManga &&
other.itemType == itemType &&
other.init == init;
other.argument == argument;
}
@override
int get hashCode {
var hash = _SystemHash.combine(0, runtimeType.hashCode);
hash = _SystemHash.combine(hash, mManga.hashCode);
hash = _SystemHash.combine(hash, itemType.hashCode);
hash = _SystemHash.combine(hash, init.hashCode);
return _SystemHash.finish(hash);
return argument.hashCode;
}
}
@Deprecated('Will be removed in 3.0. Use Ref instead')
// ignore: unused_element
mixin ImportArchivesFromFileRef on AutoDisposeFutureProviderRef<Object?> {
/// The parameter `mManga` of this provider.
Manga? get mManga;
String _$importArchivesFromFileHash() =>
r'784b9d45958695faffdf04ee7c105c9b486122de';
/// The parameter `itemType` of this provider.
ItemType get itemType;
final class ImportArchivesFromFileFamily extends $Family
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.
bool get init;
ImportArchivesFromFileProvider call(
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 'package:flutter/material.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/models/chapter.dart';
import 'package:mangayomi/models/download.dart';

View file

@ -1,7 +1,7 @@
import 'dart:typed_data';
import 'package:flutter/material.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/models/chapter.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:go_router/go_router.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/main.dart';
import 'package:mangayomi/models/chapter.dart';
@ -121,7 +121,7 @@ class _MainScreenState extends ConsumerState<MainScreen> {
ref.read(checkForUpdateProvider(context: context));
for (var type in ItemType.values) {
ref.read(
FetchItemSourcesListProvider(
fetchItemSourcesListProvider(
id: null,
reFresh: false,
itemType: type,

View file

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

View file

@ -6,22 +6,38 @@ part of 'migration.dart';
// RiverpodGenerator
// **************************************************************************
String _$migrationHash() => r'2a82120544e693a3162da887a3ca1b3066f3799f';
// GENERATED CODE - DO NOT MODIFY BY HAND
// ignore_for_file: type=lint, type=warning
/// See also [migration].
@ProviderFor(migration)
final migrationProvider = AutoDisposeFutureProvider<void>.internal(
migration,
name: r'migrationProvider',
debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product')
? null
: _$migrationHash,
dependencies: null,
allTransitiveDependencies: null,
);
const migrationProvider = MigrationProvider._();
@Deprecated('Will be removed in 3.0. Use Ref instead')
// ignore: unused_element
typedef MigrationRef = AutoDisposeFutureProviderRef<void>;
// 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
final class MigrationProvider
extends $FunctionalProvider<AsyncValue<void>, void, FutureOr<void>>
with $FutureModifier<void>, $FutureProvider<void> {
const MigrationProvider._()
: 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:mangayomi/modules/manga/archive_reader/models/models.dart';
import 'package:riverpod_annotation/riverpod_annotation.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:path/path.dart' as p;
part 'archive_reader_providers.g.dart';

View file

@ -6,565 +6,329 @@ part of 'archive_reader_providers.dart';
// RiverpodGenerator
// **************************************************************************
String _$getArchivesDataFromDirectoryHash() =>
r'2a4d1a11e2b028e569ffd8a2700e4a1779bb9264';
// 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 [getArchivesDataFromDirectory].
@ProviderFor(getArchivesDataFromDirectory)
const getArchivesDataFromDirectoryProvider =
GetArchivesDataFromDirectoryFamily();
GetArchivesDataFromDirectoryFamily._();
/// See also [getArchivesDataFromDirectory].
class GetArchivesDataFromDirectoryFamily
final class GetArchivesDataFromDirectoryProvider
extends
Family<
AsyncValue<List<(String, LocalExtensionType, Uint8List, String)>>
> {
/// See also [getArchivesDataFromDirectory].
const GetArchivesDataFromDirectoryFamily();
/// See also [getArchivesDataFromDirectory].
GetArchivesDataFromDirectoryProvider call(String path) {
return GetArchivesDataFromDirectoryProvider(path);
}
$FunctionalProvider<
AsyncValue<List<(String, LocalExtensionType, Uint8List, String)>>,
List<(String, LocalExtensionType, Uint8List, String)>,
FutureOr<List<(String, LocalExtensionType, Uint8List, String)>>
>
with
$FutureModifier<List<(String, LocalExtensionType, Uint8List, String)>>,
$FutureProvider<List<(String, LocalExtensionType, Uint8List, String)>> {
const GetArchivesDataFromDirectoryProvider._({
required GetArchivesDataFromDirectoryFamily super.from,
required String super.argument,
}) : super(
retry: null,
name: r'getArchivesDataFromDirectoryProvider',
isAutoDispose: true,
dependencies: null,
$allTransitiveDependencies: null,
);
@override
GetArchivesDataFromDirectoryProvider getProviderOverride(
covariant GetArchivesDataFromDirectoryProvider provider,
String debugGetCreateSourceHash() => _$getArchivesDataFromDirectoryHash();
@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);
}
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);
final argument = this.argument as String;
return getArchivesDataFromDirectory(ref, argument);
}
@override
bool operator ==(Object other) {
return other is GetArchivesDataFromDirectoryProvider && other.path == path;
return other is GetArchivesDataFromDirectoryProvider &&
other.argument == argument;
}
@override
int get hashCode {
var hash = _SystemHash.combine(0, runtimeType.hashCode);
hash = _SystemHash.combine(hash, path.hashCode);
return _SystemHash.finish(hash);
return argument.hashCode;
}
}
@Deprecated('Will be removed in 3.0. Use Ref instead')
// ignore: unused_element
mixin GetArchivesDataFromDirectoryRef
on
AutoDisposeFutureProviderRef<
List<(String, LocalExtensionType, Uint8List, String)>
> {
/// The parameter `path` of this provider.
String get path;
}
String _$getArchivesDataFromDirectoryHash() =>
r'2a4d1a11e2b028e569ffd8a2700e4a1779bb9264';
class _GetArchivesDataFromDirectoryProviderElement
extends
AutoDisposeFutureProviderElement<
List<(String, LocalExtensionType, Uint8List, String)>
>
with GetArchivesDataFromDirectoryRef {
_GetArchivesDataFromDirectoryProviderElement(super.provider);
final class GetArchivesDataFromDirectoryFamily extends $Family
with
$FunctionalFamilyOverride<
FutureOr<List<(String, LocalExtensionType, Uint8List, String)>>,
String
> {
const GetArchivesDataFromDirectoryFamily._()
: super(
retry: null,
name: r'getArchivesDataFromDirectoryProvider',
dependencies: null,
$allTransitiveDependencies: null,
isAutoDispose: true,
);
GetArchivesDataFromDirectoryProvider call(String path) =>
GetArchivesDataFromDirectoryProvider._(argument: path, from: this);
@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() =>
r'49aa47895feafd9fa0c4f20e25d7674a3d54b212';
/// See also [getArchiveDataFromDirectory].
@ProviderFor(getArchiveDataFromDirectory)
const getArchiveDataFromDirectoryProvider = GetArchiveDataFromDirectoryFamily();
/// See also [getArchiveDataFromDirectory].
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,
final class GetArchiveDataFromDirectoryFamily extends $Family
with $FunctionalFamilyOverride<FutureOr<List<LocalArchive>>, String> {
const GetArchiveDataFromDirectoryFamily._()
: super(
retry: null,
name: r'getArchiveDataFromDirectoryProvider',
debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product')
? null
: _$getArchiveDataFromDirectoryHash,
dependencies: GetArchiveDataFromDirectoryFamily._dependencies,
allTransitiveDependencies:
GetArchiveDataFromDirectoryFamily._allTransitiveDependencies,
path: path,
dependencies: null,
$allTransitiveDependencies: null,
isAutoDispose: true,
);
GetArchiveDataFromDirectoryProvider._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;
GetArchiveDataFromDirectoryProvider call(String path) =>
GetArchiveDataFromDirectoryProvider._(argument: path, from: this);
@override
Override overrideWith(
FutureOr<List<LocalArchive>> Function(
GetArchiveDataFromDirectoryRef provider,
)
create,
) {
return ProviderOverride(
origin: this,
override: GetArchiveDataFromDirectoryProvider._internal(
(ref) => create(ref as GetArchiveDataFromDirectoryRef),
from: from,
name: null,
dependencies: null,
allTransitiveDependencies: null,
debugGetCreateSourceHash: null,
path: path,
),
);
String toString() => r'getArchiveDataFromDirectoryProvider';
}
@ProviderFor(getArchivesDataFromFile)
const getArchivesDataFromFileProvider = GetArchivesDataFromFileFamily._();
final class GetArchivesDataFromFileProvider
extends
$FunctionalProvider<
AsyncValue<(String, LocalExtensionType, Uint8List, String)>,
(String, LocalExtensionType, Uint8List, String),
FutureOr<(String, LocalExtensionType, Uint8List, String)>
>
with
$FutureModifier<(String, LocalExtensionType, Uint8List, String)>,
$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
AutoDisposeFutureProviderElement<List<LocalArchive>> createElement() {
return _GetArchiveDataFromDirectoryProviderElement(this);
$FutureProviderElement<(String, LocalExtensionType, Uint8List, String)>
$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
bool operator ==(Object other) {
return other is GetArchiveDataFromDirectoryProvider && other.path == path;
return other is GetArchivesDataFromFileProvider &&
other.argument == argument;
}
@override
int get hashCode {
var hash = _SystemHash.combine(0, runtimeType.hashCode);
hash = _SystemHash.combine(hash, path.hashCode);
return _SystemHash.finish(hash);
return argument.hashCode;
}
}
@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() =>
r'79874b548614b4410c19bca5f74978ec761742c5';
/// See also [getArchivesDataFromFile].
@ProviderFor(getArchivesDataFromFile)
const getArchivesDataFromFileProvider = GetArchivesDataFromFileFamily();
/// See also [getArchivesDataFromFile].
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)
final class GetArchivesDataFromFileFamily extends $Family
with
$FunctionalFamilyOverride<
FutureOr<(String, LocalExtensionType, Uint8List, String)>,
String
> {
/// See also [getArchivesDataFromFile].
GetArchivesDataFromFileProvider(String path)
: this._internal(
(ref) =>
getArchivesDataFromFile(ref as GetArchivesDataFromFileRef, path),
from: getArchivesDataFromFileProvider,
const GetArchivesDataFromFileFamily._()
: super(
retry: null,
name: r'getArchivesDataFromFileProvider',
debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product')
? null
: _$getArchivesDataFromFileHash,
dependencies: GetArchivesDataFromFileFamily._dependencies,
allTransitiveDependencies:
GetArchivesDataFromFileFamily._allTransitiveDependencies,
path: path,
dependencies: null,
$allTransitiveDependencies: null,
isAutoDispose: true,
);
GetArchivesDataFromFileProvider._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;
GetArchivesDataFromFileProvider call(String path) =>
GetArchivesDataFromFileProvider._(argument: path, from: this);
@override
Override overrideWith(
FutureOr<(String, LocalExtensionType, Uint8List, String)> Function(
GetArchivesDataFromFileRef provider,
)
create,
) {
return ProviderOverride(
origin: this,
override: GetArchivesDataFromFileProvider._internal(
(ref) => create(ref as GetArchivesDataFromFileRef),
from: from,
name: null,
dependencies: null,
allTransitiveDependencies: null,
debugGetCreateSourceHash: null,
path: path,
),
);
String toString() => r'getArchivesDataFromFileProvider';
}
@ProviderFor(getArchiveDataFromFile)
const getArchiveDataFromFileProvider = GetArchiveDataFromFileFamily._();
final class GetArchiveDataFromFileProvider
extends
$FunctionalProvider<
AsyncValue<LocalArchive>,
LocalArchive,
FutureOr<LocalArchive>
>
with $FutureModifier<LocalArchive>, $FutureProvider<LocalArchive> {
const GetArchiveDataFromFileProvider._({
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
AutoDisposeFutureProviderElement<
(String, LocalExtensionType, Uint8List, String)
>
createElement() {
return _GetArchivesDataFromFileProviderElement(this);
$FutureProviderElement<LocalArchive> $createElement(
$ProviderPointer pointer,
) => $FutureProviderElement(pointer);
@override
FutureOr<LocalArchive> create(Ref ref) {
final argument = this.argument as String;
return getArchiveDataFromFile(ref, argument);
}
@override
bool operator ==(Object other) {
return other is GetArchivesDataFromFileProvider && other.path == path;
return other is GetArchiveDataFromFileProvider &&
other.argument == argument;
}
@override
int get hashCode {
var hash = _SystemHash.combine(0, runtimeType.hashCode);
hash = _SystemHash.combine(hash, path.hashCode);
return _SystemHash.finish(hash);
return argument.hashCode;
}
}
@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() =>
r'a5d8bf8246bfa250af6a7fd3c09bba6a012e0b2d';
/// See also [getArchiveDataFromFile].
@ProviderFor(getArchiveDataFromFile)
const getArchiveDataFromFileProvider = GetArchiveDataFromFileFamily();
/// See also [getArchiveDataFromFile].
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,
final class GetArchiveDataFromFileFamily extends $Family
with $FunctionalFamilyOverride<FutureOr<LocalArchive>, String> {
const GetArchiveDataFromFileFamily._()
: super(
retry: null,
name: r'getArchiveDataFromFileProvider',
debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product')
? null
: _$getArchiveDataFromFileHash,
dependencies: GetArchiveDataFromFileFamily._dependencies,
allTransitiveDependencies:
GetArchiveDataFromFileFamily._allTransitiveDependencies,
path: path,
dependencies: null,
$allTransitiveDependencies: null,
isAutoDispose: true,
);
GetArchiveDataFromFileProvider._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;
GetArchiveDataFromFileProvider call(String path) =>
GetArchiveDataFromFileProvider._(argument: path, from: this);
@override
Override overrideWith(
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);
}
String toString() => r'getArchiveDataFromFileProvider';
}
@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_riverpod/flutter_riverpod.dart';
import 'package:isar/isar.dart';
import 'package:isar_community/isar.dart';
import 'package:mangayomi/main.dart';
import 'package:mangayomi/models/source.dart';
import 'package:mangayomi/modules/manga/detail/manga_details_view.dart';
@ -24,7 +24,7 @@ class _MangaReaderDetailState extends ConsumerState<MangaReaderDetail> {
_init();
}
_init() async {
Future<void> _init() async {
await Future.delayed(const Duration(milliseconds: 100));
await ref.read(
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_riverpod/flutter_riverpod.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/main.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/services/http/m_client.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/cached_network.dart';
import 'package:mangayomi/utils/extensions/build_context_extensions.dart';
@ -100,7 +101,7 @@ class _MangaDetailViewState extends ConsumerState<MangaDetailView>
super.dispose();
}
final offetProvider = StateProvider((ref) => 0.0);
final offetProvider = StateProvider(() => 0.0);
bool _expanded = false;
late final ScrollController _scrollController;
late final isLocalArchive = widget.manga!.isLocalArchive ?? false;
@ -2139,7 +2140,7 @@ class _MangaDetailViewState extends ConsumerState<MangaDetailView>
),
onPressed: () async {
final trackSearch =
await trackersSearchraggableMenu(
await trackersSearchDraggableMenu(
context,
itemType:
widget.manga!.itemType,
@ -2502,7 +2503,7 @@ class _MangaDetailViewState extends ConsumerState<MangaDetailView>
text: l10nLocalizations(context)!.add_tracker,
onTap: () async {
final trackSearch =
await trackersSearchraggableMenu(
await trackersSearchDraggableMenu(
context,
itemType: widget.manga!.itemType,
track: Track(
@ -2518,6 +2519,7 @@ class _MangaDetailViewState extends ConsumerState<MangaDetailView>
trackStateProvider(
track: null,
itemType: widget.manga!.itemType,
widgetRef: ref,
).notifier,
)
.setTrackSearch(

View file

@ -1,6 +1,6 @@
import 'package:flutter/material.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/models/category.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/models/chapter.dart';
import 'package:mangayomi/models/manga.dart';
import 'package:riverpod_annotation/riverpod_annotation.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
part 'isar_providers.g.dart';
@riverpod

View file

@ -6,272 +6,150 @@ part of 'isar_providers.dart';
// RiverpodGenerator
// **************************************************************************
String _$getMangaDetailStreamHash() =>
r'6e7c5dc20ee7d32a091e884ac6980e191f698c8c';
// 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 [getMangaDetailStream].
@ProviderFor(getMangaDetailStream)
const getMangaDetailStreamProvider = GetMangaDetailStreamFamily();
const getMangaDetailStreamProvider = GetMangaDetailStreamFamily._();
/// See also [getMangaDetailStream].
class GetMangaDetailStreamFamily extends Family<AsyncValue<Manga?>> {
/// See also [getMangaDetailStream].
const GetMangaDetailStreamFamily();
final class GetMangaDetailStreamProvider
extends $FunctionalProvider<AsyncValue<Manga?>, Manga?, Stream<Manga?>>
with $FutureModifier<Manga?>, $StreamProvider<Manga?> {
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].
GetMangaDetailStreamProvider call({required int mangaId}) {
return GetMangaDetailStreamProvider(mangaId: mangaId);
@override
String debugGetCreateSourceHash() => _$getMangaDetailStreamHash();
@override
String toString() {
return r'getMangaDetailStreamProvider'
''
'($argument)';
}
@$internal
@override
GetMangaDetailStreamProvider getProviderOverride(
covariant GetMangaDetailStreamProvider provider,
) {
return call(mangaId: provider.mangaId);
}
static const Iterable<ProviderOrFamily>? _dependencies = null;
$StreamProviderElement<Manga?> $createElement($ProviderPointer pointer) =>
$StreamProviderElement(pointer);
@override
Iterable<ProviderOrFamily>? get dependencies => _dependencies;
static const Iterable<ProviderOrFamily>? _allTransitiveDependencies = null;
@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);
Stream<Manga?> create(Ref ref) {
final argument = this.argument as int;
return getMangaDetailStream(ref, mangaId: argument);
}
@override
bool operator ==(Object other) {
return other is GetMangaDetailStreamProvider && other.mangaId == mangaId;
return other is GetMangaDetailStreamProvider && other.argument == argument;
}
@override
int get hashCode {
var hash = _SystemHash.combine(0, runtimeType.hashCode);
hash = _SystemHash.combine(hash, mangaId.hashCode);
return _SystemHash.finish(hash);
return argument.hashCode;
}
}
@Deprecated('Will be removed in 3.0. Use Ref instead')
// ignore: unused_element
mixin GetMangaDetailStreamRef on AutoDisposeStreamProviderRef<Manga?> {
/// The parameter `mangaId` of this provider.
int get mangaId;
}
String _$getMangaDetailStreamHash() =>
r'6e7c5dc20ee7d32a091e884ac6980e191f698c8c';
class _GetMangaDetailStreamProviderElement
extends AutoDisposeStreamProviderElement<Manga?>
with GetMangaDetailStreamRef {
_GetMangaDetailStreamProviderElement(super.provider);
final class GetMangaDetailStreamFamily extends $Family
with $FunctionalFamilyOverride<Stream<Manga?>, int> {
const GetMangaDetailStreamFamily._()
: super(
retry: null,
name: r'getMangaDetailStreamProvider',
dependencies: null,
$allTransitiveDependencies: null,
isAutoDispose: true,
);
GetMangaDetailStreamProvider call({required int mangaId}) =>
GetMangaDetailStreamProvider._(argument: mangaId, from: this);
@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';
/// See also [getChaptersStream].
@ProviderFor(getChaptersStream)
const getChaptersStreamProvider = GetChaptersStreamFamily();
/// See also [getChaptersStream].
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,
final class GetChaptersStreamFamily extends $Family
with $FunctionalFamilyOverride<Stream<List<Chapter>>, int> {
const GetChaptersStreamFamily._()
: super(
retry: null,
name: r'getChaptersStreamProvider',
debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product')
? null
: _$getChaptersStreamHash,
dependencies: GetChaptersStreamFamily._dependencies,
allTransitiveDependencies:
GetChaptersStreamFamily._allTransitiveDependencies,
mangaId: mangaId,
dependencies: null,
$allTransitiveDependencies: null,
isAutoDispose: true,
);
GetChaptersStreamProvider._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;
GetChaptersStreamProvider call({required int mangaId}) =>
GetChaptersStreamProvider._(argument: mangaId, from: this);
@override
Override overrideWith(
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);
}
String toString() => r'getChaptersStreamProvider';
}
@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/models/chapter.dart';
import 'package:mangayomi/models/download.dart';
@ -307,7 +307,7 @@ class ChapterSetIsBookmarkState extends _$ChapterSetIsBookmarkState {
@override
void build({required Manga manga}) {}
set() {
void set() {
final allChapters = <Chapter>[];
final chapters = ref.watch(chaptersListStateProvider);
for (var chapter in chapters) {
@ -327,7 +327,7 @@ class ChapterSetIsReadState extends _$ChapterSetIsReadState {
@override
void build({required Manga manga}) {}
set() {
void set() {
final allChapters = <Chapter>[];
final chapters = ref.watch(chaptersListStateProvider);
for (var chapter in chapters) {
@ -347,7 +347,7 @@ class ChapterSetDownloadState extends _$ChapterSetDownloadState {
@override
void build({required Manga manga}) {}
set() {
void set() {
ref.read(isLongPressedStateProvider.notifier).update(false);
isar.txnSync(() {
for (var chapter in ref.watch(chaptersListStateProvider)) {
@ -372,7 +372,7 @@ class ChaptersListttState extends _$ChaptersListttState {
return [];
}
set(List<Chapter> chapters) async {
void set(List<Chapter> chapters) async {
await Future.delayed(const Duration(milliseconds: 10));
state = chapters;
}
@ -431,7 +431,7 @@ class ScanlatorsFilterState extends _$ScanlatorsFilterState {
return filter.isEmpty ? null : filter.first.scanlators;
}
setFilteredList(String scanlator) {
void setFilteredList(String scanlator) {
List<String> scanlatorFilteredList = [];
for (var a in state.$3) {
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/models/manga.dart';
import 'package:mangayomi/models/settings.dart';
@ -17,29 +18,57 @@ part 'track_state_providers.g.dart';
@riverpod
class TrackState extends _$TrackState {
@override
Track build({Track? track, required ItemType? itemType}) {
Track build({
Track? track,
required ItemType? itemType,
required WidgetRef widgetRef,
}) {
return track!;
}
BaseTracker getNotifier(int syncId) {
return switch (syncId) {
1 => ref.read(
myAnimeListProvider(syncId: syncId, itemType: itemType).notifier,
1 => widgetRef.read(
myAnimeListProvider(
syncId: syncId,
itemType: itemType,
widgetRef: widgetRef,
).notifier,
),
2 => ref.read(
anilistProvider(syncId: syncId, itemType: itemType).notifier,
2 => widgetRef.read(
anilistProvider(
syncId: syncId,
itemType: itemType,
widgetRef: widgetRef,
).notifier,
),
3 => ref.read(kitsuProvider(syncId: syncId, itemType: itemType).notifier),
4 => ref.read(simklProvider(syncId: syncId, itemType: itemType).notifier),
5 => ref.read(
traktTvProvider(syncId: syncId, itemType: itemType).notifier,
3 => widgetRef.read(
kitsuProvider(
syncId: syncId,
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'),
};
}
void writeBack(Track t) {
ref
widgetRef
.read(tracksProvider(syncId: t.syncId!).notifier)
.updateTrackManga(t, itemType!);
}

View file

@ -6,192 +6,176 @@ part of 'track_state_providers.dart';
// 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)
const trackStateProvider = TrackStateFamily();
const trackStateProvider = TrackStateFamily._();
/// See also [TrackState].
class TrackStateFamily extends Family<Track> {
/// See also [TrackState].
const TrackStateFamily();
final class TrackStateProvider extends $NotifierProvider<TrackState, Track> {
const TrackStateProvider._({
required TrackStateFamily super.from,
required ({Track? track, ItemType? itemType, WidgetRef widgetRef})
super.argument,
}) : super(
retry: null,
name: r'trackStateProvider',
isAutoDispose: true,
dependencies: null,
$allTransitiveDependencies: null,
);
/// See also [TrackState].
TrackStateProvider call({Track? track, required ItemType? itemType}) {
return TrackStateProvider(track: track, itemType: itemType);
@override
String debugGetCreateSourceHash() => _$trackStateHash();
@override
String toString() {
return r'trackStateProvider'
''
'$argument';
}
@$internal
@override
TrackStateProvider getProviderOverride(
covariant TrackStateProvider provider,
) {
return call(track: provider.track, itemType: provider.itemType);
}
TrackState create() => TrackState();
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'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(
/// {@macro riverpod.override_with_value}
Override overrideWithValue(Track value) {
return $ProviderOverride(
origin: this,
override: TrackStateProvider._internal(
() => create()
..track = track
..itemType = itemType,
from: from,
name: null,
dependencies: null,
allTransitiveDependencies: null,
debugGetCreateSourceHash: null,
track: track,
itemType: itemType,
),
providerOverride: $SyncValueProvider<Track>(value),
);
}
@override
AutoDisposeNotifierProviderElement<TrackState, Track> createElement() {
return _TrackStateProviderElement(this);
}
@override
bool operator ==(Object other) {
return other is TrackStateProvider &&
other.track == track &&
other.itemType == itemType;
return other is TrackStateProvider && other.argument == argument;
}
@override
int get hashCode {
var hash = _SystemHash.combine(0, runtimeType.hashCode);
hash = _SystemHash.combine(hash, track.hashCode);
hash = _SystemHash.combine(hash, itemType.hashCode);
return _SystemHash.finish(hash);
return argument.hashCode;
}
}
@Deprecated('Will be removed in 3.0. Use Ref instead')
// ignore: unused_element
mixin TrackStateRef on AutoDisposeNotifierProviderRef<Track> {
/// The parameter `track` of this provider.
Track? get track;
String _$trackStateHash() => r'cd19c5662338c7f0e508cf2f99e89c21f146d664';
/// The parameter `itemType` of this provider.
ItemType? get itemType;
final class TrackStateFamily extends $Family
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
extends AutoDisposeNotifierProviderElement<TrackState, Track>
with TrackStateRef {
_TrackStateProviderElement(super.provider);
abstract class _$TrackState extends $Notifier<Track> {
late final _$args =
ref.$arg as ({Track? track, ItemType? itemType, WidgetRef widgetRef});
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
Track? get track => (origin as TrackStateProvider).track;
String debugGetCreateSourceHash() => _$lastTrackerLibraryLocationStateHash();
@$internal
@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() =>
r'c09efe7fe4f8dda723c31bc6543dbaa571718342';
/// See also [LastTrackerLibraryLocationState].
@ProviderFor(LastTrackerLibraryLocationState)
final lastTrackerLibraryLocationStateProvider =
AutoDisposeNotifierProvider<
LastTrackerLibraryLocationState,
(int, bool)
>.internal(
LastTrackerLibraryLocationState.new,
name: r'lastTrackerLibraryLocationStateProvider',
debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product')
? null
: _$lastTrackerLibraryLocationStateHash,
dependencies: null,
allTransitiveDependencies: null,
);
typedef _$LastTrackerLibraryLocationState = AutoDisposeNotifier<(int, bool)>;
// 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
abstract class _$LastTrackerLibraryLocationState
extends $Notifier<(int, bool)> {
(int, bool) build();
@$mustCallSuper
@override
void runBuild() {
final created = build();
final ref = this.ref as $Ref<(int, bool), (int, bool)>;
final element =
ref.element
as $ClassProviderElement<
AnyNotifier<(int, bool), (int, bool)>,
(int, bool),
Object?,
Object?
>;
element.handleValue(ref, created);
}
}

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/utils.dart';
import 'package:riverpod_annotation/riverpod_annotation.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
part 'update_manga_detail_providers.g.dart';
@riverpod

View file

@ -6,189 +6,90 @@ part of 'update_manga_detail_providers.dart';
// 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)
const updateMangaDetailProvider = UpdateMangaDetailFamily();
const updateMangaDetailProvider = UpdateMangaDetailFamily._();
/// See also [updateMangaDetail].
class UpdateMangaDetailFamily extends Family<AsyncValue<dynamic>> {
/// See also [updateMangaDetail].
const UpdateMangaDetailFamily();
/// See also [updateMangaDetail].
UpdateMangaDetailProvider call({
required int? mangaId,
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,
final class UpdateMangaDetailProvider
extends $FunctionalProvider<AsyncValue<dynamic>, dynamic, FutureOr<dynamic>>
with $FutureModifier<dynamic>, $FutureProvider<dynamic> {
const UpdateMangaDetailProvider._({
required UpdateMangaDetailFamily super.from,
required ({int? mangaId, bool isInit, bool showToast}) super.argument,
}) : super(
retry: null,
name: r'updateMangaDetailProvider',
debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product')
? null
: _$updateMangaDetailHash,
dependencies: UpdateMangaDetailFamily._dependencies,
allTransitiveDependencies:
UpdateMangaDetailFamily._allTransitiveDependencies,
mangaId: mangaId,
isInit: isInit,
showToast: showToast,
isAutoDispose: true,
dependencies: null,
$allTransitiveDependencies: null,
);
UpdateMangaDetailProvider._internal(
super._createNotifier, {
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
String debugGetCreateSourceHash() => _$updateMangaDetailHash();
@override
Override overrideWith(
FutureOr<dynamic> Function(UpdateMangaDetailRef provider) create,
) {
return ProviderOverride(
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,
),
);
String toString() {
return r'updateMangaDetailProvider'
''
'$argument';
}
@$internal
@override
AutoDisposeFutureProviderElement<dynamic> createElement() {
return _UpdateMangaDetailProviderElement(this);
$FutureProviderElement<dynamic> $createElement($ProviderPointer pointer) =>
$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
bool operator ==(Object other) {
return other is UpdateMangaDetailProvider &&
other.mangaId == mangaId &&
other.isInit == isInit &&
other.showToast == showToast;
return other is UpdateMangaDetailProvider && other.argument == argument;
}
@override
int get hashCode {
var hash = _SystemHash.combine(0, runtimeType.hashCode);
hash = _SystemHash.combine(hash, mangaId.hashCode);
hash = _SystemHash.combine(hash, isInit.hashCode);
hash = _SystemHash.combine(hash, showToast.hashCode);
return _SystemHash.finish(hash);
return argument.hashCode;
}
}
@Deprecated('Will be removed in 3.0. Use Ref instead')
// ignore: unused_element
mixin UpdateMangaDetailRef on AutoDisposeFutureProviderRef<dynamic> {
/// The parameter `mangaId` of this provider.
int? get mangaId;
String _$updateMangaDetailHash() => r'ac2b3fcd446d50a81ad647015e3010c2309f3385';
/// The parameter `isInit` of this provider.
bool get isInit;
final class UpdateMangaDetailFamily extends $Family
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.
bool get showToast;
UpdateMangaDetailProvider call({
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_riverpod/flutter_riverpod.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_pages.dart';
import 'package:mangayomi/main.dart';
@ -170,7 +170,7 @@ class _MigrationSourceSearchScreenState
String _errorMessage = "";
bool _isLoading = true;
MPages? pages;
_init() async {
Future<void> _init() async {
try {
_errorMessage = "";
pages = await ref.read(
@ -599,6 +599,7 @@ class _MigrationMangaGlobalImageCardState
trackStateProvider(
track: null,
itemType: widget.oldManga.itemType,
widgetRef: ref,
).notifier,
)
.setTrackSearch(

View file

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

View file

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

View file

@ -1,6 +1,6 @@
import 'package:flutter/material.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/models/manga.dart';
import 'package:mangayomi/models/track.dart';

View file

@ -2,7 +2,7 @@ import 'dart:io';
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.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/models/chapter.dart';
import 'package:mangayomi/models/download.dart';

View file

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

View file

@ -6,200 +6,97 @@ part of 'convert_to_cbz.dart';
// RiverpodGenerator
// **************************************************************************
String _$convertToCBZHash() => r'56f4320034ec2420c8c2c2b22a2522721181ab54';
// GENERATED CODE - DO NOT MODIFY BY HAND
// ignore_for_file: type=lint, type=warning
/// Copied from Dart SDK
class _SystemHash {
_SystemHash._();
@ProviderFor(convertToCBZ)
const convertToCBZProvider = ConvertToCBZFamily._();
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);
final class ConvertToCBZProvider
extends
$FunctionalProvider<
AsyncValue<List<String>>,
List<String>,
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) {
// ignore: parameter_assignments
hash = 0x1fffffff & (hash + ((0x03ffffff & hash) << 3));
// ignore: parameter_assignments
hash = hash ^ (hash >> 11);
return 0x1fffffff & (hash + ((0x00003fff & hash) << 15));
@$internal
@override
$FutureProviderElement<List<String>> $createElement(
$ProviderPointer pointer,
) => $FutureProviderElement(pointer);
@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].
@ProviderFor(convertToCBZ)
const convertToCBZProvider = ConvertToCBZFamily();
String _$convertToCBZHash() => r'56f4320034ec2420c8c2c2b22a2522721181ab54';
/// See also [convertToCBZ].
class ConvertToCBZFamily extends Family<AsyncValue<List<String>>> {
/// See also [convertToCBZ].
const ConvertToCBZFamily();
final class ConvertToCBZFamily extends $Family
with
$FunctionalFamilyOverride<
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(
String chapterDir,
String mangaDir,
String chapterName,
List<String> pageList,
) {
return ConvertToCBZProvider(chapterDir, mangaDir, chapterName, pageList);
}
) => ConvertToCBZProvider._(
argument: (chapterDir, mangaDir, chapterName, pageList),
from: this,
);
@override
ConvertToCBZProvider getProviderOverride(
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';
String toString() => 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:ui';
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/models/manga.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:path/path.dart' as p;
import 'package:riverpod_annotation/riverpod_annotation.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
part 'download_provider.g.dart';
@riverpod
@ -56,350 +56,369 @@ Future<void> downloadChapter(
bool? useWifi,
VoidCallback? callback,
}) async {
bool onlyOnWifi = useWifi ?? ref.read(onlyOnWifiStateProvider);
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},
);
final keepAlive = ref.keepAlive();
List<PageUrl> pageUrls = [];
List<PageUrl> pages = [];
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");
try {
bool onlyOnWifi = useWifi ?? ref.read(onlyOnWifiStateProvider);
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},
);
Future<void> setProgress(DownloadProgress progress) async {
if (progress.isCompleted && itemType == ItemType.manga) {
await processConvert();
List<PageUrl> pageUrls = [];
List<PageUrl> pages = [];
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) {
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.downloads.putSync(download..chapter.value = chapter);
});
} else {
Future<void> setProgress(DownloadProgress progress) async {
if (progress.isCompleted && itemType == ItemType.manga) {
await processConvert();
}
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.downloads.putSync(
download
..succeeded = progress.completed == 0
? 0
: (progress.completed / progress.total * 100).toInt()
..total = 100
..failed = 0
..isDownload = progress.isCompleted,
);
isar.downloads.putSync(download..chapter.value = chapter);
});
} else {
final download = isar.downloads.getSync(chapter.id!);
if (download != null && progress.total != 0) {
isar.writeTxnSync(() {
isar.downloads.putSync(
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);
});
}
}
}
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) {
} else if (hasM3U8File) {
await m3u8Downloader?.download((progress) {
setProgress(progress);
});
}
} else if (hasM3U8File) {
await m3u8Downloader?.download((progress) {
setProgress(progress);
});
}
if (callback != null) {
callback();
if (callback != null) {
callback();
}
keepAlive.close();
} catch (_) {
keepAlive.close();
}
}
@riverpod
Future<void> processDownloads(Ref ref, {bool? useWifi}) async {
final ongoingDownloads = await isar.downloads
.filter()
.idIsNotNull()
.isDownloadEqualTo(false)
.isStartDownloadEqualTo(true)
.findAll();
final maxConcurrentDownloads = ref.read(concurrentDownloadsStateProvider);
int index = 0;
int downloaded = 0;
int current = 0;
await Future.doWhile(() async {
await Future.delayed(const Duration(seconds: 1));
if (ongoingDownloads.length == downloaded) {
return false;
}
if (current < maxConcurrentDownloads) {
current++;
final downloadItem = ongoingDownloads[index++];
final chapter = downloadItem.chapter.value!;
chapter.cancelDownloads(downloadItem.id);
ref.read(
downloadChapterProvider(
chapter: chapter,
useWifi: useWifi,
callback: () {
downloaded++;
current--;
},
),
);
}
return true;
});
final keepAlive = ref.keepAlive();
try {
final ongoingDownloads = await isar.downloads
.filter()
.idIsNotNull()
.isDownloadEqualTo(false)
.isStartDownloadEqualTo(true)
.findAll();
final maxConcurrentDownloads = ref.read(concurrentDownloadsStateProvider);
int index = 0;
int downloaded = 0;
int current = 0;
await Future.doWhile(() async {
await Future.delayed(const Duration(seconds: 1));
if (ongoingDownloads.length == downloaded) {
return false;
}
if (current < maxConcurrentDownloads) {
current++;
final downloadItem = ongoingDownloads[index++];
final chapter = downloadItem.chapter.value!;
chapter.cancelDownloads(downloadItem.id);
ref.read(
downloadChapterProvider(
chapter: chapter,
useWifi: useWifi,
callback: () {
downloaded++;
current--;
},
),
);
}
return true;
});
keepAlive.close();
} catch (_) {
keepAlive.close();
}
}

View file

@ -6,431 +6,231 @@ part of 'download_provider.dart';
// RiverpodGenerator
// **************************************************************************
String _$addDownloadToQueueHash() =>
r'35e8e724755be265a9bf167e4641336630a465d2';
// 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 [addDownloadToQueue].
@ProviderFor(addDownloadToQueue)
const addDownloadToQueueProvider = AddDownloadToQueueFamily();
const addDownloadToQueueProvider = AddDownloadToQueueFamily._();
/// See also [addDownloadToQueue].
class AddDownloadToQueueFamily extends Family<AsyncValue<void>> {
/// See also [addDownloadToQueue].
const AddDownloadToQueueFamily();
final class AddDownloadToQueueProvider
extends $FunctionalProvider<AsyncValue<void>, void, FutureOr<void>>
with $FutureModifier<void>, $FutureProvider<void> {
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].
AddDownloadToQueueProvider call({required Chapter chapter}) {
return AddDownloadToQueueProvider(chapter: chapter);
@override
String debugGetCreateSourceHash() => _$addDownloadToQueueHash();
@override
String toString() {
return r'addDownloadToQueueProvider'
''
'($argument)';
}
@$internal
@override
AddDownloadToQueueProvider getProviderOverride(
covariant AddDownloadToQueueProvider provider,
) {
return call(chapter: provider.chapter);
}
static const Iterable<ProviderOrFamily>? _dependencies = null;
$FutureProviderElement<void> $createElement($ProviderPointer pointer) =>
$FutureProviderElement(pointer);
@override
Iterable<ProviderOrFamily>? get dependencies => _dependencies;
static const Iterable<ProviderOrFamily>? _allTransitiveDependencies = null;
@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);
FutureOr<void> create(Ref ref) {
final argument = this.argument as Chapter;
return addDownloadToQueue(ref, chapter: argument);
}
@override
bool operator ==(Object other) {
return other is AddDownloadToQueueProvider && other.chapter == chapter;
return other is AddDownloadToQueueProvider && other.argument == argument;
}
@override
int get hashCode {
var hash = _SystemHash.combine(0, runtimeType.hashCode);
hash = _SystemHash.combine(hash, chapter.hashCode);
return _SystemHash.finish(hash);
return argument.hashCode;
}
}
@Deprecated('Will be removed in 3.0. Use Ref instead')
// ignore: unused_element
mixin AddDownloadToQueueRef on AutoDisposeFutureProviderRef<void> {
/// The parameter `chapter` of this provider.
Chapter get chapter;
}
String _$addDownloadToQueueHash() =>
r'35e8e724755be265a9bf167e4641336630a465d2';
class _AddDownloadToQueueProviderElement
extends AutoDisposeFutureProviderElement<void>
with AddDownloadToQueueRef {
_AddDownloadToQueueProviderElement(super.provider);
final class AddDownloadToQueueFamily extends $Family
with $FunctionalFamilyOverride<FutureOr<void>, Chapter> {
const AddDownloadToQueueFamily._()
: super(
retry: null,
name: r'addDownloadToQueueProvider',
dependencies: null,
$allTransitiveDependencies: null,
isAutoDispose: true,
);
AddDownloadToQueueProvider call({required Chapter chapter}) =>
AddDownloadToQueueProvider._(argument: chapter, from: this);
@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';
/// See also [downloadChapter].
@ProviderFor(downloadChapter)
const downloadChapterProvider = DownloadChapterFamily();
final class DownloadChapterFamily extends $Family
with
$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({
required Chapter chapter,
bool? useWifi,
void Function()? callback,
}) {
return DownloadChapterProvider(
chapter: chapter,
useWifi: useWifi,
callback: callback,
);
}
VoidCallback? callback,
}) => DownloadChapterProvider._(
argument: (chapter: chapter, useWifi: useWifi, callback: callback),
from: this,
);
@override
DownloadChapterProvider getProviderOverride(
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';
String toString() => r'downloadChapterProvider';
}
/// See also [downloadChapter].
class DownloadChapterProvider extends AutoDisposeFutureProvider<void> {
/// See also [downloadChapter].
DownloadChapterProvider({
required Chapter chapter,
bool? useWifi,
void Function()? callback,
}) : this._internal(
(ref) => downloadChapter(
ref as DownloadChapterRef,
chapter: chapter,
useWifi: useWifi,
callback: callback,
),
from: downloadChapterProvider,
name: r'downloadChapterProvider',
debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product')
? null
: _$downloadChapterHash,
dependencies: DownloadChapterFamily._dependencies,
allTransitiveDependencies:
DownloadChapterFamily._allTransitiveDependencies,
chapter: chapter,
useWifi: useWifi,
callback: callback,
@ProviderFor(processDownloads)
const processDownloadsProvider = ProcessDownloadsFamily._();
final class ProcessDownloadsProvider
extends $FunctionalProvider<AsyncValue<void>, void, FutureOr<void>>
with $FutureModifier<void>, $FutureProvider<void> {
const ProcessDownloadsProvider._({
required ProcessDownloadsFamily super.from,
required bool? super.argument,
}) : super(
retry: null,
name: r'processDownloadsProvider',
isAutoDispose: true,
dependencies: null,
$allTransitiveDependencies: null,
);
DownloadChapterProvider._internal(
super._createNotifier, {
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
String debugGetCreateSourceHash() => _$processDownloadsHash();
@override
Override overrideWith(
FutureOr<void> Function(DownloadChapterRef provider) create,
) {
return ProviderOverride(
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,
),
);
String toString() {
return r'processDownloadsProvider'
''
'($argument)';
}
@$internal
@override
AutoDisposeFutureProviderElement<void> createElement() {
return _DownloadChapterProviderElement(this);
$FutureProviderElement<void> $createElement($ProviderPointer pointer) =>
$FutureProviderElement(pointer);
@override
FutureOr<void> create(Ref ref) {
final argument = this.argument as bool?;
return processDownloads(ref, useWifi: argument);
}
@override
bool operator ==(Object other) {
return other is DownloadChapterProvider &&
other.chapter == chapter &&
other.useWifi == useWifi &&
other.callback == callback;
return other is ProcessDownloadsProvider && other.argument == argument;
}
@override
int get hashCode {
var hash = _SystemHash.combine(0, runtimeType.hashCode);
hash = _SystemHash.combine(hash, chapter.hashCode);
hash = _SystemHash.combine(hash, useWifi.hashCode);
hash = _SystemHash.combine(hash, callback.hashCode);
return _SystemHash.finish(hash);
return argument.hashCode;
}
}
@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';
/// See also [processDownloads].
@ProviderFor(processDownloads)
const processDownloadsProvider = ProcessDownloadsFamily();
/// See also [processDownloads].
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,
final class ProcessDownloadsFamily extends $Family
with $FunctionalFamilyOverride<FutureOr<void>, bool?> {
const ProcessDownloadsFamily._()
: super(
retry: null,
name: r'processDownloadsProvider',
debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product')
? null
: _$processDownloadsHash,
dependencies: ProcessDownloadsFamily._dependencies,
allTransitiveDependencies:
ProcessDownloadsFamily._allTransitiveDependencies,
useWifi: useWifi,
dependencies: null,
$allTransitiveDependencies: null,
isAutoDispose: true,
);
ProcessDownloadsProvider._internal(
super._createNotifier, {
required super.name,
required super.dependencies,
required super.allTransitiveDependencies,
required super.debugGetCreateSourceHash,
required super.from,
required this.useWifi,
}) : super.internal();
final bool? useWifi;
ProcessDownloadsProvider call({bool? useWifi}) =>
ProcessDownloadsProvider._(argument: useWifi, from: this);
@override
Override overrideWith(
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);
}
String toString() => r'processDownloadsProvider';
}
@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
// **************************************************************************
// 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() =>
r'6e91cef2e4a9925cab1a7a764ac6a0e741398fb2';
/// See also [MangaHomeDisplayTypeState].
@ProviderFor(MangaHomeDisplayTypeState)
final mangaHomeDisplayTypeStateProvider =
AutoDisposeNotifierProvider<
MangaHomeDisplayTypeState,
DisplayType
>.internal(
MangaHomeDisplayTypeState.new,
name: r'mangaHomeDisplayTypeStateProvider',
debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product')
? null
: _$mangaHomeDisplayTypeStateHash,
dependencies: null,
allTransitiveDependencies: null,
);
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
abstract class _$MangaHomeDisplayTypeState extends $Notifier<DisplayType> {
DisplayType build();
@$mustCallSuper
@override
void runBuild() {
final created = build();
final ref = this.ref as $Ref<DisplayType, DisplayType>;
final element =
ref.element
as $ClassProviderElement<
AnyNotifier<DisplayType, DisplayType>,
DisplayType,
Object?,
Object?
>;
element.handleValue(ref, created);
}
}

View file

@ -6,62 +6,169 @@ part of 'color_filter_provider.dart';
// 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() =>
r'e83ed3712f2f69c6ad15b2b3b10ff17cf8bb2898';
/// See also [CustomColorFilterState].
@ProviderFor(CustomColorFilterState)
final customColorFilterStateProvider =
AutoDisposeNotifierProvider<
CustomColorFilterState,
CustomColorFilter?
>.internal(
CustomColorFilterState.new,
name: r'customColorFilterStateProvider',
debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product')
? null
: _$customColorFilterStateHash,
dependencies: null,
allTransitiveDependencies: null,
);
abstract class _$CustomColorFilterState extends $Notifier<CustomColorFilter?> {
CustomColorFilter? build();
@$mustCallSuper
@override
void runBuild() {
final created = build();
final ref = this.ref as $Ref<CustomColorFilter?, CustomColorFilter?>;
final element =
ref.element
as $ClassProviderElement<
AnyNotifier<CustomColorFilter?, CustomColorFilter?>,
CustomColorFilter?,
Object?,
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() =>
r'20579f0101c7f64051d63ea85813aeb068fdb3c9';
/// See also [EnableCustomColorFilterState].
@ProviderFor(EnableCustomColorFilterState)
final enableCustomColorFilterStateProvider =
AutoDisposeNotifierProvider<EnableCustomColorFilterState, bool>.internal(
EnableCustomColorFilterState.new,
name: r'enableCustomColorFilterStateProvider',
debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product')
? null
: _$enableCustomColorFilterStateHash,
dependencies: null,
allTransitiveDependencies: null,
);
abstract class _$EnableCustomColorFilterState extends $Notifier<bool> {
bool build();
@$mustCallSuper
@override
void runBuild() {
final created = build();
final ref = this.ref as $Ref<bool, bool>;
final element =
ref.element
as $ClassProviderElement<
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() =>
r'92e84b352b519dd32d1c418d7477a10a8921bc19';
/// See also [ColorFilterBlendModeState].
@ProviderFor(ColorFilterBlendModeState)
final colorFilterBlendModeStateProvider =
AutoDisposeNotifierProvider<
ColorFilterBlendModeState,
ColorFilterBlendMode
>.internal(
ColorFilterBlendModeState.new,
name: r'colorFilterBlendModeStateProvider',
debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product')
? null
: _$colorFilterBlendModeStateHash,
dependencies: null,
allTransitiveDependencies: null,
);
typedef _$ColorFilterBlendModeState = AutoDisposeNotifier<ColorFilterBlendMode>;
// 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
abstract class _$ColorFilterBlendModeState
extends $Notifier<ColorFilterBlendMode> {
ColorFilterBlendMode build();
@$mustCallSuper
@override
void runBuild() {
final created = build();
final ref = this.ref as $Ref<ColorFilterBlendMode, ColorFilterBlendMode>;
final element =
ref.element
as $ClassProviderElement<
AnyNotifier<ColorFilterBlendMode, ColorFilterBlendMode>,
ColorFilterBlendMode,
Object?,
Object?
>;
element.handleValue(ref, created);
}
}

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/utils/extensions/others.dart';
import 'package:riverpod_annotation/riverpod_annotation.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
part 'crop_borders_provider.g.dart';
@Riverpod(keepAlive: true)

View file

@ -6,166 +6,93 @@ part of 'crop_borders_provider.dart';
// 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)
const cropBordersProvider = CropBordersFamily();
const cropBordersProvider = CropBordersFamily._();
/// See also [cropBorders].
class CropBordersFamily extends Family<AsyncValue<Uint8List?>> {
/// See also [cropBorders].
const CropBordersFamily();
/// See also [cropBorders].
CropBordersProvider call({
required UChapDataPreload data,
required bool cropBorder,
}) {
return CropBordersProvider(data: data, cropBorder: cropBorder);
}
@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,
final class CropBordersProvider
extends
$FunctionalProvider<
AsyncValue<Uint8List?>,
Uint8List?,
FutureOr<Uint8List?>
>
with $FutureModifier<Uint8List?>, $FutureProvider<Uint8List?> {
const CropBordersProvider._({
required CropBordersFamily super.from,
required ({UChapDataPreload data, bool cropBorder}) super.argument,
}) : super(
retry: null,
name: r'cropBordersProvider',
debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product')
? null
: _$cropBordersHash,
dependencies: CropBordersFamily._dependencies,
allTransitiveDependencies:
CropBordersFamily._allTransitiveDependencies,
data: data,
cropBorder: cropBorder,
isAutoDispose: false,
dependencies: null,
$allTransitiveDependencies: null,
);
CropBordersProvider._internal(
super._createNotifier, {
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
String debugGetCreateSourceHash() => _$cropBordersHash();
@override
Override overrideWith(
FutureOr<Uint8List?> Function(CropBordersRef provider) create,
) {
return ProviderOverride(
origin: this,
override: CropBordersProvider._internal(
(ref) => create(ref as CropBordersRef),
from: from,
name: null,
dependencies: null,
allTransitiveDependencies: null,
debugGetCreateSourceHash: null,
data: data,
cropBorder: cropBorder,
),
String toString() {
return r'cropBordersProvider'
''
'$argument';
}
@$internal
@override
$FutureProviderElement<Uint8List?> $createElement($ProviderPointer pointer) =>
$FutureProviderElement(pointer);
@override
FutureOr<Uint8List?> create(Ref ref) {
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
bool operator ==(Object other) {
return other is CropBordersProvider &&
other.data == data &&
other.cropBorder == cropBorder;
return other is CropBordersProvider && other.argument == argument;
}
@override
int get hashCode {
var hash = _SystemHash.combine(0, runtimeType.hashCode);
hash = _SystemHash.combine(hash, data.hashCode);
hash = _SystemHash.combine(hash, cropBorder.hashCode);
return _SystemHash.finish(hash);
return argument.hashCode;
}
}
@Deprecated('Will be removed in 3.0. Use Ref instead')
// ignore: unused_element
mixin CropBordersRef on FutureProviderRef<Uint8List?> {
/// The parameter `data` of this provider.
UChapDataPreload get data;
String _$cropBordersHash() => r'04b24357737d6cc75caa38feca77bb5d41f00aa6';
/// The parameter `cropBorder` of this provider.
bool get cropBorder;
}
final class CropBordersFamily extends $Family
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?>
with CropBordersRef {
_CropBordersProviderElement(super.provider);
CropBordersProvider call({
required UChapDataPreload data,
required bool cropBorder,
}) => CropBordersProvider._(
argument: (data: data, cropBorder: cropBorder),
from: this,
);
@override
UChapDataPreload get data => (origin as CropBordersProvider).data;
@override
bool get cropBorder => (origin as CropBordersProvider).cropBorder;
String toString() => r'cropBordersProvider';
}
// 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/models/chapter.dart';
import 'package:mangayomi/services/get_chapter_pages.dart';
import 'package:riverpod_annotation/riverpod_annotation.dart';
part 'manga_reader_provider.g.dart';
class ChapterWithPages {
final Chapter chapter;
@ -10,21 +11,14 @@ class ChapterWithPages {
ChapterWithPages({required this.chapter, required this.pages});
}
class MangaReaderController extends FamilyAsyncNotifier<ChapterWithPages, int> {
@override
Future<ChapterWithPages> build(int chapterId) async {
final chap = await isar.chapters.get(chapterId);
if (chap == null) {
throw Exception('Chapter #$chapterId not found');
}
final pages = await ref.read(getChapterPagesProvider(chapter: chap).future);
return ChapterWithPages(chapter: chap, pages: pages);
@riverpod
Future<ChapterWithPages> mangaReader(Ref ref, int chapterId) async {
final chap = await isar.chapters.get(chapterId);
if (chap == null) {
throw Exception('Chapter #$chapterId not found');
}
}
final mangaReaderProvider =
AsyncNotifierProvider.family<MangaReaderController, ChapterWithPages, int>(
MangaReaderController.new,
);
final pages = await ref.read(getChapterPagesProvider(chapter: chap).future);
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:go_router/go_router.dart';
import 'package:isar/isar.dart';
import 'package:isar_community/isar.dart';
import 'package:mangayomi/main.dart';
import 'package:mangayomi/models/chapter.dart';
import 'package:mangayomi/models/manga.dart';

View file

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

View file

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