mirror of
https://gitlab.com/mysocialportal/relatica
synced 2024-10-18 15:53:32 +00:00
40 lines
1.1 KiB
Dart
40 lines
1.1 KiB
Dart
import 'dart:async';
|
|
|
|
import 'package:riverpod_annotation/riverpod_annotation.dart';
|
|
|
|
import '../globals.dart';
|
|
import '../models/focus_mode_data.dart';
|
|
import '../services/setting_service.dart';
|
|
|
|
part 'focus_mode.g.dart';
|
|
|
|
@Riverpod(keepAlive: true)
|
|
class FocusMode extends _$FocusMode {
|
|
Timer? _disableTimer;
|
|
|
|
void setMode(FocusModeData newMode, {bool updateSettingsService = true}) {
|
|
_disableTimer?.cancel();
|
|
var updatedState = newMode;
|
|
if (newMode.enabled && newMode.disableTime != null) {
|
|
final timeDifference = newMode.disableTime!.difference(DateTime.now());
|
|
if (timeDifference.isNegative || timeDifference.inMicroseconds == 0) {
|
|
updatedState = FocusModeData.disabled();
|
|
}
|
|
_disableTimer = Timer(timeDifference, () {
|
|
state = FocusModeData.disabled();
|
|
});
|
|
}
|
|
|
|
if (updateSettingsService) {
|
|
getIt<SettingsService>().focusModeData = updatedState;
|
|
}
|
|
state = updatedState;
|
|
}
|
|
|
|
@override
|
|
FocusModeData build() {
|
|
final storedFocusMode = getIt<SettingsService>().focusModeData;
|
|
setMode(storedFocusMode, updateSettingsService: false);
|
|
return state;
|
|
}
|
|
}
|