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 _tasks; List? _schedulers; CronManager(List tasks) : _tasks = Map.fromIterable(tasks, key: (v) => v.name); Future init() async { _schedulers = []; // Tasks are loaded from database via TaskDao if needed final tasksToAdd = _tasks.keys; 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 dispose() async { if (_schedulers != null) { for (final scheduler in _schedulers!) { await scheduler.stop().catchError((err) => log(err)); } } } }