diff --git a/lib/modules/browse/extension/extension_screen.dart b/lib/modules/browse/extension/extension_screen.dart index fce8e5fe..226bc4e2 100644 --- a/lib/modules/browse/extension/extension_screen.dart +++ b/lib/modules/browse/extension/extension_screen.dart @@ -4,11 +4,9 @@ import 'package:mangayomi/modules/widgets/custom_sliver_grouped_list_view.dart'; import 'package:mangayomi/models/manga.dart'; import 'package:mangayomi/models/source.dart'; import 'package:mangayomi/modules/browse/extension/providers/extensions_provider.dart'; -import 'package:mangayomi/services/fetch_anime_sources.dart'; -import 'package:mangayomi/services/fetch_manga_sources.dart'; +import 'package:mangayomi/services/fetch_item_sources.dart'; import 'package:mangayomi/modules/widgets/progress_center.dart'; import 'package:mangayomi/providers/l10n_providers.dart'; -import 'package:mangayomi/services/fetch_novel_sources.dart'; import 'package:mangayomi/services/fetch_sources_list.dart'; import 'package:mangayomi/utils/language.dart'; import 'package:mangayomi/modules/browse/extension/widgets/extension_list_tile_widget.dart'; @@ -30,48 +28,34 @@ class _ExtensionScreenState extends ConsumerState { final ScrollController controller = ScrollController(); bool isUpdating = false; Future _refreshSources() { - return switch (widget.itemType) { - ItemType.manga => ref.refresh( - fetchMangaSourcesListProvider(id: null, reFresh: true).future, - ), - ItemType.anime => ref.refresh( - fetchAnimeSourcesListProvider(id: null, reFresh: true).future, - ), - _ => ref.refresh( - fetchNovelSourcesListProvider(id: null, reFresh: true).future, - ), - }; + return ref.refresh( + fetchItemSourcesListProvider( + id: null, + reFresh: true, + itemType: widget.itemType, + ).future, + ); } Future _updateSource(Source source) { - switch (source.itemType) { - case ItemType.manga: - return ref.read( - fetchMangaSourcesListProvider(id: source.id, reFresh: true).future, - ); - case ItemType.anime: - return ref.read( - fetchAnimeSourcesListProvider(id: source.id, reFresh: true).future, - ); - default: - return ref.read( - fetchNovelSourcesListProvider(id: source.id, reFresh: true).future, - ); - } + return ref.read( + fetchItemSourcesListProvider( + id: source.id, + reFresh: true, + itemType: source.itemType, + ).future, + ); } @override Widget build(BuildContext context) { - switch (widget.itemType) { - case ItemType.manga: - ref.read(fetchMangaSourcesListProvider(id: null, reFresh: false)); - break; - case ItemType.anime: - ref.read(fetchAnimeSourcesListProvider(id: null, reFresh: false)); - break; - default: - ref.read(fetchNovelSourcesListProvider(id: null, reFresh: false)); - } + ref.read( + fetchItemSourcesListProvider( + id: null, + reFresh: false, + itemType: widget.itemType, + ), + ); final streamExtensions = ref.watch( getExtensionsStreamProvider(widget.itemType), diff --git a/lib/modules/browse/extension/widgets/extension_list_tile_widget.dart b/lib/modules/browse/extension/widgets/extension_list_tile_widget.dart index 474d0cbf..a2ff48db 100644 --- a/lib/modules/browse/extension/widgets/extension_list_tile_widget.dart +++ b/lib/modules/browse/extension/widgets/extension_list_tile_widget.dart @@ -1,12 +1,9 @@ import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:go_router/go_router.dart'; -import 'package:mangayomi/models/manga.dart'; import 'package:mangayomi/models/source.dart'; -import 'package:mangayomi/services/fetch_anime_sources.dart'; -import 'package:mangayomi/services/fetch_manga_sources.dart'; +import 'package:mangayomi/services/fetch_item_sources.dart'; import 'package:mangayomi/providers/l10n_providers.dart'; -import 'package:mangayomi/services/fetch_novel_sources.dart'; import 'package:mangayomi/services/fetch_sources_list.dart'; import 'package:mangayomi/utils/cached_network.dart'; import 'package:mangayomi/utils/extensions/build_context_extensions.dart'; @@ -45,28 +42,14 @@ class _ExtensionListTileWidgetState setState(() => _isLoading = true); try { - final future = switch (widget.source.itemType) { - ItemType.manga => ref.watch( - fetchMangaSourcesListProvider( - id: widget.source.id, - reFresh: true, - ).future, - ), - ItemType.anime => ref.watch( - fetchAnimeSourcesListProvider( - id: widget.source.id, - reFresh: true, - ).future, - ), - _ => ref.watch( - fetchNovelSourcesListProvider( - id: widget.source.id, - reFresh: true, - ).future, - ), - }; + final provider = fetchItemSourcesListProvider( + id: widget.source.id, + reFresh: true, + itemType: widget.source.itemType, + ); - await future; + if (!widget.source.isAdded!) ref.invalidate(provider); + await ref.watch(provider.future); } finally { if (mounted) setState(() => _isLoading = false); } diff --git a/lib/modules/main_view/main_screen.dart b/lib/modules/main_view/main_screen.dart index d1ce7519..54de0244 100644 --- a/lib/modules/main_view/main_screen.dart +++ b/lib/modules/main_view/main_screen.dart @@ -14,14 +14,12 @@ import 'package:mangayomi/models/source.dart'; import 'package:mangayomi/modules/more/settings/reader/providers/reader_state_provider.dart'; import 'package:mangayomi/modules/more/settings/sync/providers/sync_providers.dart'; import 'package:mangayomi/modules/widgets/loading_icon.dart'; -import 'package:mangayomi/services/fetch_anime_sources.dart'; -import 'package:mangayomi/services/fetch_manga_sources.dart'; +import 'package:mangayomi/services/fetch_item_sources.dart'; import 'package:mangayomi/modules/main_view/providers/migration.dart'; import 'package:mangayomi/modules/more/about/providers/check_for_update.dart'; import 'package:mangayomi/modules/more/data_and_storage/providers/auto_backup.dart'; import 'package:mangayomi/providers/l10n_providers.dart'; import 'package:mangayomi/router/router.dart'; -import 'package:mangayomi/services/fetch_novel_sources.dart'; import 'package:mangayomi/services/fetch_sources_list.dart'; import 'package:mangayomi/services/sync_server.dart'; import 'package:mangayomi/utils/extensions/build_context_extensions.dart'; @@ -107,9 +105,15 @@ class _MainScreenState extends ConsumerState { Future.microtask(() { if (mounted) { ref.read(checkForUpdateProvider(context: context)); - ref.read(fetchMangaSourcesListProvider(id: null, reFresh: false)); - ref.read(fetchAnimeSourcesListProvider(id: null, reFresh: false)); - ref.read(fetchNovelSourcesListProvider(id: null, reFresh: false)); + for (var type in ItemType.values) { + ref.read( + FetchItemSourcesListProvider( + id: null, + reFresh: false, + itemType: type, + ), + ); + } } }); } diff --git a/lib/modules/more/settings/browse/providers/browse_state_provider.dart b/lib/modules/more/settings/browse/providers/browse_state_provider.dart index 34436407..a8791fda 100644 --- a/lib/modules/more/settings/browse/providers/browse_state_provider.dart +++ b/lib/modules/more/settings/browse/providers/browse_state_provider.dart @@ -5,9 +5,7 @@ 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:mangayomi/services/fetch_anime_sources.dart'; -import 'package:mangayomi/services/fetch_manga_sources.dart'; -import 'package:mangayomi/services/fetch_novel_sources.dart'; +import 'package:mangayomi/services/fetch_item_sources.dart'; import 'package:mangayomi/services/http/m_client.dart'; import 'package:riverpod_annotation/riverpod_annotation.dart'; part 'browse_state_provider.g.dart'; @@ -57,17 +55,13 @@ class ExtensionsRepoState extends _$ExtensionsRepoState { a; }); try { - final a = switch (itemType) { - ItemType.manga => ref.refresh( - fetchMangaSourcesListProvider(id: null, reFresh: false).future, - ), - ItemType.anime => ref.refresh( - fetchAnimeSourcesListProvider(id: null, reFresh: false).future, - ), - _ => ref.refresh( - fetchNovelSourcesListProvider(id: null, reFresh: false).future, - ), - }; + final a = ref.refresh( + fetchItemSourcesListProvider( + id: null, + reFresh: false, + itemType: itemType, + ).future, + ); Future.wait([a]); } catch (_) {} } diff --git a/lib/services/fetch_anime_sources.dart b/lib/services/fetch_item_sources.dart similarity index 77% rename from lib/services/fetch_anime_sources.dart rename to lib/services/fetch_item_sources.dart index 3674ebba..9b6362e6 100644 --- a/lib/services/fetch_anime_sources.dart +++ b/lib/services/fetch_item_sources.dart @@ -4,23 +4,24 @@ import 'package:mangayomi/modules/more/settings/browse/providers/browse_state_pr import 'package:mangayomi/services/fetch_sources_list.dart'; import 'package:riverpod_annotation/riverpod_annotation.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; -part 'fetch_anime_sources.g.dart'; +part 'fetch_item_sources.g.dart'; @Riverpod(keepAlive: true) -Future fetchAnimeSourcesList( +Future fetchItemSourcesList( Ref ref, { int? id, required bool reFresh, + required ItemType itemType, }) async { if (ref.watch(checkForExtensionsUpdateStateProvider) || reFresh) { - final repos = ref.watch(extensionsRepoStateProvider(ItemType.anime)); + final repos = ref.watch(extensionsRepoStateProvider(itemType)); for (Repo repo in repos) { await fetchSourcesList( repo: repo, refresh: reFresh, id: id, ref: ref, - itemType: ItemType.anime, + itemType: itemType, ); } } diff --git a/lib/services/fetch_anime_sources.g.dart b/lib/services/fetch_item_sources.g.dart similarity index 55% rename from lib/services/fetch_anime_sources.g.dart rename to lib/services/fetch_item_sources.g.dart index 4fdc720f..e39993b3 100644 --- a/lib/services/fetch_anime_sources.g.dart +++ b/lib/services/fetch_item_sources.g.dart @@ -1,13 +1,13 @@ // GENERATED CODE - DO NOT MODIFY BY HAND -part of 'fetch_anime_sources.dart'; +part of 'fetch_item_sources.dart'; // ************************************************************************** // RiverpodGenerator // ************************************************************************** -String _$fetchAnimeSourcesListHash() => - r'e7f673d37239c74f3403de3a234bbc1d6e171332'; +String _$fetchItemSourcesListHash() => + r'16238be20517fddacf52a2694fbd50cafbfa7496'; /// Copied from Dart SDK class _SystemHash { @@ -30,33 +30,36 @@ class _SystemHash { } } -/// See also [fetchAnimeSourcesList]. -@ProviderFor(fetchAnimeSourcesList) -const fetchAnimeSourcesListProvider = FetchAnimeSourcesListFamily(); +/// See also [fetchItemSourcesList]. +@ProviderFor(fetchItemSourcesList) +const fetchItemSourcesListProvider = FetchItemSourcesListFamily(); -/// See also [fetchAnimeSourcesList]. -class FetchAnimeSourcesListFamily extends Family> { - /// See also [fetchAnimeSourcesList]. - const FetchAnimeSourcesListFamily(); +/// See also [fetchItemSourcesList]. +class FetchItemSourcesListFamily extends Family> { + /// See also [fetchItemSourcesList]. + const FetchItemSourcesListFamily(); - /// See also [fetchAnimeSourcesList]. - FetchAnimeSourcesListProvider call({ + /// See also [fetchItemSourcesList]. + FetchItemSourcesListProvider call({ int? id, required bool reFresh, + required ItemType itemType, }) { - return FetchAnimeSourcesListProvider( + return FetchItemSourcesListProvider( id: id, reFresh: reFresh, + itemType: itemType, ); } @override - FetchAnimeSourcesListProvider getProviderOverride( - covariant FetchAnimeSourcesListProvider provider, + FetchItemSourcesListProvider getProviderOverride( + covariant FetchItemSourcesListProvider provider, ) { return call( id: provider.id, reFresh: provider.reFresh, + itemType: provider.itemType, ); } @@ -72,35 +75,38 @@ class FetchAnimeSourcesListFamily extends Family> { _allTransitiveDependencies; @override - String? get name => r'fetchAnimeSourcesListProvider'; + String? get name => r'fetchItemSourcesListProvider'; } -/// See also [fetchAnimeSourcesList]. -class FetchAnimeSourcesListProvider extends FutureProvider { - /// See also [fetchAnimeSourcesList]. - FetchAnimeSourcesListProvider({ +/// See also [fetchItemSourcesList]. +class FetchItemSourcesListProvider extends FutureProvider { + /// See also [fetchItemSourcesList]. + FetchItemSourcesListProvider({ int? id, required bool reFresh, + required ItemType itemType, }) : this._internal( - (ref) => fetchAnimeSourcesList( - ref as FetchAnimeSourcesListRef, + (ref) => fetchItemSourcesList( + ref as FetchItemSourcesListRef, id: id, reFresh: reFresh, + itemType: itemType, ), - from: fetchAnimeSourcesListProvider, - name: r'fetchAnimeSourcesListProvider', + from: fetchItemSourcesListProvider, + name: r'fetchItemSourcesListProvider', debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product') ? null - : _$fetchAnimeSourcesListHash, - dependencies: FetchAnimeSourcesListFamily._dependencies, + : _$fetchItemSourcesListHash, + dependencies: FetchItemSourcesListFamily._dependencies, allTransitiveDependencies: - FetchAnimeSourcesListFamily._allTransitiveDependencies, + FetchItemSourcesListFamily._allTransitiveDependencies, id: id, reFresh: reFresh, + itemType: itemType, ); - FetchAnimeSourcesListProvider._internal( + FetchItemSourcesListProvider._internal( super._createNotifier, { required super.name, required super.dependencies, @@ -109,19 +115,21 @@ class FetchAnimeSourcesListProvider extends FutureProvider { required super.from, required this.id, required this.reFresh, + required this.itemType, }) : super.internal(); final int? id; final bool reFresh; + final ItemType itemType; @override Override overrideWith( - FutureOr Function(FetchAnimeSourcesListRef provider) create, + FutureOr Function(FetchItemSourcesListRef provider) create, ) { return ProviderOverride( origin: this, - override: FetchAnimeSourcesListProvider._internal( - (ref) => create(ref as FetchAnimeSourcesListRef), + override: FetchItemSourcesListProvider._internal( + (ref) => create(ref as FetchItemSourcesListRef), from: from, name: null, dependencies: null, @@ -129,20 +137,22 @@ class FetchAnimeSourcesListProvider extends FutureProvider { debugGetCreateSourceHash: null, id: id, reFresh: reFresh, + itemType: itemType, ), ); } @override FutureProviderElement createElement() { - return _FetchAnimeSourcesListProviderElement(this); + return _FetchItemSourcesListProviderElement(this); } @override bool operator ==(Object other) { - return other is FetchAnimeSourcesListProvider && + return other is FetchItemSourcesListProvider && other.id == id && - other.reFresh == reFresh; + other.reFresh == reFresh && + other.itemType == itemType; } @override @@ -150,6 +160,7 @@ class FetchAnimeSourcesListProvider extends FutureProvider { var hash = _SystemHash.combine(0, runtimeType.hashCode); hash = _SystemHash.combine(hash, id.hashCode); hash = _SystemHash.combine(hash, reFresh.hashCode); + hash = _SystemHash.combine(hash, itemType.hashCode); return _SystemHash.finish(hash); } @@ -157,22 +168,27 @@ class FetchAnimeSourcesListProvider extends FutureProvider { @Deprecated('Will be removed in 3.0. Use Ref instead') // ignore: unused_element -mixin FetchAnimeSourcesListRef on FutureProviderRef { +mixin FetchItemSourcesListRef on FutureProviderRef { /// The parameter `id` of this provider. int? get id; /// The parameter `reFresh` of this provider. bool get reFresh; + + /// The parameter `itemType` of this provider. + ItemType get itemType; } -class _FetchAnimeSourcesListProviderElement extends FutureProviderElement - with FetchAnimeSourcesListRef { - _FetchAnimeSourcesListProviderElement(super.provider); +class _FetchItemSourcesListProviderElement extends FutureProviderElement + with FetchItemSourcesListRef { + _FetchItemSourcesListProviderElement(super.provider); @override - int? get id => (origin as FetchAnimeSourcesListProvider).id; + int? get id => (origin as FetchItemSourcesListProvider).id; @override - bool get reFresh => (origin as FetchAnimeSourcesListProvider).reFresh; + bool get reFresh => (origin as FetchItemSourcesListProvider).reFresh; + @override + ItemType get itemType => (origin as FetchItemSourcesListProvider).itemType; } // 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 diff --git a/lib/services/fetch_manga_sources.dart b/lib/services/fetch_manga_sources.dart deleted file mode 100644 index 09fefb0c..00000000 --- a/lib/services/fetch_manga_sources.dart +++ /dev/null @@ -1,23 +0,0 @@ -import 'package:mangayomi/models/manga.dart'; -import 'package:mangayomi/models/settings.dart'; -import 'package:mangayomi/modules/more/settings/browse/providers/browse_state_provider.dart'; -import 'package:mangayomi/services/fetch_sources_list.dart'; -import 'package:riverpod_annotation/riverpod_annotation.dart'; -import 'package:flutter_riverpod/flutter_riverpod.dart'; -part 'fetch_manga_sources.g.dart'; - -@Riverpod(keepAlive: true) -Future fetchMangaSourcesList(Ref ref, {int? id, required reFresh}) async { - if (ref.watch(checkForExtensionsUpdateStateProvider) || reFresh) { - final repos = ref.watch(extensionsRepoStateProvider(ItemType.manga)); - for (Repo repo in repos) { - await fetchSourcesList( - repo: repo, - refresh: reFresh, - id: id, - ref: ref, - itemType: ItemType.manga, - ); - } - } -} diff --git a/lib/services/fetch_manga_sources.g.dart b/lib/services/fetch_manga_sources.g.dart deleted file mode 100644 index c2cd9a9d..00000000 --- a/lib/services/fetch_manga_sources.g.dart +++ /dev/null @@ -1,178 +0,0 @@ -// GENERATED CODE - DO NOT MODIFY BY HAND - -part of 'fetch_manga_sources.dart'; - -// ************************************************************************** -// RiverpodGenerator -// ************************************************************************** - -String _$fetchMangaSourcesListHash() => - r'176206caf5c51a94b100866d5cdb612d2a5c2fb7'; - -/// 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 [fetchMangaSourcesList]. -@ProviderFor(fetchMangaSourcesList) -const fetchMangaSourcesListProvider = FetchMangaSourcesListFamily(); - -/// See also [fetchMangaSourcesList]. -class FetchMangaSourcesListFamily extends Family> { - /// See also [fetchMangaSourcesList]. - const FetchMangaSourcesListFamily(); - - /// See also [fetchMangaSourcesList]. - FetchMangaSourcesListProvider call({ - int? id, - required dynamic reFresh, - }) { - return FetchMangaSourcesListProvider( - id: id, - reFresh: reFresh, - ); - } - - @override - FetchMangaSourcesListProvider getProviderOverride( - covariant FetchMangaSourcesListProvider provider, - ) { - return call( - id: provider.id, - reFresh: provider.reFresh, - ); - } - - static const Iterable? _dependencies = null; - - @override - Iterable? get dependencies => _dependencies; - - static const Iterable? _allTransitiveDependencies = null; - - @override - Iterable? get allTransitiveDependencies => - _allTransitiveDependencies; - - @override - String? get name => r'fetchMangaSourcesListProvider'; -} - -/// See also [fetchMangaSourcesList]. -class FetchMangaSourcesListProvider extends FutureProvider { - /// See also [fetchMangaSourcesList]. - FetchMangaSourcesListProvider({ - int? id, - required dynamic reFresh, - }) : this._internal( - (ref) => fetchMangaSourcesList( - ref as FetchMangaSourcesListRef, - id: id, - reFresh: reFresh, - ), - from: fetchMangaSourcesListProvider, - name: r'fetchMangaSourcesListProvider', - debugGetCreateSourceHash: - const bool.fromEnvironment('dart.vm.product') - ? null - : _$fetchMangaSourcesListHash, - dependencies: FetchMangaSourcesListFamily._dependencies, - allTransitiveDependencies: - FetchMangaSourcesListFamily._allTransitiveDependencies, - id: id, - reFresh: reFresh, - ); - - FetchMangaSourcesListProvider._internal( - super._createNotifier, { - required super.name, - required super.dependencies, - required super.allTransitiveDependencies, - required super.debugGetCreateSourceHash, - required super.from, - required this.id, - required this.reFresh, - }) : super.internal(); - - final int? id; - final dynamic reFresh; - - @override - Override overrideWith( - FutureOr Function(FetchMangaSourcesListRef provider) create, - ) { - return ProviderOverride( - origin: this, - override: FetchMangaSourcesListProvider._internal( - (ref) => create(ref as FetchMangaSourcesListRef), - from: from, - name: null, - dependencies: null, - allTransitiveDependencies: null, - debugGetCreateSourceHash: null, - id: id, - reFresh: reFresh, - ), - ); - } - - @override - FutureProviderElement createElement() { - return _FetchMangaSourcesListProviderElement(this); - } - - @override - bool operator ==(Object other) { - return other is FetchMangaSourcesListProvider && - other.id == id && - other.reFresh == reFresh; - } - - @override - int get hashCode { - var hash = _SystemHash.combine(0, runtimeType.hashCode); - hash = _SystemHash.combine(hash, id.hashCode); - hash = _SystemHash.combine(hash, reFresh.hashCode); - - return _SystemHash.finish(hash); - } -} - -@Deprecated('Will be removed in 3.0. Use Ref instead') -// ignore: unused_element -mixin FetchMangaSourcesListRef on FutureProviderRef { - /// The parameter `id` of this provider. - int? get id; - - /// The parameter `reFresh` of this provider. - dynamic get reFresh; -} - -class _FetchMangaSourcesListProviderElement extends FutureProviderElement - with FetchMangaSourcesListRef { - _FetchMangaSourcesListProviderElement(super.provider); - - @override - int? get id => (origin as FetchMangaSourcesListProvider).id; - @override - dynamic get reFresh => (origin as FetchMangaSourcesListProvider).reFresh; -} -// 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 diff --git a/lib/services/fetch_novel_sources.dart b/lib/services/fetch_novel_sources.dart deleted file mode 100644 index 647063bc..00000000 --- a/lib/services/fetch_novel_sources.dart +++ /dev/null @@ -1,23 +0,0 @@ -import 'package:mangayomi/models/manga.dart'; -import 'package:mangayomi/models/settings.dart'; -import 'package:mangayomi/modules/more/settings/browse/providers/browse_state_provider.dart'; -import 'package:mangayomi/services/fetch_sources_list.dart'; -import 'package:riverpod_annotation/riverpod_annotation.dart'; -import 'package:flutter_riverpod/flutter_riverpod.dart'; -part 'fetch_novel_sources.g.dart'; - -@Riverpod(keepAlive: true) -Future fetchNovelSourcesList(Ref ref, {int? id, required reFresh}) async { - if (ref.watch(checkForExtensionsUpdateStateProvider) || reFresh) { - final repos = ref.watch(extensionsRepoStateProvider(ItemType.novel)); - for (Repo repo in repos) { - await fetchSourcesList( - repo: repo, - refresh: reFresh, - id: id, - ref: ref, - itemType: ItemType.novel, - ); - } - } -} diff --git a/lib/services/fetch_novel_sources.g.dart b/lib/services/fetch_novel_sources.g.dart deleted file mode 100644 index 9e1c0801..00000000 --- a/lib/services/fetch_novel_sources.g.dart +++ /dev/null @@ -1,178 +0,0 @@ -// GENERATED CODE - DO NOT MODIFY BY HAND - -part of 'fetch_novel_sources.dart'; - -// ************************************************************************** -// RiverpodGenerator -// ************************************************************************** - -String _$fetchNovelSourcesListHash() => - r'882ee56332290a6fe71d38a8378de847e4386e3a'; - -/// 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 [fetchNovelSourcesList]. -@ProviderFor(fetchNovelSourcesList) -const fetchNovelSourcesListProvider = FetchNovelSourcesListFamily(); - -/// See also [fetchNovelSourcesList]. -class FetchNovelSourcesListFamily extends Family> { - /// See also [fetchNovelSourcesList]. - const FetchNovelSourcesListFamily(); - - /// See also [fetchNovelSourcesList]. - FetchNovelSourcesListProvider call({ - int? id, - required dynamic reFresh, - }) { - return FetchNovelSourcesListProvider( - id: id, - reFresh: reFresh, - ); - } - - @override - FetchNovelSourcesListProvider getProviderOverride( - covariant FetchNovelSourcesListProvider provider, - ) { - return call( - id: provider.id, - reFresh: provider.reFresh, - ); - } - - static const Iterable? _dependencies = null; - - @override - Iterable? get dependencies => _dependencies; - - static const Iterable? _allTransitiveDependencies = null; - - @override - Iterable? get allTransitiveDependencies => - _allTransitiveDependencies; - - @override - String? get name => r'fetchNovelSourcesListProvider'; -} - -/// See also [fetchNovelSourcesList]. -class FetchNovelSourcesListProvider extends FutureProvider { - /// See also [fetchNovelSourcesList]. - FetchNovelSourcesListProvider({ - int? id, - required dynamic reFresh, - }) : this._internal( - (ref) => fetchNovelSourcesList( - ref as FetchNovelSourcesListRef, - id: id, - reFresh: reFresh, - ), - from: fetchNovelSourcesListProvider, - name: r'fetchNovelSourcesListProvider', - debugGetCreateSourceHash: - const bool.fromEnvironment('dart.vm.product') - ? null - : _$fetchNovelSourcesListHash, - dependencies: FetchNovelSourcesListFamily._dependencies, - allTransitiveDependencies: - FetchNovelSourcesListFamily._allTransitiveDependencies, - id: id, - reFresh: reFresh, - ); - - FetchNovelSourcesListProvider._internal( - super._createNotifier, { - required super.name, - required super.dependencies, - required super.allTransitiveDependencies, - required super.debugGetCreateSourceHash, - required super.from, - required this.id, - required this.reFresh, - }) : super.internal(); - - final int? id; - final dynamic reFresh; - - @override - Override overrideWith( - FutureOr Function(FetchNovelSourcesListRef provider) create, - ) { - return ProviderOverride( - origin: this, - override: FetchNovelSourcesListProvider._internal( - (ref) => create(ref as FetchNovelSourcesListRef), - from: from, - name: null, - dependencies: null, - allTransitiveDependencies: null, - debugGetCreateSourceHash: null, - id: id, - reFresh: reFresh, - ), - ); - } - - @override - FutureProviderElement createElement() { - return _FetchNovelSourcesListProviderElement(this); - } - - @override - bool operator ==(Object other) { - return other is FetchNovelSourcesListProvider && - other.id == id && - other.reFresh == reFresh; - } - - @override - int get hashCode { - var hash = _SystemHash.combine(0, runtimeType.hashCode); - hash = _SystemHash.combine(hash, id.hashCode); - hash = _SystemHash.combine(hash, reFresh.hashCode); - - return _SystemHash.finish(hash); - } -} - -@Deprecated('Will be removed in 3.0. Use Ref instead') -// ignore: unused_element -mixin FetchNovelSourcesListRef on FutureProviderRef { - /// The parameter `id` of this provider. - int? get id; - - /// The parameter `reFresh` of this provider. - dynamic get reFresh; -} - -class _FetchNovelSourcesListProviderElement extends FutureProviderElement - with FetchNovelSourcesListRef { - _FetchNovelSourcesListProviderElement(super.provider); - - @override - int? get id => (origin as FetchNovelSourcesListProvider).id; - @override - dynamic get reFresh => (origin as FetchNovelSourcesListProvider).reFresh; -} -// 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 diff --git a/lib/services/fetch_sources_list.dart b/lib/services/fetch_sources_list.dart index d78ed722..40bf71f5 100644 --- a/lib/services/fetch_sources_list.dart +++ b/lib/services/fetch_sources_list.dart @@ -36,35 +36,34 @@ Future fetchSourcesList({ ) .toList(); - isar.writeTxnSync(() async { - if (id != null) { - final matchingSource = sourceList.firstWhere( - (source) => source.id == id, - orElse: () => Source(), - ); - if (matchingSource.id != null) { - await _updateSource(matchingSource, ref, repo, itemType); + if (id != null) { + final matchingSource = sourceList.firstWhere( + (source) => source.id == id, + orElse: () => Source(), + ); + if (matchingSource.id != null && matchingSource.sourceCodeUrl!.isNotEmpty) { + await _updateSource(matchingSource, ref, repo, itemType); + } + } else { + for (var source in sourceList) { + final existingSource = await isar.sources.get(source.id!); + if (existingSource == null) { + await _addNewSource(source, ref, repo, itemType); + continue; } - } else { - for (var source in sourceList) { - final existingSource = isar.sources.getSync(source.id!); - if (existingSource != null) { - if (existingSource.isAdded! && - compareVersions(existingSource.version!, source.version!) < 0) { - if (ref.watch(autoUpdateExtensionsStateProvider)) { - await _updateSource(source, ref, repo, itemType); - } else { - isar.sources.putSync( - existingSource..versionLast = source.version, - ); - } - } - } else { - _addNewSource(source, ref, repo, itemType); - } + final shouldUpdate = + existingSource.isAdded! && + compareVersions(existingSource.version!, source.version!) < 0; + if (!shouldUpdate) continue; + if (ref.read(autoUpdateExtensionsStateProvider)) { + await _updateSource(source, ref, repo, itemType); + } else { + await isar.writeTxn(() async { + isar.sources.put(existingSource..versionLast = source.version); + }); } } - }); + } checkIfSourceIsObsolete(sourceList, repo!, itemType, ref); } @@ -108,9 +107,7 @@ Future _updateSource( ..notes = source.notes ..repo = repo; - isar.writeTxnSync(() { - isar.sources.putSync(updatedSource); - }); + await isar.writeTxn(() async => isar.sources.put(updatedSource)); ref .read(synchingProvider(syncId: 1).notifier) .addChangedPart( @@ -121,7 +118,12 @@ Future _updateSource( ); } -void _addNewSource(Source source, Ref ref, Repo? repo, ItemType itemType) { +Future _addNewSource( + Source source, + Ref ref, + Repo? repo, + ItemType itemType, +) async { final newSource = Source() ..sourceCodeUrl = source.sourceCodeUrl ..id = source.id @@ -145,27 +147,27 @@ void _addNewSource(Source source, Ref ref, Repo? repo, ItemType itemType) { ..isObsolete = false ..notes = source.notes ..repo = repo; - isar.sources.putSync(newSource); + await isar.writeTxn(() async => isar.sources.put(newSource)); ref .read(synchingProvider(syncId: 1).notifier) .addChangedPart(ActionType.addExtension, null, newSource.toJson(), false); } -void checkIfSourceIsObsolete( +Future checkIfSourceIsObsolete( List sourceList, Repo repo, ItemType itemType, Ref ref, -) { +) async { if (sourceList.isEmpty) return; - final sources = isar.sources + final sources = await isar.sources .filter() .idIsNotNull() .itemTypeEqualTo(itemType) .and() .isLocalEqualTo(false) - .findAllSync(); + .findAll(); if (sources.isEmpty) return; @@ -176,7 +178,7 @@ void checkIfSourceIsObsolete( if (sourceIds.isEmpty) return; - isar.writeTxnSync(() { + await isar.writeTxn(() async { for (var source in sources) { final isNowObsolete = !sourceIds.contains(source.id) && @@ -184,7 +186,7 @@ void checkIfSourceIsObsolete( if (source.isObsolete != isNowObsolete) { source.isObsolete = isNowObsolete; - isar.sources.putSync(source); + await isar.sources.put(source); ref .read(synchingProvider(syncId: 1).notifier)