RgMYGyBpAktMCILO method

  1. @override
Future<void> RgMYGyBpAktMCILO({
  1. required YIMEnum_ConversationType sZLnmTKeJUdmBFHE,
  2. required String DLwuDqfWcelSXXhD,
  3. required YIMEnum_MessageType NFFqeKRHtAVYYGYQ,
  4. String? ZXiWwdPsOsDFIbxX,
  5. String? lTrFtkYpftSMNzmn,
  6. YIMAttachment? GvptjZbHlqCirUPs,
  7. YIMPushOption? YxcFziNqPfUNMAiS = null,
  8. bool jujWgdWREbZUtHry = false,
  9. void RrsqBWEXnAUcHXDQ(
    1. YIMMessage message
    )?,
  10. void XOBlSFIFFNmgMIgo(
    1. YIMMessage message,
    2. int count,
    3. int total
    )?,
  11. void FDZFqQsWicmdpmvh(
    1. bool oTLKfnnymNCTXHML,
    2. YIMMessage message,
    3. int code,
    4. String msg,
    )?,
})
override

Implementation

@override
Future<void> RgMYGyBpAktMCILO({
  required YIMEnum_ConversationType sZLnmTKeJUdmBFHE,
  required String DLwuDqfWcelSXXhD,
  required YIMEnum_MessageType NFFqeKRHtAVYYGYQ,
  String? ZXiWwdPsOsDFIbxX,
  String? lTrFtkYpftSMNzmn,
  YIMAttachment? GvptjZbHlqCirUPs,
  YIMPushOption? YxcFziNqPfUNMAiS = null,
  bool jujWgdWREbZUtHry = false,
  void Function(YIMMessage message)? RrsqBWEXnAUcHXDQ,
  void Function(YIMMessage message, int count, int total)? XOBlSFIFFNmgMIgo,
  void Function(bool oTLKfnnymNCTXHML, YIMMessage message, int code, String msg)? FDZFqQsWicmdpmvh,
}) async {
  Future<void> waVsXGvUVRjwqOmb(YIMInfo? QWEODEcKdmNhvCPj) async {
    final mWEnrkpgWgfnODZg = YIMMessage()
      ..conversationType = sZLnmTKeJUdmBFHE
      ..messageType = NFFqeKRHtAVYYGYQ
      ..content = ZXiWwdPsOsDFIbxX ?? ""
      ..attachment = GvptjZbHlqCirUPs
      ..messageState = YIMEnum_MessageState.Sending
      ..from = eFtbLxhxTmdNVKuo.hBYZOFteqhkvDgHA!
      ..fromInfo = eFtbLxhxTmdNVKuo.plJXjIOyvNhjneLH
      ..to = DLwuDqfWcelSXXhD
      ..toInfo = QWEODEcKdmNhvCPj ?? (YIMInfo()..id = DLwuDqfWcelSXXhD)
      ..time = DateTime.now();
    // 插入一条新消息
    switch (sZLnmTKeJUdmBFHE) {
      case YIMEnum_ConversationType.P2P:
        mWEnrkpgWgfnODZg.id = "message_p2p_${Ulid().toCanonical()}";
        break;
      case YIMEnum_ConversationType.Team:
        mWEnrkpgWgfnODZg.id = "message_team_${Ulid().toCanonical()}";
        break;
      case YIMEnum_ConversationType.ChatRoom:
        mWEnrkpgWgfnODZg.id = "message_room_${Ulid().toCanonical()}";
        break;
      default:
        break;
    }
    eFtbLxhxTmdNVKuo.WeloVHMlcPVpCsCr.vUWyYsqBHvAmVrYc(() {
      RrsqBWEXnAUcHXDQ?.call(mWEnrkpgWgfnODZg);
    });
    if (!ptLoDBriUoBUHreo.uvWNunbGgtEdyNiW.otQyjQrYNfRgpyCy()) {
      mWEnrkpgWgfnODZg.messageState = YIMEnum_MessageState.Fail;
      eFtbLxhxTmdNVKuo.WeloVHMlcPVpCsCr.vUWyYsqBHvAmVrYc(() {
        FDZFqQsWicmdpmvh?.call(false, mWEnrkpgWgfnODZg, 0, "Please login first");
      });
      return;
    }
    if ([YIMEnum_ConversationType.P2P, YIMEnum_ConversationType.Team].contains(sZLnmTKeJUdmBFHE)) {
      await eFtbLxhxTmdNVKuo.HsDBYdwzkEBPFhmJ.NxTIiSKVXcgMzjSL(
        _YIMTableName.Message,
        DEzbKDIBPJVTWSIB: _YIMTable_Message(mWEnrkpgWgfnODZg: mWEnrkpgWgfnODZg),
      );
      Filter? TKUJvkDHgZbFgVJv;
      switch (sZLnmTKeJUdmBFHE) {
        case YIMEnum_ConversationType.P2P:
          TKUJvkDHgZbFgVJv = Filter.and([
            Filter.or([
              Filter.and([Filter.equals("lastMessage.from", eFtbLxhxTmdNVKuo.hBYZOFteqhkvDgHA), Filter.equals("lastMessage.to", DLwuDqfWcelSXXhD)]),
              Filter.and([Filter.equals("lastMessage.to", eFtbLxhxTmdNVKuo.hBYZOFteqhkvDgHA), Filter.equals("lastMessage.from", DLwuDqfWcelSXXhD)]),
            ]),
            Filter.equals("lastMessage.conversationType", sZLnmTKeJUdmBFHE.rawValue),
          ]);
          break;
        case YIMEnum_ConversationType.Team:
          TKUJvkDHgZbFgVJv = Filter.and([
            Filter.equals("lastMessage.to", DLwuDqfWcelSXXhD),
            Filter.equals("lastMessage.conversationType", sZLnmTKeJUdmBFHE.rawValue),
          ]);
          break;
        case YIMEnum_ConversationType.ChatRoom:
          TKUJvkDHgZbFgVJv = Filter.and([
            Filter.equals("lastMessage.conversationType", sZLnmTKeJUdmBFHE.rawValue),
          ]);
          break;
      }
      var BByVDaYVEweNgSCl = (await eFtbLxhxTmdNVKuo.HsDBYdwzkEBPFhmJ.LUwlOqRgyVmlEiyp<_YIMTable_Conversation>(
        _YIMTableName.Conversation,
        sprgVkbCCQhGYFSK: (map) => _YIMTable_Conversation.fromJson(map),
        PldCyxtbMzvNSNom: Finder(filter: TKUJvkDHgZbFgVJv),
      ))!;
      final KyUToNKdasnYcrci = BByVDaYVEweNgSCl.isEmpty;
      // 创建或修改会话最后一条消息
      await ptLoDBriUoBUHreo.PDCrHbGmsBdFRajZ.seQaUCGGFYuCERMG(sZLnmTKeJUdmBFHE, DLwuDqfWcelSXXhD);
      eFtbLxhxTmdNVKuo.WeloVHMlcPVpCsCr.vUWyYsqBHvAmVrYc(() {
        ptLoDBriUoBUHreo.CTCflLMwyPmjZPwH.vbkGgBUjJANFBecG?.call();
      });
      BByVDaYVEweNgSCl = (await eFtbLxhxTmdNVKuo.HsDBYdwzkEBPFhmJ.LUwlOqRgyVmlEiyp<_YIMTable_Conversation>(
        _YIMTableName.Conversation,
        sprgVkbCCQhGYFSK: (map) => _YIMTable_Conversation.fromJson(map),
        PldCyxtbMzvNSNom: Finder(filter: TKUJvkDHgZbFgVJv),
      ))!;
      if (KyUToNKdasnYcrci) {
        //新增的会话
        eFtbLxhxTmdNVKuo.WeloVHMlcPVpCsCr.vUWyYsqBHvAmVrYc(() {
          ptLoDBriUoBUHreo.CTCflLMwyPmjZPwH.bNtqOyRWxOrowAZX?.call(BByVDaYVEweNgSCl.map((e) => YIMConversation(gxECQohXBcwxDNVO: e)).toList());
        });
      } else {
        //原有的会话
        eFtbLxhxTmdNVKuo.WeloVHMlcPVpCsCr.vUWyYsqBHvAmVrYc(() {
          ptLoDBriUoBUHreo.CTCflLMwyPmjZPwH.ILHvgzQbwdReWqoO?.call(BByVDaYVEweNgSCl.map((e) => YIMConversation(gxECQohXBcwxDNVO: e)).toList());
        });
      }
    }
    if (ZXiWwdPsOsDFIbxX != null && ZXiWwdPsOsDFIbxX.length > 4096) {
      mWEnrkpgWgfnODZg.messageState = YIMEnum_MessageState.Fail;
      await cDCrRRvlWwZqcZPg(mWEnrkpgWgfnODZg: mWEnrkpgWgfnODZg);
      eFtbLxhxTmdNVKuo.WeloVHMlcPVpCsCr.vUWyYsqBHvAmVrYc(() {
        FDZFqQsWicmdpmvh?.call(false, mWEnrkpgWgfnODZg, 0, "content size over than 4096");
      });
      return;
    }

    if (jujWgdWREbZUtHry) return;

    void BJIEZlNNgPcIOZeK() {
      eFtbLxhxTmdNVKuo.TRicabbJmwhKdzbv.jodencItUatiSpEH("sendMessage", DEzbKDIBPJVTWSIB: {
        "message": mWEnrkpgWgfnODZg,
        "push": YxcFziNqPfUNMAiS,
      }, YzQRKyskQzveDVYH: (oTLKfnnymNCTXHML, OhXEEEJrHsRvZogG, iggZzorTFvICOSCL, PBMZMubGZDFjYEYt) async {
        if (oTLKfnnymNCTXHML) {
          mWEnrkpgWgfnODZg.messageState = YIMEnum_MessageState.Success_UnRead;
          mWEnrkpgWgfnODZg.time = DateTime.fromMillisecondsSinceEpoch(OhXEEEJrHsRvZogG!["time"]);
          mWEnrkpgWgfnODZg.toInfo = YIMInfo.fromJson(OhXEEEJrHsRvZogG["toInfo"]);
        } else {
          mWEnrkpgWgfnODZg.messageState = YIMEnum_MessageState.Fail;
        }
        // 更新新消息发送状态
        await cDCrRRvlWwZqcZPg(mWEnrkpgWgfnODZg: mWEnrkpgWgfnODZg);
        eFtbLxhxTmdNVKuo.WeloVHMlcPVpCsCr.vUWyYsqBHvAmVrYc(() {
          FDZFqQsWicmdpmvh?.call(oTLKfnnymNCTXHML, mWEnrkpgWgfnODZg, iggZzorTFvICOSCL, PBMZMubGZDFjYEYt);
        });
      });
    }

    if (mWEnrkpgWgfnODZg.attachment?.url != null) {
      Future<void> dyTzxrZHlbMyoijK({Future<String> Function(String url)? PXskHbBHevBnklJi, required Function() MshvDHjtbgkCRPRT}) async {
        if (mWEnrkpgWgfnODZg.attachment!.url.startsWith("http://") || mWEnrkpgWgfnODZg.attachment!.url.startsWith("https://")) {
          MshvDHjtbgkCRPRT.call();
          return;
        }

        void BzGXmbCesdSYcwnc() {
          eFtbLxhxTmdNVKuo.COWyOzFujUqyiEde.dyTzxrZHlbMyoijK(
            MaYCMzBDIzlEYMzs: mWEnrkpgWgfnODZg.attachment!.url,
            lTrFtkYpftSMNzmn: lTrFtkYpftSMNzmn,
            zwedurJlGPAFAeDP: "${eFtbLxhxTmdNVKuo.XOnHYWRkDBCzQOUO!.appKey}/${eFtbLxhxTmdNVKuo.hBYZOFteqhkvDgHA}/${NFFqeKRHtAVYYGYQ.name}",
            kyWapwAiXYXTGPIA: (count, total) {
              eFtbLxhxTmdNVKuo.WeloVHMlcPVpCsCr.vUWyYsqBHvAmVrYc(() {
                XOBlSFIFFNmgMIgo?.call(mWEnrkpgWgfnODZg, count, total);
              });
            },
            AjOdsioGJRrmvWkh: (oTLKfnnymNCTXHML, url, error) async {
              if (!oTLKfnnymNCTXHML) {
                mWEnrkpgWgfnODZg.messageState = YIMEnum_MessageState.Fail;
                await cDCrRRvlWwZqcZPg(mWEnrkpgWgfnODZg: mWEnrkpgWgfnODZg);
                eFtbLxhxTmdNVKuo.WeloVHMlcPVpCsCr.vUWyYsqBHvAmVrYc(() {
                  FDZFqQsWicmdpmvh?.call(false, mWEnrkpgWgfnODZg, 0, "file upload error:$error");
                });
                return;
              }
              mWEnrkpgWgfnODZg.attachment?.url = url!;
              await cDCrRRvlWwZqcZPg(mWEnrkpgWgfnODZg: mWEnrkpgWgfnODZg);
              MshvDHjtbgkCRPRT.call();
            },
          );
        }

        if (PXskHbBHevBnklJi != null) {
          mWEnrkpgWgfnODZg.attachment!.url = await PXskHbBHevBnklJi(mWEnrkpgWgfnODZg.attachment!.url);
          mWEnrkpgWgfnODZg.attachment!.size = await XFile(mWEnrkpgWgfnODZg.attachment!.url).length();
          await cDCrRRvlWwZqcZPg(mWEnrkpgWgfnODZg: mWEnrkpgWgfnODZg);
          BzGXmbCesdSYcwnc();
        } else {
          BzGXmbCesdSYcwnc();
        }
      }

      switch (NFFqeKRHtAVYYGYQ) {
        case YIMEnum_MessageType.Audio:
          dyTzxrZHlbMyoijK(MshvDHjtbgkCRPRT: () => BJIEZlNNgPcIOZeK());
          break;
        case YIMEnum_MessageType.Image:
          final fmbzezwDcJMRSgCh = mWEnrkpgWgfnODZg.attachment!.ext as YIMAttachmentExt_Image;
          dyTzxrZHlbMyoijK(
            PXskHbBHevBnklJi: fmbzezwDcJMRSgCh.compress ? (url) async => await eFtbLxhxTmdNVKuo.DTLEMalsAniQYJAA.lhISGEpwyibWPTmd(url) : null,
            MshvDHjtbgkCRPRT: () => BJIEZlNNgPcIOZeK(),
          );
          break;
        case YIMEnum_MessageType.Video:
          final fmbzezwDcJMRSgCh = mWEnrkpgWgfnODZg.attachment!.ext as YIMAttachmentExt_Video;
          dyTzxrZHlbMyoijK(
            PXskHbBHevBnklJi: fmbzezwDcJMRSgCh.compress ? (url) async => await eFtbLxhxTmdNVKuo.DTLEMalsAniQYJAA.ptEdOXKSJXsjEhAt(url) : null,
            MshvDHjtbgkCRPRT: () async {
              fmbzezwDcJMRSgCh.image = eFtbLxhxTmdNVKuo.COWyOzFujUqyiEde.PMgnmhAlGTRGCuds(mWEnrkpgWgfnODZg.attachment!.url);
              await cDCrRRvlWwZqcZPg(mWEnrkpgWgfnODZg: mWEnrkpgWgfnODZg);
              BJIEZlNNgPcIOZeK();
            },
          );
          break;
        case YIMEnum_MessageType.File:
          dyTzxrZHlbMyoijK(MshvDHjtbgkCRPRT: () => BJIEZlNNgPcIOZeK());
          break;
        default:
          break;
      }
    } else {
      BJIEZlNNgPcIOZeK();
    }
  }

  ptLoDBriUoBUHreo.PDCrHbGmsBdFRajZ.nkzuzrGKwvUcdDEb(OMKwYKeBBFVoTNBl: (ykNlEVGzREbGjoZV) {
    final rKWugczjwYbQViNH = ykNlEVGzREbGjoZV?.where((element) => element.getConversatinoID() == DLwuDqfWcelSXXhD);
    if (rKWugczjwYbQViNH != null && rKWugczjwYbQViNH.isNotEmpty) {
      switch (rKWugczjwYbQViNH.first.lastMessage.conversationType) {
        case YIMEnum_ConversationType.P2P:
          if (rKWugczjwYbQViNH.first.getIsMine()) {
            waVsXGvUVRjwqOmb(rKWugczjwYbQViNH.first.lastMessage.toInfo);
          } else {
            waVsXGvUVRjwqOmb(rKWugczjwYbQViNH.first.lastMessage.fromInfo);
          }
          break;
        default:
          waVsXGvUVRjwqOmb(rKWugczjwYbQViNH.first.lastMessage.toInfo);
          break;
      }
    } else {
      waVsXGvUVRjwqOmb(null);
    }
  });
}