pick static method

Future<EventFractal> pick(
  1. String h, [
  2. void miss(
    1. String h
    )?
])

Implementation

static Future<EventFractal> pick(
  String h, [
  void Function(String h)? miss,
]) async {
  //List<String> picking = [];
  var fractal = EventFractal.storage[h];
  if (fractal != null) return fractal;

  final rq = EventFractal.storage.request(h);

  if (picking.containsKey(h)) {
    return rq;
  }

  rq.then((f) {
    picking.remove(f.hash);
  });

  picking[h] = miss;

  timer.hold(() async {
    if (picking.isEmpty) return true;
    final r = await EventFractal.controller.select(
      fields: ['hash', 'type'],
      where: {
        'hash': [...picking.keys]
      },
      //includeSubTypes: true,
    );

    for (var m in r) {
      final h = m['hash'];
      picking.remove(h);
    }

    for (final entry in picking.entries) {
      final miss = entry.value;
      if (miss != null) miss(entry.key);
    }

    FilterF.collect(r);
    return true;
  }, 20);
  return rq;
}