This commit is contained in:
kodjomoustapha 2023-12-18 19:22:49 +01:00
parent 10fabff5b8
commit e55cc03525
8 changed files with 203 additions and 3 deletions

View file

@ -32,6 +32,11 @@ class $MProvider extends MProvider with $Bridge<MProvider> {
'': BridgeConstructorDef(
BridgeFunctionDef(returns: BridgeTypeAnnotation($type)))
},
getters: {
'supportsLatest': BridgeMethodDef(BridgeFunctionDef(
returns: BridgeTypeAnnotation(BridgeTypeRef(CoreTypes.bool)),
)),
},
methods: {
'getLatestUpdates': BridgeMethodDef(BridgeFunctionDef(
returns: BridgeTypeAnnotation(
@ -949,6 +954,9 @@ class $MProvider extends MProvider with $Bridge<MProvider> {
throw UnimplementedError();
}
@override
bool get supportsLatest => $_get('supportsLatest');
@override
Future<MManga> getDetail(MSource source, String url) async =>
await $_invoke('getDetail', [$MSource.wrap(source), $String(url)]);

View file

@ -7,6 +7,8 @@ import 'package:mangayomi/models/video.dart';
abstract class MProvider {
MProvider();
bool get supportsLatest => true;
Future<MPages> getLatestUpdates(MSource source, int page);
Future<MPages> getPopular(MSource source, int page);

View file

@ -6,7 +6,7 @@ part of 'download_provider.dart';
// RiverpodGenerator
// **************************************************************************
String _$downloadChapterHash() => r'5d6f104706b7f29989ef52b67eccfb4142584777';
String _$downloadChapterHash() => r'dcb0ade7f80a1ec593667e7311cdafc2d31222cf';
/// Copied from Dart SDK
class _SystemHash {

View file

@ -12,6 +12,7 @@ import 'package:mangayomi/services/get_filter_list.dart';
import 'package:mangayomi/services/get_latest_updates.dart';
import 'package:mangayomi/services/get_popular.dart';
import 'package:mangayomi/services/search.dart';
import 'package:mangayomi/services/supports_latest.dart';
import 'package:mangayomi/utils/colors.dart';
import 'package:mangayomi/utils/media_query.dart';
import 'package:mangayomi/modules/library/widgets/search_text_form_field.dart';
@ -103,6 +104,8 @@ class _MangaHomeScreenState extends ConsumerState<MangaHomeScreen> {
bool _isFiltering = false;
@override
Widget build(BuildContext context) {
final supportsLatest =
ref.watch(supportsLatestProvider(source: widget.source));
final filterList = getFilterList(source: widget.source);
if (_selectedIndex == 2 && (_isSearch && _query.isNotEmpty) ||
_isFiltering) {
@ -196,6 +199,9 @@ class _MangaHomeScreenState extends ConsumerState<MangaHomeScreen> {
if (filterList.isEmpty && index == 2) {
return const SizedBox.shrink();
}
if (!supportsLatest && index == 1) {
return const SizedBox.shrink();
}
return MangasCardSelector(
icon: _types(context)[index].icon,
selected: _selectedIndex == index,

View file

@ -6,7 +6,7 @@ part of 'check_for_update.dart';
// RiverpodGenerator
// **************************************************************************
String _$checkForUpdateHash() => r'e32dea3bda782fc470006c1d3758b523629a091d';
String _$checkForUpdateHash() => r'2c53166482e6584a6004d6788beb7d27d89bc67c';
/// Copied from Dart SDK
class _SystemHash {

View file

@ -6,7 +6,7 @@ part of 'get_video_list.dart';
// RiverpodGenerator
// **************************************************************************
String _$getVideoListHash() => r'aafdf726ba8dd830fea1f9a2784012258bf541bb';
String _$getVideoListHash() => r'924c2961d148f9ebb0952239c0528d5269a4526a';
/// Copied from Dart SDK
class _SystemHash {

View file

@ -0,0 +1,26 @@
import 'package:mangayomi/eval/compiler/compiler.dart';
import 'package:mangayomi/eval/model/m_provider.dart';
import 'package:mangayomi/models/source.dart';
import 'package:mangayomi/eval/runtime/runtime.dart';
import 'package:mangayomi/sources/source_test.dart';
import 'package:riverpod_annotation/riverpod_annotation.dart';
part 'supports_latest.g.dart';
@riverpod
bool supportsLatest(SupportsLatestRef ref, {required Source source}) {
bool? supportsLatest;
try {
final bytecode =
compilerEval(useTestSourceCode ? testSourceCode : source.sourceCode!);
final runtime = runtimeEval(bytecode);
var res = runtime.executeLib('package:mangayomi/main.dart', 'main');
supportsLatest = (res as MProvider).supportsLatest;
} catch (e) {
supportsLatest = true;
}
return supportsLatest;
}

View file

@ -0,0 +1,158 @@
// GENERATED CODE - DO NOT MODIFY BY HAND
part of 'supports_latest.dart';
// **************************************************************************
// RiverpodGenerator
// **************************************************************************
String _$supportsLatestHash() => r'14d8db1a09da5467ba96f3d62a80fdd44d303b9c';
/// 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 [supportsLatest].
@ProviderFor(supportsLatest)
const supportsLatestProvider = SupportsLatestFamily();
/// See also [supportsLatest].
class SupportsLatestFamily extends Family<bool> {
/// See also [supportsLatest].
const SupportsLatestFamily();
/// See also [supportsLatest].
SupportsLatestProvider call({
required Source source,
}) {
return SupportsLatestProvider(
source: source,
);
}
@override
SupportsLatestProvider getProviderOverride(
covariant SupportsLatestProvider provider,
) {
return call(
source: provider.source,
);
}
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'supportsLatestProvider';
}
/// See also [supportsLatest].
class SupportsLatestProvider extends AutoDisposeProvider<bool> {
/// See also [supportsLatest].
SupportsLatestProvider({
required Source source,
}) : this._internal(
(ref) => supportsLatest(
ref as SupportsLatestRef,
source: source,
),
from: supportsLatestProvider,
name: r'supportsLatestProvider',
debugGetCreateSourceHash:
const bool.fromEnvironment('dart.vm.product')
? null
: _$supportsLatestHash,
dependencies: SupportsLatestFamily._dependencies,
allTransitiveDependencies:
SupportsLatestFamily._allTransitiveDependencies,
source: source,
);
SupportsLatestProvider._internal(
super._createNotifier, {
required super.name,
required super.dependencies,
required super.allTransitiveDependencies,
required super.debugGetCreateSourceHash,
required super.from,
required this.source,
}) : super.internal();
final Source source;
@override
Override overrideWith(
bool Function(SupportsLatestRef provider) create,
) {
return ProviderOverride(
origin: this,
override: SupportsLatestProvider._internal(
(ref) => create(ref as SupportsLatestRef),
from: from,
name: null,
dependencies: null,
allTransitiveDependencies: null,
debugGetCreateSourceHash: null,
source: source,
),
);
}
@override
AutoDisposeProviderElement<bool> createElement() {
return _SupportsLatestProviderElement(this);
}
@override
bool operator ==(Object other) {
return other is SupportsLatestProvider && other.source == source;
}
@override
int get hashCode {
var hash = _SystemHash.combine(0, runtimeType.hashCode);
hash = _SystemHash.combine(hash, source.hashCode);
return _SystemHash.finish(hash);
}
}
mixin SupportsLatestRef on AutoDisposeProviderRef<bool> {
/// The parameter `source` of this provider.
Source get source;
}
class _SupportsLatestProviderElement extends AutoDisposeProviderElement<bool>
with SupportsLatestRef {
_SupportsLatestProviderElement(super.provider);
@override
Source get source => (origin as SupportsLatestProvider).source;
}
// ignore_for_file: type=lint
// ignore_for_file: subtype_of_sealed_class, invalid_use_of_internal_member, invalid_use_of_visible_for_testing_member