This commit is contained in:
Moustapha Kodjo Amadou 2025-01-15 09:31:45 +01:00
parent 8c841baaa3
commit c906eec398
12 changed files with 106 additions and 44 deletions

View file

@ -186,7 +186,7 @@ class _AnimeStreamPageState extends riv.ConsumerState<AnimeStreamPage>
bool _hasEndingSkip = false;
bool _initSubtitleAndAudio = true;
late final StreamSubscription<Duration> _currentPositionSub =
late StreamSubscription<Duration> _currentPositionSub =
_player.stream.position.listen(
(position) async {
_isCompleted.value =
@ -240,7 +240,29 @@ class _AnimeStreamPageState extends riv.ConsumerState<AnimeStreamPage>
}
}
bool isFFF = false;
void _setCurrentAudSub() {
_initSubtitleAndAudio = true;
_currentPositionSub = _player.stream.position.listen(
(position) async {
_isCompleted.value = _player.state.duration.inSeconds -
_currentPosition.value.inSeconds <=
10;
_currentPosition.value = position;
if (_initSubtitleAndAudio) {
final subtitle = _player.state.track.subtitle;
try {
_player.setSubtitleTrack(subtitle);
} catch (_) {}
try {
final audio = _player.state.track.audio;
_player.setAudioTrack(audio);
} catch (_) {}
}
_initSubtitleAndAudio = false;
},
);
}
@override
void initState() {
_currentPositionSub;
@ -400,6 +422,7 @@ class _AnimeStreamPageState extends riv.ConsumerState<AnimeStreamPage>
httpHeaders: quality.headers,
start: _currentPosition.value));
}
_setCurrentAudSub();
Navigator.pop(context);
},
);

View file

@ -239,21 +239,14 @@ Widget _extensionUpdateNumbers(WidgetRef ref, ItemType itemType) {
compareVersions(element.version!, element.versionLast!) < 0)
.toList();
return entries.isEmpty
? Container()
: Container(
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(20),
color: Theme.of(context).focusColor),
child: Padding(
padding: const EdgeInsets.all(5),
child: Text(
entries.length.toString(),
style: TextStyle(
fontSize: 12,
color: Theme.of(context).textTheme.bodySmall!.color),
),
),
);
? SizedBox.shrink()
: Badge(
backgroundColor: Theme.of(context).focusColor,
label: Text(
entries.length.toString(),
style: TextStyle(
color: Theme.of(context).textTheme.bodySmall!.color),
));
}
return Container();
});

View file

@ -6,7 +6,7 @@ part of 'migration.dart';
// RiverpodGenerator
// **************************************************************************
String _$migrationHash() => r'7354a8368b73fdfcfd284848b9837b4bc9047e7f';
String _$migrationHash() => r'd4ebb16320d44b90ca9532f10e8128b9ee8ab52d';
/// See also [migration].
@ProviderFor(migration)

View file

@ -227,9 +227,33 @@ class _UpdatesScreenState extends ConsumerState<UpdatesScreen>
indicatorSize: TabBarIndicatorSize.tab,
controller: _tabBarController,
tabs: [
if (!hideManga) Tab(text: l10n.manga),
if (!hideAnime) Tab(text: l10n.anime),
if (!hideNovel) Tab(text: l10n.novel),
if (!hideManga)
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Tab(text: l10n.manga),
const SizedBox(width: 8),
_updateNumbers(ref, ItemType.manga)
],
),
if (!hideAnime)
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Tab(text: l10n.anime),
const SizedBox(width: 8),
_updateNumbers(ref, ItemType.anime)
],
),
if (!hideNovel)
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Tab(text: l10n.novel),
const SizedBox(width: 8),
_updateNumbers(ref, ItemType.novel)
],
),
],
),
),
@ -373,3 +397,28 @@ class _UpdateTabState extends ConsumerState<UpdateTab> {
));
}
}
Widget _updateNumbers(WidgetRef ref, ItemType itemType) {
return StreamBuilder(
stream: isar.updates
.filter()
.idIsNotNull()
.and()
.chapter((q) => q.manga((q) => q.itemTypeEqualTo(itemType)))
.watch(fireImmediately: true),
builder: (context, snapshot) {
if (snapshot.hasData && snapshot.data!.isNotEmpty) {
final entries = snapshot.data!.toList();
return entries.isEmpty
? SizedBox.shrink()
: Badge(
backgroundColor: Theme.of(context).focusColor,
label: Text(
entries.length.toString(),
style: TextStyle(
color: Theme.of(context).textTheme.bodySmall!.color),
));
}
return Container();
});
}

View file

@ -6,7 +6,7 @@ part of 'aniskip.dart';
// RiverpodGenerator
// **************************************************************************
String _$aniSkipHash() => r'2e5d19b025a2207ff64da7bf7908450ea9e5ff8c';
String _$aniSkipHash() => r'887869b54e2e151633efd46da83bde845e14f421';
/// See also [AniSkip].
@ProviderFor(AniSkip)

View file

@ -5,7 +5,7 @@ import 'package:riverpod_annotation/riverpod_annotation.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
part 'fetch_anime_sources.g.dart';
@riverpod
@Riverpod(keepAlive: true)
Future fetchAnimeSourcesList(Ref ref, {int? id, required bool reFresh}) async {
if (ref.watch(checkForExtensionsUpdateStateProvider) || reFresh) {
await fetchSourcesList(

View file

@ -7,7 +7,7 @@ part of 'fetch_anime_sources.dart';
// **************************************************************************
String _$fetchAnimeSourcesListHash() =>
r'75185e008e90491987fabb55851c536de89653a4';
r'34db8fac67fb2d445645e62adc68b6d13d481897';
/// Copied from Dart SDK
class _SystemHash {
@ -76,7 +76,7 @@ class FetchAnimeSourcesListFamily extends Family<AsyncValue> {
}
/// See also [fetchAnimeSourcesList].
class FetchAnimeSourcesListProvider extends AutoDisposeFutureProvider<Object?> {
class FetchAnimeSourcesListProvider extends FutureProvider<Object?> {
/// See also [fetchAnimeSourcesList].
FetchAnimeSourcesListProvider({
int? id,
@ -134,7 +134,7 @@ class FetchAnimeSourcesListProvider extends AutoDisposeFutureProvider<Object?> {
}
@override
AutoDisposeFutureProviderElement<Object?> createElement() {
FutureProviderElement<Object?> createElement() {
return _FetchAnimeSourcesListProviderElement(this);
}
@ -157,7 +157,7 @@ class FetchAnimeSourcesListProvider extends AutoDisposeFutureProvider<Object?> {
@Deprecated('Will be removed in 3.0. Use Ref instead')
// ignore: unused_element
mixin FetchAnimeSourcesListRef on AutoDisposeFutureProviderRef<Object?> {
mixin FetchAnimeSourcesListRef on FutureProviderRef<Object?> {
/// The parameter `id` of this provider.
int? get id;
@ -166,8 +166,7 @@ mixin FetchAnimeSourcesListRef on AutoDisposeFutureProviderRef<Object?> {
}
class _FetchAnimeSourcesListProviderElement
extends AutoDisposeFutureProviderElement<Object?>
with FetchAnimeSourcesListRef {
extends FutureProviderElement<Object?> with FetchAnimeSourcesListRef {
_FetchAnimeSourcesListProviderElement(super.provider);
@override

View file

@ -5,7 +5,7 @@ import 'package:riverpod_annotation/riverpod_annotation.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
part 'fetch_manga_sources.g.dart';
@riverpod
@Riverpod(keepAlive: true)
Future fetchMangaSourcesList(Ref ref, {int? id, required reFresh}) async {
if (ref.watch(checkForExtensionsUpdateStateProvider) || reFresh) {
await fetchSourcesList(

View file

@ -7,7 +7,7 @@ part of 'fetch_manga_sources.dart';
// **************************************************************************
String _$fetchMangaSourcesListHash() =>
r'f66f3011e72a3b234d7729ef203fc5f255870db3';
r'b56d2a229f2d0a2ef4dc93d9f06cc8485dcd2285';
/// Copied from Dart SDK
class _SystemHash {
@ -76,7 +76,7 @@ class FetchMangaSourcesListFamily extends Family<AsyncValue> {
}
/// See also [fetchMangaSourcesList].
class FetchMangaSourcesListProvider extends AutoDisposeFutureProvider<Object?> {
class FetchMangaSourcesListProvider extends FutureProvider<Object?> {
/// See also [fetchMangaSourcesList].
FetchMangaSourcesListProvider({
int? id,
@ -134,7 +134,7 @@ class FetchMangaSourcesListProvider extends AutoDisposeFutureProvider<Object?> {
}
@override
AutoDisposeFutureProviderElement<Object?> createElement() {
FutureProviderElement<Object?> createElement() {
return _FetchMangaSourcesListProviderElement(this);
}
@ -157,7 +157,7 @@ class FetchMangaSourcesListProvider extends AutoDisposeFutureProvider<Object?> {
@Deprecated('Will be removed in 3.0. Use Ref instead')
// ignore: unused_element
mixin FetchMangaSourcesListRef on AutoDisposeFutureProviderRef<Object?> {
mixin FetchMangaSourcesListRef on FutureProviderRef<Object?> {
/// The parameter `id` of this provider.
int? get id;
@ -166,8 +166,7 @@ mixin FetchMangaSourcesListRef on AutoDisposeFutureProviderRef<Object?> {
}
class _FetchMangaSourcesListProviderElement
extends AutoDisposeFutureProviderElement<Object?>
with FetchMangaSourcesListRef {
extends FutureProviderElement<Object?> with FetchMangaSourcesListRef {
_FetchMangaSourcesListProviderElement(super.provider);
@override

View file

@ -5,7 +5,7 @@ import 'package:riverpod_annotation/riverpod_annotation.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
part 'fetch_novel_sources.g.dart';
@riverpod
@Riverpod(keepAlive: true)
Future fetchNovelSourcesList(Ref ref, {int? id, required reFresh}) async {
if (ref.watch(checkForExtensionsUpdateStateProvider) || reFresh) {
await fetchSourcesList(

View file

@ -7,7 +7,7 @@ part of 'fetch_novel_sources.dart';
// **************************************************************************
String _$fetchNovelSourcesListHash() =>
r'1444d9ca12204ccf5389efe085c8a20e3498a808';
r'9a7afa9c301d2f4be51c074e5a81117f6d01352a';
/// Copied from Dart SDK
class _SystemHash {
@ -76,7 +76,7 @@ class FetchNovelSourcesListFamily extends Family<AsyncValue> {
}
/// See also [fetchNovelSourcesList].
class FetchNovelSourcesListProvider extends AutoDisposeFutureProvider<Object?> {
class FetchNovelSourcesListProvider extends FutureProvider<Object?> {
/// See also [fetchNovelSourcesList].
FetchNovelSourcesListProvider({
int? id,
@ -134,7 +134,7 @@ class FetchNovelSourcesListProvider extends AutoDisposeFutureProvider<Object?> {
}
@override
AutoDisposeFutureProviderElement<Object?> createElement() {
FutureProviderElement<Object?> createElement() {
return _FetchNovelSourcesListProviderElement(this);
}
@ -157,7 +157,7 @@ class FetchNovelSourcesListProvider extends AutoDisposeFutureProvider<Object?> {
@Deprecated('Will be removed in 3.0. Use Ref instead')
// ignore: unused_element
mixin FetchNovelSourcesListRef on AutoDisposeFutureProviderRef<Object?> {
mixin FetchNovelSourcesListRef on FutureProviderRef<Object?> {
/// The parameter `id` of this provider.
int? get id;
@ -166,8 +166,7 @@ mixin FetchNovelSourcesListRef on AutoDisposeFutureProviderRef<Object?> {
}
class _FetchNovelSourcesListProviderElement
extends AutoDisposeFutureProviderElement<Object?>
with FetchNovelSourcesListRef {
extends FutureProviderElement<Object?> with FetchNovelSourcesListRef {
_FetchNovelSourcesListProviderElement(super.provider);
@override

View file

@ -6,7 +6,7 @@ part of 'anilist.dart';
// RiverpodGenerator
// **************************************************************************
String _$anilistHash() => r'ddd07acc8d28d2aa95c942566109e9393ca9e5ed';
String _$anilistHash() => r'70e8cd537270a9054a1ef72de117fc7ad5545218';
/// Copied from Dart SDK
class _SystemHash {