Vaani/lib/features/player/providers/currently_playing_provider.dart

41 lines
1.1 KiB
Dart
Raw Normal View History

2025-03-25 22:01:16 +05:30
import 'package:hooks_riverpod/hooks_riverpod.dart';
2024-05-14 10:11:25 -04:00
import 'package:riverpod_annotation/riverpod_annotation.dart';
import 'package:shelfsdk/audiobookshelf_api.dart' as core;
2024-08-23 04:21:46 -04:00
import 'package:vaani/features/player/providers/audiobook_player.dart';
2024-05-14 10:11:25 -04:00
part 'currently_playing_provider.g.dart';
@riverpod
class CurrentChapter extends _$CurrentChapter {
@override
core.BookChapter? build() {
final player = ref.watch(playerProvider);
player.chapterStream.distinct().listen((chapter) {
update(chapter);
});
return player.currentChapter;
}
void update(core.BookChapter? chapter) {
if (state != chapter) {
state = chapter;
}
}
2024-05-19 08:53:21 -04:00
}
@riverpod
List<core.BookChapter> currentChapters(Ref ref) {
final session = ref.watch(sessionProvider);
if (session == null) {
return [];
}
final currentChapter = ref.watch(currentChapterProvider);
if (currentChapter == null) {
return [];
}
final index = session.chapters.indexOf(currentChapter);
final total = session.chapters.length;
return session.chapters
.sublist(index - 3, (total - 3) <= (index + 17) ? total : index + 17);
2024-05-19 08:53:21 -04:00
}