findCloudRecordFile method

Future<List<Map<String, dynamic>>> findCloudRecordFile({
  1. required CloudRecordByTime param,
  2. required List<Map<String, dynamic>> list,
})

Implementation

Future<List<Map<String, dynamic>>> findCloudRecordFile(
    {required CloudRecordByTime param,
    required List<Map<String, dynamic>> list}) async {
  final result = await _api.findCloudRecordFile(
      param.toJsonString(), ApiSeq.instance.getSeq());
  XCloudResponse<Map<String, dynamic>> response =
      XCloudResponse.fromOriginResponse<Map<String, dynamic>>(result);
  if (!response.success) {
    return Future.error(
        XCloudAPIException(code: result.param1, commandId: result.commandId));
  }

  List? listOnce = response.data['vidlist'];
  if (param.msg == 'short_video_query') {
    List<Map<String, dynamic>> listValue = [];
    if (listOnce != null && listOnce.isNotEmpty) {
      listValue.add(response.data);
    }

    list.addAll(listValue);
    return list;
  }

  if (listOnce == null || listOnce.isEmpty) {
    ///如果没有查到数据或者数据数量少于500条结束查询
    return list;
  }

  list.add(response.data);

  Map map = listOnce.last;

  ///和服务器确认过都是倒序返回,无需处理排序问题
  DateTime endTime = DateUtil.fromDateString(map['st'] as String);

  DateTime newTime = DateTime.fromMillisecondsSinceEpoch(
      endTime.millisecondsSinceEpoch - 1000);

  ///如果最后一个文件的开始时间跨天了,就不需要再查询了
  if (newTime.millisecondsSinceEpoch <
      param.startTime!.millisecondsSinceEpoch) {
    return list;
  }
  CloudRecordByTime paramNew = CloudRecordByTime(
      msg: param.msg,
      userId: param.userId,
      sn: param.sn,
      channel: param.channel,
      startTime: param.startTime,
      endTime: newTime,
      muserid: param.muserid);

  return findCloudRecordFile(param: paramNew, list: list);
}