fetchActive method

Future<ActiveCalls> fetchActive({
  1. DRCancelToken? cancel,
})

GET /client/v1/calls/active:本人正在进行的通话和正在振铃的来电。查询后与本地对齐(同同步), 本设备在通话中而还没有媒体连接的开始代发心跳、标为可以恢复。同步和回到前台时 SDK 自动调用;结果另经 activeResults 发出。

Implementation

Future<ActiveCalls> fetchActive({DRCancelToken? cancel}) async {
  core.requireSignedIn();
  final res = asMap(await core.requestIdempotent<Object?>(ApiRequest('GET', '/client/v1/calls/active', cancel: cancel))) ?? const {};
  final current = asMap(res['current']);
  final incoming = <({JsonMap call, JsonMap? inviter, JsonMap? group})>[
    for (final item in asList(res['incoming']) ?? const [])
      if (asMap(asMap(item)?['call']) != null) (call: asMap(asMap(item)!['call'])!, inviter: asMap(asMap(item)!['inviter']), group: asMap(asMap(item)!['group'])),
  ];
  _reconcile(current, incoming);
  _updateLeaderBeats(current);
  final saved = _savedCurrent;
  if (saved != null && current?['call_id'] != saved) noteCurrent(saved, false, force: true);
  final result = ActiveCalls(
    current == null ? null : Call(freezeMap(current)),
    [
      for (final i in incoming)
        IncomingCall(Call(freezeMap(i.call)), i.inviter == null ? null : CallInviter(freezeMap(i.inviter!)), i.group == null ? null : CallGroup(freezeMap(i.group!))),
    ],
  );
  if (!_activeResults.isClosed) _activeResults.add(result);
  return result;
}