mirror of
https://github.com/kodjodevf/mangayomi.git
synced 2026-04-21 16:01:58 +00:00
Merge pull request #484 from NBA2K1/main
Fixes, Refactors, and Async Improvements
This commit is contained in:
commit
183e88ebd0
11 changed files with 148 additions and 566 deletions
|
|
@ -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/manga.dart';
|
||||||
import 'package:mangayomi/models/source.dart';
|
import 'package:mangayomi/models/source.dart';
|
||||||
import 'package:mangayomi/modules/browse/extension/providers/extensions_provider.dart';
|
import 'package:mangayomi/modules/browse/extension/providers/extensions_provider.dart';
|
||||||
import 'package:mangayomi/services/fetch_anime_sources.dart';
|
import 'package:mangayomi/services/fetch_item_sources.dart';
|
||||||
import 'package:mangayomi/services/fetch_manga_sources.dart';
|
|
||||||
import 'package:mangayomi/modules/widgets/progress_center.dart';
|
import 'package:mangayomi/modules/widgets/progress_center.dart';
|
||||||
import 'package:mangayomi/providers/l10n_providers.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/services/fetch_sources_list.dart';
|
||||||
import 'package:mangayomi/utils/language.dart';
|
import 'package:mangayomi/utils/language.dart';
|
||||||
import 'package:mangayomi/modules/browse/extension/widgets/extension_list_tile_widget.dart';
|
import 'package:mangayomi/modules/browse/extension/widgets/extension_list_tile_widget.dart';
|
||||||
|
|
@ -30,48 +28,34 @@ class _ExtensionScreenState extends ConsumerState<ExtensionScreen> {
|
||||||
final ScrollController controller = ScrollController();
|
final ScrollController controller = ScrollController();
|
||||||
bool isUpdating = false;
|
bool isUpdating = false;
|
||||||
Future<void> _refreshSources() {
|
Future<void> _refreshSources() {
|
||||||
return switch (widget.itemType) {
|
return ref.refresh(
|
||||||
ItemType.manga => ref.refresh(
|
fetchItemSourcesListProvider(
|
||||||
fetchMangaSourcesListProvider(id: null, reFresh: true).future,
|
id: null,
|
||||||
),
|
reFresh: true,
|
||||||
ItemType.anime => ref.refresh(
|
itemType: widget.itemType,
|
||||||
fetchAnimeSourcesListProvider(id: null, reFresh: true).future,
|
).future,
|
||||||
),
|
);
|
||||||
_ => ref.refresh(
|
|
||||||
fetchNovelSourcesListProvider(id: null, reFresh: true).future,
|
|
||||||
),
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<void> _updateSource(Source source) {
|
Future<void> _updateSource(Source source) {
|
||||||
switch (source.itemType) {
|
|
||||||
case ItemType.manga:
|
|
||||||
return ref.read(
|
return ref.read(
|
||||||
fetchMangaSourcesListProvider(id: source.id, reFresh: true).future,
|
fetchItemSourcesListProvider(
|
||||||
|
id: source.id,
|
||||||
|
reFresh: true,
|
||||||
|
itemType: source.itemType,
|
||||||
|
).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,
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
switch (widget.itemType) {
|
ref.read(
|
||||||
case ItemType.manga:
|
fetchItemSourcesListProvider(
|
||||||
ref.read(fetchMangaSourcesListProvider(id: null, reFresh: false));
|
id: null,
|
||||||
break;
|
reFresh: false,
|
||||||
case ItemType.anime:
|
itemType: widget.itemType,
|
||||||
ref.read(fetchAnimeSourcesListProvider(id: null, reFresh: false));
|
),
|
||||||
break;
|
);
|
||||||
default:
|
|
||||||
ref.read(fetchNovelSourcesListProvider(id: null, reFresh: false));
|
|
||||||
}
|
|
||||||
|
|
||||||
final streamExtensions = ref.watch(
|
final streamExtensions = ref.watch(
|
||||||
getExtensionsStreamProvider(widget.itemType),
|
getExtensionsStreamProvider(widget.itemType),
|
||||||
|
|
|
||||||
|
|
@ -1,12 +1,9 @@
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||||
import 'package:go_router/go_router.dart';
|
import 'package:go_router/go_router.dart';
|
||||||
import 'package:mangayomi/models/manga.dart';
|
|
||||||
import 'package:mangayomi/models/source.dart';
|
import 'package:mangayomi/models/source.dart';
|
||||||
import 'package:mangayomi/services/fetch_anime_sources.dart';
|
import 'package:mangayomi/services/fetch_item_sources.dart';
|
||||||
import 'package:mangayomi/services/fetch_manga_sources.dart';
|
|
||||||
import 'package:mangayomi/providers/l10n_providers.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/services/fetch_sources_list.dart';
|
||||||
import 'package:mangayomi/utils/cached_network.dart';
|
import 'package:mangayomi/utils/cached_network.dart';
|
||||||
import 'package:mangayomi/utils/extensions/build_context_extensions.dart';
|
import 'package:mangayomi/utils/extensions/build_context_extensions.dart';
|
||||||
|
|
@ -45,28 +42,14 @@ class _ExtensionListTileWidgetState
|
||||||
setState(() => _isLoading = true);
|
setState(() => _isLoading = true);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
final future = switch (widget.source.itemType) {
|
final provider = fetchItemSourcesListProvider(
|
||||||
ItemType.manga => ref.watch(
|
|
||||||
fetchMangaSourcesListProvider(
|
|
||||||
id: widget.source.id,
|
id: widget.source.id,
|
||||||
reFresh: true,
|
reFresh: true,
|
||||||
).future,
|
itemType: widget.source.itemType,
|
||||||
),
|
);
|
||||||
ItemType.anime => ref.watch(
|
|
||||||
fetchAnimeSourcesListProvider(
|
|
||||||
id: widget.source.id,
|
|
||||||
reFresh: true,
|
|
||||||
).future,
|
|
||||||
),
|
|
||||||
_ => ref.watch(
|
|
||||||
fetchNovelSourcesListProvider(
|
|
||||||
id: widget.source.id,
|
|
||||||
reFresh: true,
|
|
||||||
).future,
|
|
||||||
),
|
|
||||||
};
|
|
||||||
|
|
||||||
await future;
|
if (!widget.source.isAdded!) ref.invalidate(provider);
|
||||||
|
await ref.watch(provider.future);
|
||||||
} finally {
|
} finally {
|
||||||
if (mounted) setState(() => _isLoading = false);
|
if (mounted) setState(() => _isLoading = false);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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/reader/providers/reader_state_provider.dart';
|
||||||
import 'package:mangayomi/modules/more/settings/sync/providers/sync_providers.dart';
|
import 'package:mangayomi/modules/more/settings/sync/providers/sync_providers.dart';
|
||||||
import 'package:mangayomi/modules/widgets/loading_icon.dart';
|
import 'package:mangayomi/modules/widgets/loading_icon.dart';
|
||||||
import 'package:mangayomi/services/fetch_anime_sources.dart';
|
import 'package:mangayomi/services/fetch_item_sources.dart';
|
||||||
import 'package:mangayomi/services/fetch_manga_sources.dart';
|
|
||||||
import 'package:mangayomi/modules/main_view/providers/migration.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/about/providers/check_for_update.dart';
|
||||||
import 'package:mangayomi/modules/more/data_and_storage/providers/auto_backup.dart';
|
import 'package:mangayomi/modules/more/data_and_storage/providers/auto_backup.dart';
|
||||||
import 'package:mangayomi/providers/l10n_providers.dart';
|
import 'package:mangayomi/providers/l10n_providers.dart';
|
||||||
import 'package:mangayomi/router/router.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/fetch_sources_list.dart';
|
||||||
import 'package:mangayomi/services/sync_server.dart';
|
import 'package:mangayomi/services/sync_server.dart';
|
||||||
import 'package:mangayomi/utils/extensions/build_context_extensions.dart';
|
import 'package:mangayomi/utils/extensions/build_context_extensions.dart';
|
||||||
|
|
@ -107,9 +105,15 @@ class _MainScreenState extends ConsumerState<MainScreen> {
|
||||||
Future.microtask(() {
|
Future.microtask(() {
|
||||||
if (mounted) {
|
if (mounted) {
|
||||||
ref.read(checkForUpdateProvider(context: context));
|
ref.read(checkForUpdateProvider(context: context));
|
||||||
ref.read(fetchMangaSourcesListProvider(id: null, reFresh: false));
|
for (var type in ItemType.values) {
|
||||||
ref.read(fetchAnimeSourcesListProvider(id: null, reFresh: false));
|
ref.read(
|
||||||
ref.read(fetchNovelSourcesListProvider(id: null, reFresh: false));
|
FetchItemSourcesListProvider(
|
||||||
|
id: null,
|
||||||
|
reFresh: false,
|
||||||
|
itemType: type,
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -5,9 +5,7 @@ import 'package:mangayomi/main.dart';
|
||||||
import 'package:mangayomi/models/manga.dart';
|
import 'package:mangayomi/models/manga.dart';
|
||||||
import 'package:mangayomi/models/settings.dart';
|
import 'package:mangayomi/models/settings.dart';
|
||||||
import 'package:mangayomi/models/source.dart';
|
import 'package:mangayomi/models/source.dart';
|
||||||
import 'package:mangayomi/services/fetch_anime_sources.dart';
|
import 'package:mangayomi/services/fetch_item_sources.dart';
|
||||||
import 'package:mangayomi/services/fetch_manga_sources.dart';
|
|
||||||
import 'package:mangayomi/services/fetch_novel_sources.dart';
|
|
||||||
import 'package:mangayomi/services/http/m_client.dart';
|
import 'package:mangayomi/services/http/m_client.dart';
|
||||||
import 'package:riverpod_annotation/riverpod_annotation.dart';
|
import 'package:riverpod_annotation/riverpod_annotation.dart';
|
||||||
part 'browse_state_provider.g.dart';
|
part 'browse_state_provider.g.dart';
|
||||||
|
|
@ -57,17 +55,13 @@ class ExtensionsRepoState extends _$ExtensionsRepoState {
|
||||||
a;
|
a;
|
||||||
});
|
});
|
||||||
try {
|
try {
|
||||||
final a = switch (itemType) {
|
final a = ref.refresh(
|
||||||
ItemType.manga => ref.refresh(
|
fetchItemSourcesListProvider(
|
||||||
fetchMangaSourcesListProvider(id: null, reFresh: false).future,
|
id: null,
|
||||||
),
|
reFresh: false,
|
||||||
ItemType.anime => ref.refresh(
|
itemType: itemType,
|
||||||
fetchAnimeSourcesListProvider(id: null, reFresh: false).future,
|
).future,
|
||||||
),
|
);
|
||||||
_ => ref.refresh(
|
|
||||||
fetchNovelSourcesListProvider(id: null, reFresh: false).future,
|
|
||||||
),
|
|
||||||
};
|
|
||||||
Future.wait([a]);
|
Future.wait([a]);
|
||||||
} catch (_) {}
|
} catch (_) {}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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:mangayomi/services/fetch_sources_list.dart';
|
||||||
import 'package:riverpod_annotation/riverpod_annotation.dart';
|
import 'package:riverpod_annotation/riverpod_annotation.dart';
|
||||||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||||
part 'fetch_anime_sources.g.dart';
|
part 'fetch_item_sources.g.dart';
|
||||||
|
|
||||||
@Riverpod(keepAlive: true)
|
@Riverpod(keepAlive: true)
|
||||||
Future<void> fetchAnimeSourcesList(
|
Future<void> fetchItemSourcesList(
|
||||||
Ref ref, {
|
Ref ref, {
|
||||||
int? id,
|
int? id,
|
||||||
required bool reFresh,
|
required bool reFresh,
|
||||||
|
required ItemType itemType,
|
||||||
}) async {
|
}) async {
|
||||||
if (ref.watch(checkForExtensionsUpdateStateProvider) || reFresh) {
|
if (ref.watch(checkForExtensionsUpdateStateProvider) || reFresh) {
|
||||||
final repos = ref.watch(extensionsRepoStateProvider(ItemType.anime));
|
final repos = ref.watch(extensionsRepoStateProvider(itemType));
|
||||||
for (Repo repo in repos) {
|
for (Repo repo in repos) {
|
||||||
await fetchSourcesList(
|
await fetchSourcesList(
|
||||||
repo: repo,
|
repo: repo,
|
||||||
refresh: reFresh,
|
refresh: reFresh,
|
||||||
id: id,
|
id: id,
|
||||||
ref: ref,
|
ref: ref,
|
||||||
itemType: ItemType.anime,
|
itemType: itemType,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -1,13 +1,13 @@
|
||||||
// GENERATED CODE - DO NOT MODIFY BY HAND
|
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||||
|
|
||||||
part of 'fetch_anime_sources.dart';
|
part of 'fetch_item_sources.dart';
|
||||||
|
|
||||||
// **************************************************************************
|
// **************************************************************************
|
||||||
// RiverpodGenerator
|
// RiverpodGenerator
|
||||||
// **************************************************************************
|
// **************************************************************************
|
||||||
|
|
||||||
String _$fetchAnimeSourcesListHash() =>
|
String _$fetchItemSourcesListHash() =>
|
||||||
r'e7f673d37239c74f3403de3a234bbc1d6e171332';
|
r'16238be20517fddacf52a2694fbd50cafbfa7496';
|
||||||
|
|
||||||
/// Copied from Dart SDK
|
/// Copied from Dart SDK
|
||||||
class _SystemHash {
|
class _SystemHash {
|
||||||
|
|
@ -30,33 +30,36 @@ class _SystemHash {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// See also [fetchAnimeSourcesList].
|
/// See also [fetchItemSourcesList].
|
||||||
@ProviderFor(fetchAnimeSourcesList)
|
@ProviderFor(fetchItemSourcesList)
|
||||||
const fetchAnimeSourcesListProvider = FetchAnimeSourcesListFamily();
|
const fetchItemSourcesListProvider = FetchItemSourcesListFamily();
|
||||||
|
|
||||||
/// See also [fetchAnimeSourcesList].
|
/// See also [fetchItemSourcesList].
|
||||||
class FetchAnimeSourcesListFamily extends Family<AsyncValue<void>> {
|
class FetchItemSourcesListFamily extends Family<AsyncValue<void>> {
|
||||||
/// See also [fetchAnimeSourcesList].
|
/// See also [fetchItemSourcesList].
|
||||||
const FetchAnimeSourcesListFamily();
|
const FetchItemSourcesListFamily();
|
||||||
|
|
||||||
/// See also [fetchAnimeSourcesList].
|
/// See also [fetchItemSourcesList].
|
||||||
FetchAnimeSourcesListProvider call({
|
FetchItemSourcesListProvider call({
|
||||||
int? id,
|
int? id,
|
||||||
required bool reFresh,
|
required bool reFresh,
|
||||||
|
required ItemType itemType,
|
||||||
}) {
|
}) {
|
||||||
return FetchAnimeSourcesListProvider(
|
return FetchItemSourcesListProvider(
|
||||||
id: id,
|
id: id,
|
||||||
reFresh: reFresh,
|
reFresh: reFresh,
|
||||||
|
itemType: itemType,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
FetchAnimeSourcesListProvider getProviderOverride(
|
FetchItemSourcesListProvider getProviderOverride(
|
||||||
covariant FetchAnimeSourcesListProvider provider,
|
covariant FetchItemSourcesListProvider provider,
|
||||||
) {
|
) {
|
||||||
return call(
|
return call(
|
||||||
id: provider.id,
|
id: provider.id,
|
||||||
reFresh: provider.reFresh,
|
reFresh: provider.reFresh,
|
||||||
|
itemType: provider.itemType,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -72,35 +75,38 @@ class FetchAnimeSourcesListFamily extends Family<AsyncValue<void>> {
|
||||||
_allTransitiveDependencies;
|
_allTransitiveDependencies;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String? get name => r'fetchAnimeSourcesListProvider';
|
String? get name => r'fetchItemSourcesListProvider';
|
||||||
}
|
}
|
||||||
|
|
||||||
/// See also [fetchAnimeSourcesList].
|
/// See also [fetchItemSourcesList].
|
||||||
class FetchAnimeSourcesListProvider extends FutureProvider<void> {
|
class FetchItemSourcesListProvider extends FutureProvider<void> {
|
||||||
/// See also [fetchAnimeSourcesList].
|
/// See also [fetchItemSourcesList].
|
||||||
FetchAnimeSourcesListProvider({
|
FetchItemSourcesListProvider({
|
||||||
int? id,
|
int? id,
|
||||||
required bool reFresh,
|
required bool reFresh,
|
||||||
|
required ItemType itemType,
|
||||||
}) : this._internal(
|
}) : this._internal(
|
||||||
(ref) => fetchAnimeSourcesList(
|
(ref) => fetchItemSourcesList(
|
||||||
ref as FetchAnimeSourcesListRef,
|
ref as FetchItemSourcesListRef,
|
||||||
id: id,
|
id: id,
|
||||||
reFresh: reFresh,
|
reFresh: reFresh,
|
||||||
|
itemType: itemType,
|
||||||
),
|
),
|
||||||
from: fetchAnimeSourcesListProvider,
|
from: fetchItemSourcesListProvider,
|
||||||
name: r'fetchAnimeSourcesListProvider',
|
name: r'fetchItemSourcesListProvider',
|
||||||
debugGetCreateSourceHash:
|
debugGetCreateSourceHash:
|
||||||
const bool.fromEnvironment('dart.vm.product')
|
const bool.fromEnvironment('dart.vm.product')
|
||||||
? null
|
? null
|
||||||
: _$fetchAnimeSourcesListHash,
|
: _$fetchItemSourcesListHash,
|
||||||
dependencies: FetchAnimeSourcesListFamily._dependencies,
|
dependencies: FetchItemSourcesListFamily._dependencies,
|
||||||
allTransitiveDependencies:
|
allTransitiveDependencies:
|
||||||
FetchAnimeSourcesListFamily._allTransitiveDependencies,
|
FetchItemSourcesListFamily._allTransitiveDependencies,
|
||||||
id: id,
|
id: id,
|
||||||
reFresh: reFresh,
|
reFresh: reFresh,
|
||||||
|
itemType: itemType,
|
||||||
);
|
);
|
||||||
|
|
||||||
FetchAnimeSourcesListProvider._internal(
|
FetchItemSourcesListProvider._internal(
|
||||||
super._createNotifier, {
|
super._createNotifier, {
|
||||||
required super.name,
|
required super.name,
|
||||||
required super.dependencies,
|
required super.dependencies,
|
||||||
|
|
@ -109,19 +115,21 @@ class FetchAnimeSourcesListProvider extends FutureProvider<void> {
|
||||||
required super.from,
|
required super.from,
|
||||||
required this.id,
|
required this.id,
|
||||||
required this.reFresh,
|
required this.reFresh,
|
||||||
|
required this.itemType,
|
||||||
}) : super.internal();
|
}) : super.internal();
|
||||||
|
|
||||||
final int? id;
|
final int? id;
|
||||||
final bool reFresh;
|
final bool reFresh;
|
||||||
|
final ItemType itemType;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Override overrideWith(
|
Override overrideWith(
|
||||||
FutureOr<void> Function(FetchAnimeSourcesListRef provider) create,
|
FutureOr<void> Function(FetchItemSourcesListRef provider) create,
|
||||||
) {
|
) {
|
||||||
return ProviderOverride(
|
return ProviderOverride(
|
||||||
origin: this,
|
origin: this,
|
||||||
override: FetchAnimeSourcesListProvider._internal(
|
override: FetchItemSourcesListProvider._internal(
|
||||||
(ref) => create(ref as FetchAnimeSourcesListRef),
|
(ref) => create(ref as FetchItemSourcesListRef),
|
||||||
from: from,
|
from: from,
|
||||||
name: null,
|
name: null,
|
||||||
dependencies: null,
|
dependencies: null,
|
||||||
|
|
@ -129,20 +137,22 @@ class FetchAnimeSourcesListProvider extends FutureProvider<void> {
|
||||||
debugGetCreateSourceHash: null,
|
debugGetCreateSourceHash: null,
|
||||||
id: id,
|
id: id,
|
||||||
reFresh: reFresh,
|
reFresh: reFresh,
|
||||||
|
itemType: itemType,
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
FutureProviderElement<void> createElement() {
|
FutureProviderElement<void> createElement() {
|
||||||
return _FetchAnimeSourcesListProviderElement(this);
|
return _FetchItemSourcesListProviderElement(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
bool operator ==(Object other) {
|
bool operator ==(Object other) {
|
||||||
return other is FetchAnimeSourcesListProvider &&
|
return other is FetchItemSourcesListProvider &&
|
||||||
other.id == id &&
|
other.id == id &&
|
||||||
other.reFresh == reFresh;
|
other.reFresh == reFresh &&
|
||||||
|
other.itemType == itemType;
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
|
|
@ -150,6 +160,7 @@ class FetchAnimeSourcesListProvider extends FutureProvider<void> {
|
||||||
var hash = _SystemHash.combine(0, runtimeType.hashCode);
|
var hash = _SystemHash.combine(0, runtimeType.hashCode);
|
||||||
hash = _SystemHash.combine(hash, id.hashCode);
|
hash = _SystemHash.combine(hash, id.hashCode);
|
||||||
hash = _SystemHash.combine(hash, reFresh.hashCode);
|
hash = _SystemHash.combine(hash, reFresh.hashCode);
|
||||||
|
hash = _SystemHash.combine(hash, itemType.hashCode);
|
||||||
|
|
||||||
return _SystemHash.finish(hash);
|
return _SystemHash.finish(hash);
|
||||||
}
|
}
|
||||||
|
|
@ -157,22 +168,27 @@ class FetchAnimeSourcesListProvider extends FutureProvider<void> {
|
||||||
|
|
||||||
@Deprecated('Will be removed in 3.0. Use Ref instead')
|
@Deprecated('Will be removed in 3.0. Use Ref instead')
|
||||||
// ignore: unused_element
|
// ignore: unused_element
|
||||||
mixin FetchAnimeSourcesListRef on FutureProviderRef<void> {
|
mixin FetchItemSourcesListRef on FutureProviderRef<void> {
|
||||||
/// The parameter `id` of this provider.
|
/// The parameter `id` of this provider.
|
||||||
int? get id;
|
int? get id;
|
||||||
|
|
||||||
/// The parameter `reFresh` of this provider.
|
/// The parameter `reFresh` of this provider.
|
||||||
bool get reFresh;
|
bool get reFresh;
|
||||||
|
|
||||||
|
/// The parameter `itemType` of this provider.
|
||||||
|
ItemType get itemType;
|
||||||
}
|
}
|
||||||
|
|
||||||
class _FetchAnimeSourcesListProviderElement extends FutureProviderElement<void>
|
class _FetchItemSourcesListProviderElement extends FutureProviderElement<void>
|
||||||
with FetchAnimeSourcesListRef {
|
with FetchItemSourcesListRef {
|
||||||
_FetchAnimeSourcesListProviderElement(super.provider);
|
_FetchItemSourcesListProviderElement(super.provider);
|
||||||
|
|
||||||
@override
|
@override
|
||||||
int? get id => (origin as FetchAnimeSourcesListProvider).id;
|
int? get id => (origin as FetchItemSourcesListProvider).id;
|
||||||
@override
|
@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: 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
|
// 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
|
||||||
|
|
@ -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<void> 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,
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -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<AsyncValue<void>> {
|
|
||||||
/// 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<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'fetchMangaSourcesListProvider';
|
|
||||||
}
|
|
||||||
|
|
||||||
/// See also [fetchMangaSourcesList].
|
|
||||||
class FetchMangaSourcesListProvider extends FutureProvider<void> {
|
|
||||||
/// 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<void> 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<void> 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<void> {
|
|
||||||
/// The parameter `id` of this provider.
|
|
||||||
int? get id;
|
|
||||||
|
|
||||||
/// The parameter `reFresh` of this provider.
|
|
||||||
dynamic get reFresh;
|
|
||||||
}
|
|
||||||
|
|
||||||
class _FetchMangaSourcesListProviderElement extends FutureProviderElement<void>
|
|
||||||
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
|
|
||||||
|
|
@ -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<void> 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,
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -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<AsyncValue<void>> {
|
|
||||||
/// 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<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'fetchNovelSourcesListProvider';
|
|
||||||
}
|
|
||||||
|
|
||||||
/// See also [fetchNovelSourcesList].
|
|
||||||
class FetchNovelSourcesListProvider extends FutureProvider<void> {
|
|
||||||
/// 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<void> 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<void> 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<void> {
|
|
||||||
/// The parameter `id` of this provider.
|
|
||||||
int? get id;
|
|
||||||
|
|
||||||
/// The parameter `reFresh` of this provider.
|
|
||||||
dynamic get reFresh;
|
|
||||||
}
|
|
||||||
|
|
||||||
class _FetchNovelSourcesListProviderElement extends FutureProviderElement<void>
|
|
||||||
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
|
|
||||||
|
|
@ -36,35 +36,34 @@ Future<void> fetchSourcesList({
|
||||||
)
|
)
|
||||||
.toList();
|
.toList();
|
||||||
|
|
||||||
isar.writeTxnSync(() async {
|
|
||||||
if (id != null) {
|
if (id != null) {
|
||||||
final matchingSource = sourceList.firstWhere(
|
final matchingSource = sourceList.firstWhere(
|
||||||
(source) => source.id == id,
|
(source) => source.id == id,
|
||||||
orElse: () => Source(),
|
orElse: () => Source(),
|
||||||
);
|
);
|
||||||
if (matchingSource.id != null) {
|
if (matchingSource.id != null && matchingSource.sourceCodeUrl!.isNotEmpty) {
|
||||||
await _updateSource(matchingSource, ref, repo, itemType);
|
await _updateSource(matchingSource, ref, repo, itemType);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
for (var source in sourceList) {
|
for (var source in sourceList) {
|
||||||
final existingSource = isar.sources.getSync(source.id!);
|
final existingSource = await isar.sources.get(source.id!);
|
||||||
if (existingSource != null) {
|
if (existingSource == null) {
|
||||||
if (existingSource.isAdded! &&
|
await _addNewSource(source, ref, repo, itemType);
|
||||||
compareVersions(existingSource.version!, source.version!) < 0) {
|
continue;
|
||||||
if (ref.watch(autoUpdateExtensionsStateProvider)) {
|
}
|
||||||
|
final shouldUpdate =
|
||||||
|
existingSource.isAdded! &&
|
||||||
|
compareVersions(existingSource.version!, source.version!) < 0;
|
||||||
|
if (!shouldUpdate) continue;
|
||||||
|
if (ref.read(autoUpdateExtensionsStateProvider)) {
|
||||||
await _updateSource(source, ref, repo, itemType);
|
await _updateSource(source, ref, repo, itemType);
|
||||||
} else {
|
} else {
|
||||||
isar.sources.putSync(
|
await isar.writeTxn(() async {
|
||||||
existingSource..versionLast = source.version,
|
isar.sources.put(existingSource..versionLast = source.version);
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
_addNewSource(source, ref, repo, itemType);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
checkIfSourceIsObsolete(sourceList, repo!, itemType, ref);
|
checkIfSourceIsObsolete(sourceList, repo!, itemType, ref);
|
||||||
}
|
}
|
||||||
|
|
@ -108,9 +107,7 @@ Future<void> _updateSource(
|
||||||
..notes = source.notes
|
..notes = source.notes
|
||||||
..repo = repo;
|
..repo = repo;
|
||||||
|
|
||||||
isar.writeTxnSync(() {
|
await isar.writeTxn(() async => isar.sources.put(updatedSource));
|
||||||
isar.sources.putSync(updatedSource);
|
|
||||||
});
|
|
||||||
ref
|
ref
|
||||||
.read(synchingProvider(syncId: 1).notifier)
|
.read(synchingProvider(syncId: 1).notifier)
|
||||||
.addChangedPart(
|
.addChangedPart(
|
||||||
|
|
@ -121,7 +118,12 @@ Future<void> _updateSource(
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
void _addNewSource(Source source, Ref ref, Repo? repo, ItemType itemType) {
|
Future<void> _addNewSource(
|
||||||
|
Source source,
|
||||||
|
Ref ref,
|
||||||
|
Repo? repo,
|
||||||
|
ItemType itemType,
|
||||||
|
) async {
|
||||||
final newSource = Source()
|
final newSource = Source()
|
||||||
..sourceCodeUrl = source.sourceCodeUrl
|
..sourceCodeUrl = source.sourceCodeUrl
|
||||||
..id = source.id
|
..id = source.id
|
||||||
|
|
@ -145,27 +147,27 @@ void _addNewSource(Source source, Ref ref, Repo? repo, ItemType itemType) {
|
||||||
..isObsolete = false
|
..isObsolete = false
|
||||||
..notes = source.notes
|
..notes = source.notes
|
||||||
..repo = repo;
|
..repo = repo;
|
||||||
isar.sources.putSync(newSource);
|
await isar.writeTxn(() async => isar.sources.put(newSource));
|
||||||
ref
|
ref
|
||||||
.read(synchingProvider(syncId: 1).notifier)
|
.read(synchingProvider(syncId: 1).notifier)
|
||||||
.addChangedPart(ActionType.addExtension, null, newSource.toJson(), false);
|
.addChangedPart(ActionType.addExtension, null, newSource.toJson(), false);
|
||||||
}
|
}
|
||||||
|
|
||||||
void checkIfSourceIsObsolete(
|
Future<void> checkIfSourceIsObsolete(
|
||||||
List<Source> sourceList,
|
List<Source> sourceList,
|
||||||
Repo repo,
|
Repo repo,
|
||||||
ItemType itemType,
|
ItemType itemType,
|
||||||
Ref ref,
|
Ref ref,
|
||||||
) {
|
) async {
|
||||||
if (sourceList.isEmpty) return;
|
if (sourceList.isEmpty) return;
|
||||||
|
|
||||||
final sources = isar.sources
|
final sources = await isar.sources
|
||||||
.filter()
|
.filter()
|
||||||
.idIsNotNull()
|
.idIsNotNull()
|
||||||
.itemTypeEqualTo(itemType)
|
.itemTypeEqualTo(itemType)
|
||||||
.and()
|
.and()
|
||||||
.isLocalEqualTo(false)
|
.isLocalEqualTo(false)
|
||||||
.findAllSync();
|
.findAll();
|
||||||
|
|
||||||
if (sources.isEmpty) return;
|
if (sources.isEmpty) return;
|
||||||
|
|
||||||
|
|
@ -176,7 +178,7 @@ void checkIfSourceIsObsolete(
|
||||||
|
|
||||||
if (sourceIds.isEmpty) return;
|
if (sourceIds.isEmpty) return;
|
||||||
|
|
||||||
isar.writeTxnSync(() {
|
await isar.writeTxn(() async {
|
||||||
for (var source in sources) {
|
for (var source in sources) {
|
||||||
final isNowObsolete =
|
final isNowObsolete =
|
||||||
!sourceIds.contains(source.id) &&
|
!sourceIds.contains(source.id) &&
|
||||||
|
|
@ -184,7 +186,7 @@ void checkIfSourceIsObsolete(
|
||||||
|
|
||||||
if (source.isObsolete != isNowObsolete) {
|
if (source.isObsolete != isNowObsolete) {
|
||||||
source.isObsolete = isNowObsolete;
|
source.isObsolete = isNowObsolete;
|
||||||
isar.sources.putSync(source);
|
await isar.sources.put(source);
|
||||||
|
|
||||||
ref
|
ref
|
||||||
.read(synchingProvider(syncId: 1).notifier)
|
.read(synchingProvider(syncId: 1).notifier)
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue