readCronTasks function

Future<List<CronTask>> readCronTasks({
  1. String? dir,
})

Read and parse .neomage/scheduled_tasks.json. Returns an empty task list if the file is missing, empty, or malformed. Tasks with invalid cron strings are silently dropped.

Implementation

Future<List<CronTask>> readCronTasks({String? dir}) async {
  final path = getCronFilePath(dir: dir);
  final file = File(path);

  String raw;
  try {
    raw = await file.readAsString();
  } catch (e) {
    return [];
  }

  dynamic parsed;
  try {
    parsed = jsonDecode(raw);
  } catch (_) {
    return [];
  }

  if (parsed is! Map<String, dynamic>) return [];
  final tasks = parsed['tasks'];
  if (tasks is! List) return [];

  final out = <CronTask>[];
  for (final t in tasks) {
    if (t is! Map<String, dynamic>) continue;
    if (t['id'] is! String ||
        t['cron'] is! String ||
        t['prompt'] is! String ||
        t['createdAt'] is! num) {
      continue;
    }
    final cronStr = t['cron'] as String;
    if (parseCronExpression(cronStr) == null) {
      continue;
    }
    out.add(CronTask.fromJson(t));
  }
  return out;
}