findMessages method

Future<V2TimValueCallback<List<V2TimMessage>>> findMessages({
  1. required List<String> messageIDList,
})

Implementation

Future<V2TimValueCallback<List<V2TimMessage>>> findMessages({
  required List<String> messageIDList,
}) async {
  if (!TIMManager.instance.isInitSDK()) {
    return V2TimValueCallback<List<V2TimMessage>>(code: TIMErrCode.ERR_SDK_NOT_INITIALIZED.value, desc: "sdk not init");
  }

  List<V2TimMessage> messageResult = [];
  bool isFindAll = true;
  for (String messageID in messageIDList) {
    if (_mergerMessageMap.containsKey(messageID)) {
      messageResult.add(_mergerMessageMap[messageID]!);
    } else {
      isFindAll = false;
    }
  }

  if (isFindAll) {
    return V2TimValueCallback<List<V2TimMessage>>(code: TIMErrCode.ERR_SUCC.value, desc: "OK", data: messageResult);
  }

  String userData = Tools.generateUserData('findMessages');
  Completer<V2TimValueCallback<List<V2TimMessage>>> completer = Completer();
  void handleApiCallback(Map jsonResult) {
    V2TimValueCallback<List<V2TimMessage>> result = V2TimValueCallback<List<V2TimMessage>>.fromJson(jsonResult);
    if (result.code != TIMErrCode.ERR_SUCC.value) {
      List<V2TimMessage> messageList = result.data ?? [];
      Set<String> foundMessageIds = messageList.map((message) => message.msgID!).toSet();
      List<String> missingMessageIDs = messageIDList.where((msg) => !foundMessageIds.contains(msg)).toList();

      for (String messageID in missingMessageIDs) {
        if (_mergerMessageMap.containsKey(messageID)) {
          messageList.add(_mergerMessageMap[messageID]!);
        }
      }

      completer.complete(V2TimValueCallback<List<V2TimMessage>>(code: result.code, desc: result.desc, data: messageList));
    } else {
      completer.complete(result);
    }
  }
  NativeLibraryManager.timApiValueCallback2Future(userData, handleApiCallback);

  Pointer<Char> pJsonParam = Tools.string2PointerChar(json.encode(messageIDList));
  Pointer<Void> pUserData = Tools.string2PointerVoid(userData);
  NativeLibraryManager.bindings.DartFindMessages(pJsonParam, pUserData);

  return completer.future;
}