53 lines
1.5 KiB
Dart
53 lines
1.5 KiB
Dart
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));
|
|
}
|
|
}
|
|
}
|
|
}
|