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().focusModeData = updatedState; } state = updatedState; } @override FocusModeData build() { final storedFocusMode = getIt().focusModeData; setMode(storedFocusMode, updateSettingsService: false); return state; } }