diff --git a/lib/features/player/core/audiobook_player.dart b/lib/features/player/core/audiobook_player.dart index 680bb4d..56f21da 100644 --- a/lib/features/player/core/audiobook_player.dart +++ b/lib/features/player/core/audiobook_player.dart @@ -174,12 +174,31 @@ class AudiobookPlayer extends AudioPlayer { }; } + // @override + // Future seek(Duration? positionInBook, {int? index, bool b = true}) async { + // if (!b) { + // return super.seek(positionInBook, index: index); + // } + // if (_book == null) { + // _logger.warning('No book is set, not seeking'); + // return; + // } + // if (positionInBook == null) { + // _logger.warning('Position given is null, not seeking'); + // return; + // } + // final tracks = _book!.tracks; + // final trackToPlay = getTrackToPlay(_book!, positionInBook); + // final i = tracks.indexOf(trackToPlay); + // final positionInTrack = positionInBook - trackToPlay.startOffset; + // return super.seek(positionInTrack, index: i); + // } + /// need to override getDuration and getCurrentPosition to return according to the book instead of the current track /// this is because the book can be a list of audio files and the player is only aware of the current track /// so we need to calculate the duration and current position based on the book - @override - Future seek(Duration? positionInBook, {int? index, bool b = true}) async { + Future seekInBook(Duration? positionInBook, {int? index, bool b = true}) async { if (!b) { return super.seek(positionInBook, index: index); } @@ -208,11 +227,11 @@ class AudiobookPlayer extends AudioPlayer { void seekForward() { final index = _book!.chapters.indexOf(currentChapter!); if (index < _book!.chapters.length - 1) { - seek( + super.seek( _book!.chapters[index + 1].start + offset, ); } else { - seek(currentChapter!.end); + super.seek(currentChapter!.end); } } @@ -227,7 +246,7 @@ class AudiobookPlayer extends AudioPlayer { } else { chapterToSeekTo = currentChapter!; } - seek( + super.seek( chapterToSeekTo.start + offset, ); } diff --git a/lib/features/player/view/audiobook_player.dart b/lib/features/player/view/audiobook_player.dart index 8afeca3..e260f28 100644 --- a/lib/features/player/view/audiobook_player.dart +++ b/lib/features/player/view/audiobook_player.dart @@ -165,7 +165,7 @@ class AudiobookPlayerPlayPauseButton extends HookConsumerWidget { ), ProcessingState.completed => IconButton( onPressed: () async { - await player.seek(const Duration(seconds: 0)); + await player.seekInBook(const Duration(seconds: 0)); await player.play(); }, icon: const Icon( @@ -220,7 +220,7 @@ class AudiobookChapterProgressBar extends HookConsumerWidget { : currentChapter.end - currentChapter.start, // ! TODO add onSeek onSeek: (duration) { - player.seek( + player.seekInBook( duration + (currentChapter?.start ?? const Duration(seconds: 0)), ); }, diff --git a/lib/features/player/view/player_when_expanded.dart b/lib/features/player/view/player_when_expanded.dart index eeeb190..e157e3b 100644 --- a/lib/features/player/view/player_when_expanded.dart +++ b/lib/features/player/view/player_when_expanded.dart @@ -201,6 +201,7 @@ class PlayerWhenExpanded extends HookConsumerWidget { // the chapter skip buttons, seek 30 seconds back and forward, and play/pause button Expanded( + flex: 2, child: Opacity( opacity: earlyPercentage, child: SizedBox( diff --git a/lib/features/player/view/widgets/audiobook_player_seek_button.dart b/lib/features/player/view/widgets/audiobook_player_seek_button.dart index ac1ec20..4781113 100644 --- a/lib/features/player/view/widgets/audiobook_player_seek_button.dart +++ b/lib/features/player/view/widgets/audiobook_player_seek_button.dart @@ -22,9 +22,9 @@ class AudiobookPlayerSeekButton extends HookConsumerWidget { ), onPressed: () { if (isForward) { - player.seek(player.positionInBook + const Duration(seconds: 30)); + player.seek(player.position + const Duration(seconds: 30)); } else { - player.seek(player.positionInBook - const Duration(seconds: 30)); + player.seek(player.position - const Duration(seconds: 30)); } }, ); diff --git a/lib/features/player/view/widgets/audiobook_player_seek_chapter_button.dart b/lib/features/player/view/widgets/audiobook_player_seek_chapter_button.dart index aead305..39ef472 100644 --- a/lib/features/player/view/widgets/audiobook_player_seek_chapter_button.dart +++ b/lib/features/player/view/widgets/audiobook_player_seek_chapter_button.dart @@ -65,7 +65,7 @@ class AudiobookPlayerSeekChapterButton extends HookConsumerWidget { } // if chapter does not exist, go to the start or end of the book if (player.currentChapter == null) { - player.seek(isForward ? player.book!.duration : Duration.zero); + player.seekInBook(isForward ? player.book!.duration : Duration.zero); return; } if (isForward) { diff --git a/lib/features/player/view/widgets/chapter_selection_button.dart b/lib/features/player/view/widgets/chapter_selection_button.dart index cc31e35..a7dd4bc 100644 --- a/lib/features/player/view/widgets/chapter_selection_button.dart +++ b/lib/features/player/view/widgets/chapter_selection_button.dart @@ -112,7 +112,7 @@ class ChapterSelectionModal extends HookConsumerWidget { key: isCurrent ? chapterKey : null, onTap: () { Navigator.of(context).pop(); - notifier.seek(chapter.start + 90.ms); + notifier.seekInBook(chapter.start + 90.ms); notifier.play(); }, ); diff --git a/lib/features/skip_start_end/skip_start_end.dart b/lib/features/skip_start_end/skip_start_end.dart index e6a5d9b..e109357 100644 --- a/lib/features/skip_start_end/skip_start_end.dart +++ b/lib/features/skip_start_end/skip_start_end.dart @@ -19,7 +19,7 @@ class SkipStartEnd { if (_index != index && player.position.inMilliseconds < 500) { _index = index!; Future.microtask(() { - player.seek(start, b: false); + player.seek(start); }); } }),