disable shake detector when player not playing anything

This commit is contained in:
Dr-Blank 2024-09-30 02:10:28 -04:00
parent a15d634cd2
commit c7a5d68781
No known key found for this signature in database
GPG key ID: 7452CC63F210A266
2 changed files with 34 additions and 12 deletions

View file

@ -19,6 +19,8 @@ Logger _logger = Logger('ShakeDetector');
@riverpod
class ShakeDetector extends _$ShakeDetector {
bool wasPlayerLoaded = false;
@override
core.ShakeDetector? build() {
final appSettings = ref.watch(appSettingsProvider);
@ -34,18 +36,29 @@ class ShakeDetector extends _$ShakeDetector {
// when paused or playing
// if no book is loaded, shake detection should not be enabled
// final player = ref.watch(audiobookPlayerProvider);
final player = ref.watch(simpleAudiobookPlayerProvider);
player.playerStateStream.listen((event) {
if (event.processingState == ProcessingState.idle && wasPlayerLoaded) {
_logger.config('Player is now not loaded, invalidating');
wasPlayerLoaded = false;
ref.invalidateSelf();
}
if (event.processingState != ProcessingState.idle && !wasPlayerLoaded) {
_logger.config('Player is now loaded, invalidating');
wasPlayerLoaded = true;
ref.invalidateSelf();
}
});
if (player.book == null) {
_logger.config('No book is loaded, disabling shake detection');
wasPlayerLoaded = false;
return null;
} else {
_logger.finer('Book is loaded, marking player as loaded');
wasPlayerLoaded = true;
}
// if (player.book == null) {
// _logger.config('No book is loaded');
// return null;
// }
// if (!player.playing && !shakeDetectionSettings.isActiveWhenPaused) {
// _logger.config(
// 'Shake detection is disabled when paused and player is not playing',
// );
// return null;
// }
// if sleep timer is not enabled, shake detection should not be enabled
final sleepTimer = ref.watch(sleepTimerProvider);
if (!shakeDetectionSettings.shakeAction.isPlaybackManagementEnabled &&
@ -95,13 +108,22 @@ class ShakeDetector extends _$ShakeDetector {
return true;
case ShakeAction.fastForward:
_logger.fine('Fast forwarding');
if (!player.playing) {
_logger.warning('Player is not playing');
return false;
}
player.seek(player.position + const Duration(seconds: 30));
return true;
case ShakeAction.rewind:
_logger.fine('Rewinding');
if (!player.playing) {
_logger.warning('Player is not playing');
return false;
}
player.seek(player.position - const Duration(seconds: 30));
return true;
case ShakeAction.playPause:
_logger.fine('Toggling play/pause');
player.togglePlayPause();
return true;
default:

View file

@ -6,7 +6,7 @@ part of 'shake_detector.dart';
// RiverpodGenerator
// **************************************************************************
String _$shakeDetectorHash() => r'e22fbd7a3b0143db3a9e2c8489749ee0dd8cd25a';
String _$shakeDetectorHash() => r'2a380bab1d4021d05d2ae40fec964a5f33d3730c';
/// See also [ShakeDetector].
@ProviderFor(ShakeDetector)