xcDeviceSDCalendar method

Future<List<String>> xcDeviceSDCalendar({
  1. required String deviceId,
  2. required DateTime monthDateTime,
  3. required String fileType,
  4. required String eventType,
  5. String rev = '',
  6. int timeout = 5000,
})

查询设备端媒体日历(SD卡) deviceId 设备序列号或IP+Port monthDateTime 查询日期,到月即可 eg:DateTime(2023,6) fileType 媒体文件类型 mp4:MP4录像,jpg:图片, idximg:索引图片, h264:录像 eventType 事件类型

Implementation

//  * :全部录像或抓图
//  A :外部报警录像或抓图
//  M :动检报警录像或抓图
//  H :手动录像或手动抓图
//  K :关键录像或关键抓图
//  V :紧急录像
//  R :原始
//  P :感应图片
//  I :入侵
//  S :滞留
//  U :人形检测
//  F :人脸检测
//  N :车牌识别
//  G :场景切换
Future<List<String>> xcDeviceSDCalendar(
    {required String deviceId,
    required DateTime monthDateTime,
    required String fileType,
    required String eventType,
    String rev = '',
    int timeout = 5000}) async {
  final Map<String, dynamic> rMap = {
    'year': monthDateTime.year,
    'month': monthDateTime.month,
    'fileType': fileType,
    'sEvent': eventType,
  };

  final result = await _api.xcDeviceSDCalendar(
      deviceId, jsonEncode(rMap), timeout, ApiSeq.instance.getSeq());
  if (kDebugMode) {
    XCloudResponse.fromOriginResponse(result);
  }

  if (result.param1 < 0) {
    return Future.error(
        XCloudAPIException(code: result.param1, commandId: result.commandId));
  }
  int mask = 0;
  //{ "Name" : "OPSCalendar", "OPSCalendar" : { "Mask" : 0 }, "Ret" : 100, "SessionID" : "0x11" }
  String byteString = XCloudResponse.byteToString(result.byteStream);
  if (byteString.isEmpty) {
    return [];
  }
  Map<String, dynamic> calendarData = json.decode(byteString);
  if (calendarData.containsKey(result.data)) {
    Map<String, dynamic> maskMap = calendarData[result.data];
    mask = maskMap['Mask'];
  }
  final binaryStr = mask.toRadixString(2);
  List<String> binaryStrList = binaryStr.split('');
  if (kDebugMode) {
    print('xcDeviceSDCalendar==> mask:$mask, binaryStr:$binaryStr');
  }
  final List<String> ans = [];
  int day = 1;
  while (binaryStrList.isNotEmpty) {
    String p = binaryStrList.removeLast();
    if (p == '1') {
      String timeStr =
          '${monthDateTime.year}-${monthDateTime.month.toString().padLeft(2, '0')}-${day.toString().padLeft(2, '0')}';
      ans.add(timeStr);
    }
    day++;
  }
  return Future.value(ans);
}