mnemo_cards/mnemo_cards_backend/lib/cron/cron_executor.dart

54 lines
1.5 KiB
Dart
Raw Normal View History

2025-11-16 11:25:27 +00:00
import 'dart:developer';
import 'package:mnemo_cards_common_backend/mnemo_cards_common_backend.dart';
import 'package:neat_periodic_task/neat_periodic_task.dart';
import 'task.dart';
class CronManager {
final Map<String, Task> _tasks;
List<NeatPeriodicTaskScheduler>? _schedulers;
CronManager(List<Task> tasks)
: _tasks = Map.fromIterable(tasks, key: (v) => v.name);
Future<void> init() async {
_schedulers = [];
// final models = isar.taskModels.where().findAllSync();
final tasksToAdd = _tasks.keys;
// .where((name) => models.where((model) => model.name == name).isEmpty);
final models = tasksToAdd.map((name) => TaskModel.create(
name: name,
interval: Duration(seconds: _tasks[name]!.intervalSeconds),
));
for (final model in models) {
if (_tasks[model.name] != null) {
_schedulers!.add(
NeatPeriodicTaskScheduler(
interval: model.interval,
name: model.name,
timeout: model.timeout,
task: _tasks[model.name]!.run,
minCycle: model.minCycle,
maxCycle: model.maxCycle,
),
);
}
}
for (final scheduler in _schedulers!) {
scheduler.start();
}
print(
'Cron executor inited with ${_schedulers?.length} tasks (${tasksToAdd.length} new)',
);
}
Future<void> dispose() async {
if (_schedulers != null) {
for (final scheduler in _schedulers!) {
await scheduler.stop().catchError((err) => log(err));
}
}
}
}