Vaani/lib/features/sleep_timer/providers/sleep_timer_provider.dart

60 lines
1.8 KiB
Dart
Raw Normal View History

import 'package:flutter/material.dart';
2024-06-06 15:35:30 -04:00
import 'package:riverpod_annotation/riverpod_annotation.dart';
import 'package:whispering_pages/features/player/providers/audiobook_player.dart';
import 'package:whispering_pages/features/sleep_timer/core/sleep_timer.dart'
as core;
2024-06-06 15:35:30 -04:00
import 'package:whispering_pages/settings/app_settings_provider.dart';
import 'package:whispering_pages/shared/extensions/time_of_day.dart';
2024-06-06 15:35:30 -04:00
part 'sleep_timer_provider.g.dart';
@Riverpod(keepAlive: true)
class SleepTimer extends _$SleepTimer {
@override
core.SleepTimer? build() {
final appSettings = ref.watch(appSettingsProvider);
final sleepTimerSettings = appSettings.playerSettings.sleepTimerSettings;
bool isEnabled = sleepTimerSettings.autoTurnOnTimer;
if (!isEnabled) {
return null;
}
if ((!sleepTimerSettings.alwaysAutoTurnOnTimer) &&
(sleepTimerSettings.autoTurnOnTime
.toTimeOfDay()
.isAfter(TimeOfDay.now()) &&
sleepTimerSettings.autoTurnOffTime
.toTimeOfDay()
.isBefore(TimeOfDay.now()))) {
return null;
}
var sleepTimer = core.SleepTimer(
// duration: sleepTimerSettings.defaultDuration,
duration: const Duration(seconds: 5),
player: ref.watch(simpleAudiobookPlayerProvider),
);
ref.onDispose(sleepTimer.dispose);
return sleepTimer;
}
void setTimer(Duration resultingDuration) {
if (state != null) {
state!.duration = resultingDuration;
ref.notifyListeners();
} else {
final timer = core.SleepTimer(
duration: resultingDuration,
player: ref.watch(simpleAudiobookPlayerProvider),
);
ref.onDispose(timer.dispose);
state = timer;
}
}
void cancelTimer() {
state?.dispose();
state = null;
}
2024-06-06 15:35:30 -04:00
}