readCronTasks function
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;
}