diff --git a/lib/features/item_viewer/view/library_item_actions.dart b/lib/features/item_viewer/view/library_item_actions.dart index 5dca8af..b4aa8e2 100644 --- a/lib/features/item_viewer/view/library_item_actions.dart +++ b/lib/features/item_viewer/view/library_item_actions.dart @@ -467,8 +467,8 @@ class _LibraryItemPlayButton extends HookConsumerWidget { return ElevatedButton.icon( onPressed: () { currentBook?.libraryItemId == book.libraryItemId - ? ref.read(audioPlayerProvider).playOrPause() - : ref.read(audioPlayerProvider.notifier).load( + ? ref.read(absPlayerProvider).playOrPause() + : ref.read(absPlayerProvider.notifier).load( book, initialPosition: userMediaProgress?.currentTime, ); diff --git a/lib/features/item_viewer/view/library_item_hero_section.dart b/lib/features/item_viewer/view/library_item_hero_section.dart index 9e07c0a..b1c0e23 100644 --- a/lib/features/item_viewer/view/library_item_hero_section.dart +++ b/lib/features/item_viewer/view/library_item_hero_section.dart @@ -139,7 +139,7 @@ class _LibraryItemProgressIndicator extends HookConsumerWidget { @override Widget build(BuildContext context, WidgetRef ref) { - final player = ref.watch(audioPlayerProvider); + final player = ref.watch(absPlayerProvider); final libraryItem = ref.watch(libraryItemProvider(id)).valueOrNull; if (libraryItem == null) { return const SizedBox.shrink(); diff --git a/lib/features/playback_reporting/providers/playback_reporter_provider.dart b/lib/features/playback_reporting/providers/playback_reporter_provider.dart index 7851675..2f1c294 100644 --- a/lib/features/playback_reporting/providers/playback_reporter_provider.dart +++ b/lib/features/playback_reporting/providers/playback_reporter_provider.dart @@ -13,7 +13,7 @@ class PlaybackReporter extends _$PlaybackReporter { @override Future build() async { final playerSettings = ref.watch(appSettingsProvider).playerSettings; - final player = ref.watch(audioPlayerProvider); + final player = ref.watch(absPlayerProvider); final api = ref.watch(authenticatedApiProvider); final reporter = core.PlaybackReporter( diff --git a/lib/features/playback_reporting/providers/playback_reporter_provider.g.dart b/lib/features/playback_reporting/providers/playback_reporter_provider.g.dart index d1d3a5d..95aa888 100644 --- a/lib/features/playback_reporting/providers/playback_reporter_provider.g.dart +++ b/lib/features/playback_reporting/providers/playback_reporter_provider.g.dart @@ -6,7 +6,7 @@ part of 'playback_reporter_provider.dart'; // RiverpodGenerator // ************************************************************************** -String _$playbackReporterHash() => r'1cdf5cbc614c05c240d28bf0ec740d3899fd957a'; +String _$playbackReporterHash() => r'0a3d3a7b10a020c9ee4b6465663e83b8f75b36c5'; /// See also [PlaybackReporter]. @ProviderFor(PlaybackReporter) diff --git a/lib/features/player/core/abs_audio_player.dart b/lib/features/player/core/abs_audio_player.dart index 9ffc142..a82017a 100644 --- a/lib/features/player/core/abs_audio_player.dart +++ b/lib/features/player/core/abs_audio_player.dart @@ -1,4 +1,3 @@ -// ignore_for_file: public_member_api_docs, sort_constructors_first import 'dart:async'; import 'package:audio_service/audio_service.dart'; @@ -32,6 +31,7 @@ abstract class AbsAudioPlayer { Stream get mediaItemStream => _mediaItemController.stream; Stream get playerStateStream => playerStateSubject.stream; + // 加载整本书 Future load( BookExpanded book, { required Uri baseUrl, diff --git a/lib/features/player/core/abs_audio_player_platform.dart b/lib/features/player/core/abs_audio_player_platform.dart index 2c44a97..9508c89 100644 --- a/lib/features/player/core/abs_audio_player_platform.dart +++ b/lib/features/player/core/abs_audio_player_platform.dart @@ -8,8 +8,9 @@ final _logger = Logger('AbsPlatformAudioPlayer'); /// 音频播放器 平台ios,macos,android (just_audio) class AbsPlatformAudioPlayer extends AbsAudioPlayer { - late final AudioPlayer player; - AbsPlatformAudioPlayer() { + late final AudioPlayer _player; + AbsPlatformAudioPlayer(AudioPlayer player) { + _player = player; // 跳转到播放列表指定条目指定位置 // prefetch-playlist=yes JustAudioMediaKit.prefetchPlaylist = true; @@ -48,41 +49,41 @@ class AbsPlatformAudioPlayer extends AbsAudioPlayer { }); } @override - Duration get bufferedPosition => player.bufferedPosition; + Duration get bufferedPosition => _player.bufferedPosition; @override - Stream get bufferedPositionStream => player.bufferedPositionStream; + Stream get bufferedPositionStream => _player.bufferedPositionStream; @override - int get currentIndex => player.currentIndex ?? 0; + int get currentIndex => _player.currentIndex ?? 0; @override Future pause() async { - await player.pause(); + await _player.pause(); } @override Future play() async { - await player.play(); + await _player.play(); } @override Future playOrPause() async { - player.playing ? await player.pause() : await player.play(); + _player.playing ? await _player.pause() : await _player.play(); } @override - Stream get playingStream => player.playingStream; + Stream get playingStream => _player.playingStream; @override - Duration get position => player.position; + Duration get position => _player.position; @override - Stream get positionStream => player.positionStream; + Stream get positionStream => _player.positionStream; @override Future seek(Duration position, {int? index}) async { - await player.seek(position, index: index); + await _player.seek(position, index: index); } @override @@ -93,7 +94,7 @@ class AbsPlatformAudioPlayer extends AbsAudioPlayer { }) async { List audioSources = playlist.map((uri) => AudioSource.uri(uri)).toList(); - await player + await _player .setAudioSources( audioSources, preload: true, @@ -108,20 +109,20 @@ class AbsPlatformAudioPlayer extends AbsAudioPlayer { @override Future setSpeed(double speed) async { - await player.setSpeed(speed); + await _player.setSpeed(speed); } @override Future setVolume(double volume) async { - await player.setVolume(volume); + await _player.setVolume(volume); } @override - double get speed => player.speed; + double get speed => _player.speed; @override void dispose() { super.dispose(); - player.dispose(); + _player.dispose(); } } diff --git a/lib/features/player/providers/abs_provider.dart b/lib/features/player/providers/abs_provider.dart index e385d71..ad572a3 100644 --- a/lib/features/player/providers/abs_provider.dart +++ b/lib/features/player/providers/abs_provider.dart @@ -1,6 +1,8 @@ import 'package:audio_service/audio_service.dart'; import 'package:audio_session/audio_session.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; +import 'package:just_audio/just_audio.dart'; +import 'package:just_audio_media_kit/just_audio_media_kit.dart'; import 'package:logging/logging.dart'; import 'package:riverpod_annotation/riverpod_annotation.dart'; import 'package:shelfsdk/audiobookshelf_api.dart' as api; @@ -16,7 +18,7 @@ final _logger = Logger('AbsPlayerProvider'); /// 音频播放器 配置 @Riverpod(keepAlive: true) Future configurePlayer(Ref ref) async { - final player = ref.read(audioPlayerProvider); + final player = ref.read(absPlayerProvider); // for playing audio on windows, linux // for configuring how this app will interact with other audio apps @@ -43,13 +45,28 @@ Future configurePlayer(Ref ref) async { return audioService; } +// just_audio 播放器 +@Riverpod(keepAlive: true) +AudioPlayer audioPlayer(Ref ref) { + // 跳转到播放列表指定条目指定位置 + // prefetch-playlist=yes + JustAudioMediaKit.prefetchPlaylist = true; + // merge-files=yes + // cache=yes + // cache-pause-wait=60 + + JustAudioMediaKit.ensureInitialized(); + return AudioPlayer(); +} + /// 音频播放器 riverpod状态 @Riverpod(keepAlive: true) -class AudioPlayer extends _$AudioPlayer { +class AbsPlayer extends _$AbsPlayer { @override core.AbsAudioPlayer build() { + final audioPlayer = ref.watch(audioPlayerProvider); // final player = AbsMpvAudioPlayer(); - final player = AbsPlatformAudioPlayer(); + final player = AbsPlatformAudioPlayer(audioPlayer); ref.onDispose(player.dispose); return player; } @@ -77,7 +94,7 @@ class AudioPlayer extends _$AudioPlayer { class PlayerState extends _$PlayerState { @override core.AbsPlayerState build() { - final player = ref.read(audioPlayerProvider); + final player = ref.read(absPlayerProvider); player.playerStateStream.listen((playerState) { if (playerState != state) { state = playerState; @@ -87,7 +104,7 @@ class PlayerState extends _$PlayerState { } bool isLoading(String itemId) { - final player = ref.read(audioPlayerProvider); + final player = ref.read(absPlayerProvider); return player.book?.libraryItemId == itemId && !state.playing && state.processingState == core.AbsProcessingState.loading; @@ -102,7 +119,7 @@ class PlayerState extends _$PlayerState { class CurrentBook extends _$CurrentBook { @override api.BookExpanded? build() { - final player = ref.read(audioPlayerProvider); + final player = ref.read(absPlayerProvider); player.bookStream.listen((book) { if (book != state) { state = book; @@ -114,7 +131,7 @@ class CurrentBook extends _$CurrentBook { @riverpod bool isPlayerActive(Ref ref) { - final player = ref.read(audioPlayerProvider); + final player = ref.read(absPlayerProvider); player.bookStream.listen((book) { ref.invalidateSelf(); }); @@ -125,7 +142,7 @@ bool isPlayerActive(Ref ref) { class CurrentChapter extends _$CurrentChapter { @override api.BookChapter? build() { - final player = ref.read(audioPlayerProvider); + final player = ref.read(absPlayerProvider); player.chapterStream.listen((chapter) { if (chapter != state) { state = chapter; @@ -137,7 +154,7 @@ class CurrentChapter extends _$CurrentChapter { @riverpod Stream positionChapter(Ref ref) { - return ref.read(audioPlayerProvider).positionInChapterStream; + return ref.read(absPlayerProvider).positionInChapterStream; } @riverpod diff --git a/lib/features/player/providers/abs_provider.g.dart b/lib/features/player/providers/abs_provider.g.dart index dacc6ae..3c3d76b 100644 --- a/lib/features/player/providers/abs_provider.g.dart +++ b/lib/features/player/providers/abs_provider.g.dart @@ -6,7 +6,7 @@ part of 'abs_provider.dart'; // RiverpodGenerator // ************************************************************************** -String _$configurePlayerHash() => r'7e7003c815e7d240a67cd581931839cc60346707'; +String _$configurePlayerHash() => r'7ac63b6c3a34c56f42be55bc7a4856dabaae1583'; /// 音频播放器 配置 /// @@ -25,7 +25,23 @@ final configurePlayerProvider = FutureProvider.internal( @Deprecated('Will be removed in 3.0. Use Ref instead') // ignore: unused_element typedef ConfigurePlayerRef = FutureProviderRef; -String _$isPlayerActiveHash() => r'71a24418ecf6c1a2d8160b0d0c8fc523d5679e76'; +String _$audioPlayerHash() => r'd9d6cea83d03e36fac43367b6a24fd9d3a53b2fa'; + +/// See also [audioPlayer]. +@ProviderFor(audioPlayer) +final audioPlayerProvider = Provider.internal( + audioPlayer, + name: r'audioPlayerProvider', + debugGetCreateSourceHash: + const bool.fromEnvironment('dart.vm.product') ? null : _$audioPlayerHash, + dependencies: null, + allTransitiveDependencies: null, +); + +@Deprecated('Will be removed in 3.0. Use Ref instead') +// ignore: unused_element +typedef AudioPlayerRef = ProviderRef; +String _$isPlayerActiveHash() => r'4fca4af53a17dbcd7c8a98ce115bc11fa39b4cf9'; /// See also [isPlayerActive]. @ProviderFor(isPlayerActive) @@ -42,7 +58,7 @@ final isPlayerActiveProvider = AutoDisposeProvider.internal( @Deprecated('Will be removed in 3.0. Use Ref instead') // ignore: unused_element typedef IsPlayerActiveRef = AutoDisposeProviderRef; -String _$positionChapterHash() => r'750b8e2f2c7217b59c3d77ed66dd20798f8787fa'; +String _$positionChapterHash() => r'ac6148e92363fad849713c07045503653dcaa7e8'; /// See also [positionChapter]. @ProviderFor(positionChapter) @@ -77,24 +93,24 @@ final currentChaptersProvider = @Deprecated('Will be removed in 3.0. Use Ref instead') // ignore: unused_element typedef CurrentChaptersRef = AutoDisposeProviderRef>; -String _$audioPlayerHash() => r'e0efa20f340adf3312a76e5ca9e0c8ab0273a22a'; +String _$absPlayerHash() => r'2ec8952e1ec764b02239ff7c26144040e460976a'; /// 音频播放器 riverpod状态 /// -/// Copied from [AudioPlayer]. -@ProviderFor(AudioPlayer) -final audioPlayerProvider = - NotifierProvider.internal( - AudioPlayer.new, - name: r'audioPlayerProvider', +/// Copied from [AbsPlayer]. +@ProviderFor(AbsPlayer) +final absPlayerProvider = + NotifierProvider.internal( + AbsPlayer.new, + name: r'absPlayerProvider', debugGetCreateSourceHash: - const bool.fromEnvironment('dart.vm.product') ? null : _$audioPlayerHash, + const bool.fromEnvironment('dart.vm.product') ? null : _$absPlayerHash, dependencies: null, allTransitiveDependencies: null, ); -typedef _$AudioPlayer = Notifier; -String _$playerStateHash() => r'7e238aea9306cdfb952b546c76d1e894888c586f'; +typedef _$AbsPlayer = Notifier; +String _$playerStateHash() => r'f195d2d13bcee0f91b862e669ab3549667d8dd2d'; /// See also [PlayerState]. @ProviderFor(PlayerState) @@ -109,7 +125,7 @@ final playerStateProvider = ); typedef _$PlayerState = AutoDisposeNotifier; -String _$currentBookHash() => r'3684426dfde84e49dc2021e8444a2a3026082942'; +String _$currentBookHash() => r'f511c6f16c17696e41c6384c5195646a419deae3'; /// See also [CurrentBook]. @ProviderFor(CurrentBook) @@ -124,7 +140,7 @@ final currentBookProvider = ); typedef _$CurrentBook = AutoDisposeNotifier; -String _$currentChapterHash() => r'28ac34fa83cbd6acf745e06b91b9ce36733fdbe5'; +String _$currentChapterHash() => r'aff83aed7d098099805ec7d72ea84fff3a298522'; /// See also [CurrentChapter]. @ProviderFor(CurrentChapter) diff --git a/lib/features/player/view/mini_player_bottom_padding.dart b/lib/features/player/view/mini_player_bottom_padding.dart index f59c213..b81dd7e 100644 --- a/lib/features/player/view/mini_player_bottom_padding.dart +++ b/lib/features/player/view/mini_player_bottom_padding.dart @@ -9,7 +9,7 @@ class MiniPlayerBottomPadding extends HookConsumerWidget { Widget build(BuildContext context, WidgetRef ref) { return AnimatedSize( duration: const Duration(milliseconds: 200), - child: ref.watch(audioPlayerProvider).playing + child: ref.watch(absPlayerProvider).playing ? const SizedBox(height: playerMinHeight + 8) : const SizedBox.shrink(), ); diff --git a/lib/features/player/view/player_expanded_desktop.dart b/lib/features/player/view/player_expanded_desktop.dart index 6e3e081..6c71711 100644 --- a/lib/features/player/view/player_expanded_desktop.dart +++ b/lib/features/player/view/player_expanded_desktop.dart @@ -223,7 +223,7 @@ class ChapterSelection extends HookConsumerWidget { selected: isCurrent, // key: isCurrent ? chapterKey : null, onTap: () { - ref.read(audioPlayerProvider).switchChapter(chapter.id); + ref.read(absPlayerProvider).switchChapter(chapter.id); }, ); }, diff --git a/lib/features/player/view/player_minimized.dart b/lib/features/player/view/player_minimized.dart index 6ab560d..1b74866 100644 --- a/lib/features/player/view/player_minimized.dart +++ b/lib/features/player/view/player_minimized.dart @@ -148,7 +148,7 @@ class PlayerMinimizedProgress extends HookConsumerWidget { final currentChapter = ref.watch(currentChapterProvider); final progress = useStream( - ref.read(audioPlayerProvider).positionInChapterStream, + ref.read(absPlayerProvider).positionInChapterStream, initialData: Duration.zero, ); return 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 68b6745..c1820d2 100644 --- a/lib/features/player/view/widgets/audiobook_player_seek_button.dart +++ b/lib/features/player/view/widgets/audiobook_player_seek_button.dart @@ -14,7 +14,7 @@ class AudiobookPlayerSeekButton extends HookConsumerWidget { @override Widget build(BuildContext context, WidgetRef ref) { - final player = ref.read(audioPlayerProvider); + final player = ref.read(absPlayerProvider); return IconButton( icon: Icon( isForward ? Icons.forward_30 : Icons.replay_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 ca098ab..56c432a 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 @@ -20,7 +20,7 @@ class AudiobookPlayerSeekChapterButton extends HookConsumerWidget { size: AppElementSizes.iconSizeSmall, ), onPressed: () { - final player = ref.read(audioPlayerProvider); + final player = ref.read(absPlayerProvider); final book = ref.read(currentBookProvider); if (book == null) { return; diff --git a/lib/features/player/view/widgets/chapter_selection_button.dart b/lib/features/player/view/widgets/chapter_selection_button.dart index e3ed021..6ed4004 100644 --- a/lib/features/player/view/widgets/chapter_selection_button.dart +++ b/lib/features/player/view/widgets/chapter_selection_button.dart @@ -116,7 +116,7 @@ class ChapterSelectionModal extends HookConsumerWidget { onTap: () { Navigator.of(context).pop(); ref - .read(audioPlayerProvider) + .read(absPlayerProvider) .switchChapter(chapter.id); }, ); diff --git a/lib/features/player/view/widgets/player_player_pause_button.dart b/lib/features/player/view/widgets/player_player_pause_button.dart index 0a3ff88..629ae8f 100644 --- a/lib/features/player/view/widgets/player_player_pause_button.dart +++ b/lib/features/player/view/widgets/player_player_pause_button.dart @@ -35,7 +35,7 @@ class AudiobookPlayerPlayPauseButton extends HookConsumerWidget { } void _actionButtonPressed(AbsPlayerState playerState, WidgetRef ref) async { - final player = ref.read(audioPlayerProvider); + final player = ref.read(absPlayerProvider); if (playerState.playing) { await player.pause(); } else { diff --git a/lib/features/player/view/widgets/player_progress_bar.dart b/lib/features/player/view/widgets/player_progress_bar.dart index e71dea1..b9b8c2f 100644 --- a/lib/features/player/view/widgets/player_progress_bar.dart +++ b/lib/features/player/view/widgets/player_progress_bar.dart @@ -12,7 +12,7 @@ class AudiobookChapterProgressBar extends HookConsumerWidget { @override Widget build(BuildContext context, WidgetRef ref) { - final player = ref.watch(audioPlayerProvider); + final player = ref.watch(absPlayerProvider); final currentChapter = ref.watch(currentChapterProvider); final position = useStream( player.positionInBookStream, @@ -63,7 +63,7 @@ class AudiobookProgressBar extends HookConsumerWidget { @override Widget build(BuildContext context, WidgetRef ref) { - final player = ref.read(audioPlayerProvider); + final player = ref.read(absPlayerProvider); final position = useStream( player.positionInBookStream, initialData: const Duration(seconds: 0), diff --git a/lib/features/player/view/widgets/player_speed_adjust_button.dart b/lib/features/player/view/widgets/player_speed_adjust_button.dart index c394631..7c54067 100644 --- a/lib/features/player/view/widgets/player_speed_adjust_button.dart +++ b/lib/features/player/view/widgets/player_speed_adjust_button.dart @@ -16,7 +16,7 @@ class PlayerSpeedAdjustButton extends HookConsumerWidget { @override Widget build(BuildContext context, WidgetRef ref) { - final player = ref.read(audioPlayerProvider); + final player = ref.read(absPlayerProvider); final book = ref.read(currentBookProvider); final bookId = book?.libraryItemId ?? '_'; final bookSettings = ref.watch(bookSettingsProvider(bookId)); diff --git a/lib/features/player/view/widgets/speed_selector.dart b/lib/features/player/view/widgets/speed_selector.dart index 085d642..289a2ea 100644 --- a/lib/features/player/view/widgets/speed_selector.dart +++ b/lib/features/player/view/widgets/speed_selector.dart @@ -22,7 +22,7 @@ class SpeedSelector extends HookConsumerWidget { final appSettings = ref.watch(appSettingsProvider); final playerSettings = appSettings.playerSettings; final speeds = playerSettings.speedOptions; - final currentSpeed = ref.watch(audioPlayerProvider).speed; + final currentSpeed = ref.watch(absPlayerProvider).speed; final speedState = useState(currentSpeed); // hook the onSpeedSelected function to the state diff --git a/lib/features/shake_detector/shake_detector_provider.dart b/lib/features/shake_detector/shake_detector_provider.dart index a1069e2..0a47458 100644 --- a/lib/features/shake_detector/shake_detector_provider.dart +++ b/lib/features/shake_detector/shake_detector_provider.dart @@ -33,7 +33,7 @@ class ShakeDetector extends _$ShakeDetector { } // if no book is loaded, shake detection should not be enabled - final player = ref.watch(audioPlayerProvider); + final player = ref.watch(absPlayerProvider); player.playerStateStream.listen((event) { if (event.processingState == AbsProcessingState.idle && wasPlayerLoaded) { _logger.config('Player is now not loaded, invalidating'); @@ -89,7 +89,7 @@ class ShakeDetector extends _$ShakeDetector { ShakeAction shakeAction, { required Ref ref, }) { - final player = ref.read(audioPlayerProvider); + final player = ref.read(absPlayerProvider); if (player.book == null && shakeAction.isPlaybackManagementEnabled) { _logger.warning('No book is loaded'); return false; diff --git a/lib/features/shake_detector/shake_detector_provider.g.dart b/lib/features/shake_detector/shake_detector_provider.g.dart index de924df..85d2fbf 100644 --- a/lib/features/shake_detector/shake_detector_provider.g.dart +++ b/lib/features/shake_detector/shake_detector_provider.g.dart @@ -6,7 +6,7 @@ part of 'shake_detector_provider.dart'; // RiverpodGenerator // ************************************************************************** -String _$shakeDetectorHash() => r'c75e0308478cd70ef4b5cdd5f72cf706d597900c'; +String _$shakeDetectorHash() => r'8e65e89d59a9cf9492fd5f3eb309eb3a37cf1c6d'; /// See also [ShakeDetector]. @ProviderFor(ShakeDetector) diff --git a/lib/features/skip_start_end/providers/skip_start_end_provider.dart b/lib/features/skip_start_end/providers/skip_start_end_provider.dart index c42df87..1aa9aed 100644 --- a/lib/features/skip_start_end/providers/skip_start_end_provider.dart +++ b/lib/features/skip_start_end/providers/skip_start_end_provider.dart @@ -15,7 +15,7 @@ class SkipStartEnd extends _$SkipStartEnd { return null; } - final player = ref.read(audioPlayerProvider); + final player = ref.read(absPlayerProvider); final bookSettings = ref.watch(bookSettingsProvider(bookId)); final start = bookSettings.playerSettings.skipChapterStart; final end = bookSettings.playerSettings.skipChapterEnd; diff --git a/lib/features/skip_start_end/providers/skip_start_end_provider.g.dart b/lib/features/skip_start_end/providers/skip_start_end_provider.g.dart index b1aa220..b08cd70 100644 --- a/lib/features/skip_start_end/providers/skip_start_end_provider.g.dart +++ b/lib/features/skip_start_end/providers/skip_start_end_provider.g.dart @@ -6,7 +6,7 @@ part of 'skip_start_end_provider.dart'; // RiverpodGenerator // ************************************************************************** -String _$skipStartEndHash() => r'f14f84be713bdaad463fcf790510cddeb2be7709'; +String _$skipStartEndHash() => r'45572f40a098f081181e8b8bf9e4913e6e649cdc'; /// See also [SkipStartEnd]. @ProviderFor(SkipStartEnd) diff --git a/lib/features/sleep_timer/providers/sleep_timer_provider.dart b/lib/features/sleep_timer/providers/sleep_timer_provider.dart index 8247067..a4eabe6 100644 --- a/lib/features/sleep_timer/providers/sleep_timer_provider.dart +++ b/lib/features/sleep_timer/providers/sleep_timer_provider.dart @@ -26,7 +26,7 @@ class SleepTimer extends _$SleepTimer { var sleepTimer = core.SleepTimer( duration: sleepTimerSettings.defaultDuration, - player: ref.watch(audioPlayerProvider), + player: ref.watch(absPlayerProvider), ); ref.onDispose(sleepTimer.dispose); return sleepTimer; @@ -45,7 +45,7 @@ class SleepTimer extends _$SleepTimer { } else { final timer = core.SleepTimer( duration: resultingDuration, - player: ref.watch(audioPlayerProvider), + player: ref.watch(absPlayerProvider), ); ref.onDispose(timer.dispose); state = timer; diff --git a/lib/features/sleep_timer/providers/sleep_timer_provider.g.dart b/lib/features/sleep_timer/providers/sleep_timer_provider.g.dart index 20d073e..c0e59ce 100644 --- a/lib/features/sleep_timer/providers/sleep_timer_provider.g.dart +++ b/lib/features/sleep_timer/providers/sleep_timer_provider.g.dart @@ -6,7 +6,7 @@ part of 'sleep_timer_provider.dart'; // RiverpodGenerator // ************************************************************************** -String _$sleepTimerHash() => r'89ff64cd768deea9ed4ab103ddde918b3f96d705'; +String _$sleepTimerHash() => r'417759e07a45e69af93bd9a1c78ac859d9abcf4b'; /// See also [SleepTimer]. @ProviderFor(SleepTimer) diff --git a/lib/shared/widgets/shelves/book_shelf.dart b/lib/shared/widgets/shelves/book_shelf.dart index 430fa50..4ee702d 100644 --- a/lib/shared/widgets/shelves/book_shelf.dart +++ b/lib/shared/widgets/shelves/book_shelf.dart @@ -294,7 +294,7 @@ class _BookOnShelfPlayButton extends HookConsumerWidget { // book.media.asBookExpanded, // userProgress?.currentTime, // ); - ref.read(audioPlayerProvider.notifier).load( + ref.read(absPlayerProvider.notifier).load( book.media.asBookExpanded, initialPosition: userProgress?.currentTime, ); diff --git a/lib/shared/widgets/tray_manager.dart b/lib/shared/widgets/tray_manager.dart index 0d6043b..6024f98 100644 --- a/lib/shared/widgets/tray_manager.dart +++ b/lib/shared/widgets/tray_manager.dart @@ -46,17 +46,17 @@ class _TrayManagerState extends ConsumerState MenuItem( key: 'play_pause', label: '播放/暂停', - onClick: (menuItem) => ref.read(audioPlayerProvider).playOrPause(), + onClick: (menuItem) => ref.read(absPlayerProvider).playOrPause(), ), MenuItem( key: 'previous', label: '上一个', - onClick: (menuItem) => ref.read(audioPlayerProvider).previous(), + onClick: (menuItem) => ref.read(absPlayerProvider).previous(), ), MenuItem( key: 'next', label: '下一个', - onClick: (menuItem) => ref.read(audioPlayerProvider).next(), + onClick: (menuItem) => ref.read(absPlayerProvider).next(), ), MenuItem.separator(), MenuItem(