relatica/lib/riverpod_controllers/focus_mode.dart

40 wiersze
1.1 KiB
Dart

2024-07-24 15:40:25 +00:00
import 'dart:async';
import 'package:riverpod_annotation/riverpod_annotation.dart';
import '../models/focus_mode_data.dart';
import 'settings_services.dart';
2024-07-24 15:40:25 +00:00
part 'focus_mode.g.dart';
2024-07-24 15:40:25 +00:00
@Riverpod(keepAlive: true)
2024-07-24 15:40:25 +00:00
class FocusMode extends _$FocusMode {
Timer? _disableTimer;
void setMode(FocusModeData newMode, {bool updateSettingsService = true}) {
2024-07-24 15:40:25 +00:00
_disableTimer?.cancel();
2024-08-19 18:50:49 +00:00
var updatedState = newMode;
2024-07-24 15:40:25 +00:00
if (newMode.enabled && newMode.disableTime != null) {
2024-08-19 18:50:49 +00:00
final timeDifference = newMode.disableTime!.difference(DateTime.now());
if (timeDifference.isNegative || timeDifference.inMicroseconds == 0) {
updatedState = FocusModeData.disabled();
}
_disableTimer = Timer(timeDifference, () {
state = FocusModeData.disabled();
2024-07-24 15:40:25 +00:00
});
}
2024-08-19 18:50:49 +00:00
if (updateSettingsService) {
ref.read(focusModeSettingProvider.notifier).value = updatedState;
}
2024-08-19 18:50:49 +00:00
state = updatedState;
2024-07-24 15:40:25 +00:00
}
@override
FocusModeData build() {
final storedFocusMode = ref.watch(focusModeSettingProvider);
setMode(storedFocusMode, updateSettingsService: false);
2024-07-24 15:40:25 +00:00
return state;
}
}