parse static method

ObservantInfo? parse(
  1. String? body
)

Implementation

static ObservantInfo? parse(String? body) {
  final json = decodeJsonObject(body);
  final ok = json?['ok'];
  if (json == null || ok is! bool) {
    return null;
  }
  final frame = json['frame'];
  // `cat` before ObservANT (2026-10-14).
  final cat = json['detection'] ?? json['cat'];
  int? field(Object? map, String key) =>
      map is Map<String, dynamic> && map[key] is int ? map[key] as int : null;
  return ObservantInfo(
    camera: json['camera'] is String ? json['camera'] as String : '',
    version: json['version'] is String ? json['version'] as String : '',
    pixelated: json['privacy'] == 'pixelate',
    width: field(frame, 'width'),
    height: field(frame, 'height'),
    fps: field(frame, 'fps'),
    inference: json['inference'] == true,
    modelRuns: field(json, 'model_runs') ?? 0,
    visits: field(cat, 'visits') ?? 0,
    problem: ok
        ? null
        : (json['problem'] is String ? json['problem'] as String : ''),
    boxes: parseZones(cat is Map<String, dynamic> ? cat['boxes'] : null),
    detections: <RecentDetection>[
      if (cat is Map<String, dynamic> && cat['recent'] is List)
        for (final visit in cat['recent'] as List)
          if (visit is Map<String, dynamic> &&
              visit['arrived'] is int &&
              parseZones(visit['boxes']).isNotEmpty)
            RecentDetection(
              DateTime.fromMillisecondsSinceEpoch(
                (visit['arrived'] as int) * 1000,
              ),
              parseZones(visit['boxes']),
            ),
    ].take(_keptPictures).toList(),
    lastScore: cat is Map<String, dynamic> && cat['last_score'] is num
        ? (cat['last_score'] as num).toDouble()
        : null,
  );
}