GqoEHhpoCHioBjeX method

  1. @override
Future<void> GqoEHhpoCHioBjeX({
  1. required YIMEnum_ConversationType TMhjsByyUuXcscSR,
  2. required String APZrxmPSOMdFqrhE,
  3. required YIMEnum_MessageType hhhoJoDMDtRYJkyz,
  4. String? pWNMGXBBcLdiMDHi,
  5. String? jGVNVbwqSBVVFZbB,
  6. YIMAttachment? pSxxqGuiMDhtCqDl,
  7. YIMPushOption? vIxExKsyXmvzKfNM = null,
  8. bool qbVSXxdVhiVIymnB = false,
  9. void ecAHJiMeypETVSxO(
    1. YIMMessage message
    )?,
  10. void uBjCVJTPLCEQLFbc(
    1. YIMMessage message,
    2. int count,
    3. int total
    )?,
  11. void hQEmfmSHWbVnfOjU(
    1. bool BYQhAOcHRUuLSvkg,
    2. YIMMessage message,
    3. int code,
    4. String msg,
    )?,
})
override

Implementation

@override
Future<void> GqoEHhpoCHioBjeX({
  required YIMEnum_ConversationType TMhjsByyUuXcscSR,
  required String APZrxmPSOMdFqrhE,
  required YIMEnum_MessageType hhhoJoDMDtRYJkyz,
  String? pWNMGXBBcLdiMDHi,
  String? jGVNVbwqSBVVFZbB,
  YIMAttachment? pSxxqGuiMDhtCqDl,
  YIMPushOption? vIxExKsyXmvzKfNM = null,
  bool qbVSXxdVhiVIymnB = false,
  void Function(YIMMessage message)? ecAHJiMeypETVSxO,
  void Function(YIMMessage message, int count, int total)? uBjCVJTPLCEQLFbc,
  void Function(bool BYQhAOcHRUuLSvkg, YIMMessage message, int code, String msg)? hQEmfmSHWbVnfOjU,
}) async {
  Future<void> pfFZQjlgsGKqhWSK(YIMInfo? nJJoiJJmhKhkIEpJ) async {
    final LzYZgypaJvlVWNba = YIMMessage()
      ..conversationType = TMhjsByyUuXcscSR
      ..messageType = hhhoJoDMDtRYJkyz
      ..content = pWNMGXBBcLdiMDHi ?? ""
      ..attachment = pSxxqGuiMDhtCqDl
      ..messageState = YIMEnum_MessageState.Sending
      ..from = LLTqoNwdULMbTCMh.IemXKsVNcGUWeUgJ!
      ..fromInfo = LLTqoNwdULMbTCMh.jgLTIuyajFGofHiY
      ..to = APZrxmPSOMdFqrhE
      ..toInfo = nJJoiJJmhKhkIEpJ ?? (YIMInfo()..id = APZrxmPSOMdFqrhE)
      ..time = DateTime.now();
    // 插入一条新消息
    switch (TMhjsByyUuXcscSR) {
      case YIMEnum_ConversationType.P2P:
        LzYZgypaJvlVWNba.id = "message_p2p_${Ulid().toCanonical()}";
        break;
      case YIMEnum_ConversationType.Team:
        LzYZgypaJvlVWNba.id = "message_team_${Ulid().toCanonical()}";
        break;
      case YIMEnum_ConversationType.ChatRoom:
        LzYZgypaJvlVWNba.id = "message_room_${Ulid().toCanonical()}";
        break;
      default:
        break;
    }
    LLTqoNwdULMbTCMh.DwbTkDIljwhCkWxz.KuzgoGyXoqDTCcrr(() {
      ecAHJiMeypETVSxO?.call(LzYZgypaJvlVWNba);
    });
    if (!UFWAGwHDnWMkeYVR.EPwtIwAAPGFWUsid.WPtNMuRLJwMSwfMW()) {
      LzYZgypaJvlVWNba.messageState = YIMEnum_MessageState.Fail;
      LLTqoNwdULMbTCMh.DwbTkDIljwhCkWxz.KuzgoGyXoqDTCcrr(() {
        hQEmfmSHWbVnfOjU?.call(false, LzYZgypaJvlVWNba, 0, "Please login first");
      });
      return;
    }
    if ([YIMEnum_ConversationType.P2P, YIMEnum_ConversationType.Team].contains(TMhjsByyUuXcscSR)) {
      await LLTqoNwdULMbTCMh.fWmDEyWlYlSzIgZn.vINnFFQGnIJPZAIj(
        _YIMTableName.Message,
        mCBPWMvoUJveFdlV: _YIMTable_Message(LzYZgypaJvlVWNba: LzYZgypaJvlVWNba),
      );
      Filter? RyDvVcXmnThgbKWY;
      switch (TMhjsByyUuXcscSR) {
        case YIMEnum_ConversationType.P2P:
          RyDvVcXmnThgbKWY = Filter.and([
            Filter.or([
              Filter.and([Filter.equals("lastMessage.from", LLTqoNwdULMbTCMh.IemXKsVNcGUWeUgJ), Filter.equals("lastMessage.to", APZrxmPSOMdFqrhE)]),
              Filter.and([Filter.equals("lastMessage.to", LLTqoNwdULMbTCMh.IemXKsVNcGUWeUgJ), Filter.equals("lastMessage.from", APZrxmPSOMdFqrhE)]),
            ]),
            Filter.equals("lastMessage.conversationType", TMhjsByyUuXcscSR.rawValue),
          ]);
          break;
        case YIMEnum_ConversationType.Team:
          RyDvVcXmnThgbKWY = Filter.and([
            Filter.equals("lastMessage.to", APZrxmPSOMdFqrhE),
            Filter.equals("lastMessage.conversationType", TMhjsByyUuXcscSR.rawValue),
          ]);
          break;
        case YIMEnum_ConversationType.ChatRoom:
          RyDvVcXmnThgbKWY = Filter.and([
            Filter.equals("lastMessage.conversationType", TMhjsByyUuXcscSR.rawValue),
          ]);
          break;
      }
      var ksHlUMCxsMwUBrvE = (await LLTqoNwdULMbTCMh.fWmDEyWlYlSzIgZn.JHzMkZIpOnZbQRwO<_YIMTable_Conversation>(
        _YIMTableName.Conversation,
        KgQmNjCadrqeQjJE: (map) => _YIMTable_Conversation.fromJson(map),
        RaxVrYLTOIwElzzS: Finder(filter: RyDvVcXmnThgbKWY),
      ))!;
      final drfbZZKgjrUXPQYW = ksHlUMCxsMwUBrvE.isEmpty;
      // 创建或修改会话最后一条消息
      await UFWAGwHDnWMkeYVR.uzkozbjuyYvNIrYu.wMubTEqkFbXrseOf(TMhjsByyUuXcscSR, APZrxmPSOMdFqrhE);
      LLTqoNwdULMbTCMh.DwbTkDIljwhCkWxz.KuzgoGyXoqDTCcrr(() {
        UFWAGwHDnWMkeYVR.drSbAyhOZTsmWGTg.wFocFAyakMKTXEwq?.call();
      });
      ksHlUMCxsMwUBrvE = (await LLTqoNwdULMbTCMh.fWmDEyWlYlSzIgZn.JHzMkZIpOnZbQRwO<_YIMTable_Conversation>(
        _YIMTableName.Conversation,
        KgQmNjCadrqeQjJE: (map) => _YIMTable_Conversation.fromJson(map),
        RaxVrYLTOIwElzzS: Finder(filter: RyDvVcXmnThgbKWY),
      ))!;
      if (drfbZZKgjrUXPQYW) {
        //新增的会话
        LLTqoNwdULMbTCMh.DwbTkDIljwhCkWxz.KuzgoGyXoqDTCcrr(() {
          UFWAGwHDnWMkeYVR.drSbAyhOZTsmWGTg.fwpmsLrZmnkZYHpn?.call(ksHlUMCxsMwUBrvE.map((e) => YIMConversation(tmmBlSfEBRBRYXTr: e)).toList());
        });
      } else {
        //原有的会话
        LLTqoNwdULMbTCMh.DwbTkDIljwhCkWxz.KuzgoGyXoqDTCcrr(() {
          UFWAGwHDnWMkeYVR.drSbAyhOZTsmWGTg.xwwJXzdAXRAijlBN?.call(ksHlUMCxsMwUBrvE.map((e) => YIMConversation(tmmBlSfEBRBRYXTr: e)).toList());
        });
      }
    }
    if (pWNMGXBBcLdiMDHi != null && pWNMGXBBcLdiMDHi.length > 4096) {
      LzYZgypaJvlVWNba.messageState = YIMEnum_MessageState.Fail;
      await bBCnNVNpEtaDPQgS(LzYZgypaJvlVWNba: LzYZgypaJvlVWNba);
      LLTqoNwdULMbTCMh.DwbTkDIljwhCkWxz.KuzgoGyXoqDTCcrr(() {
        hQEmfmSHWbVnfOjU?.call(false, LzYZgypaJvlVWNba, 0, "content size over than 4096");
      });
      return;
    }

    if (qbVSXxdVhiVIymnB) return;

    void UserBYFTdAGggcmI() {
      LLTqoNwdULMbTCMh.rkgLYlaZYATBeHZH.sEnkoxXAwuAQuaxN("sendMessage", mCBPWMvoUJveFdlV: {
        "message": LzYZgypaJvlVWNba,
        "push": vIxExKsyXmvzKfNM,
      }, YDAPNnFGlbnwsGKD: (BYQhAOcHRUuLSvkg, IvMCaaSVIWcQArzH, oCgstdHjeFkEZJjg, cDeQIDiofjWaDrqG) async {
        if (BYQhAOcHRUuLSvkg) {
          LzYZgypaJvlVWNba.messageState = YIMEnum_MessageState.Success_UnRead;
          LzYZgypaJvlVWNba.time = DateTime.fromMillisecondsSinceEpoch(IvMCaaSVIWcQArzH!["time"]);
          LzYZgypaJvlVWNba.toInfo = YIMInfo.fromJson(IvMCaaSVIWcQArzH["toInfo"]);
        } else {
          LzYZgypaJvlVWNba.messageState = YIMEnum_MessageState.Fail;
        }
        // 更新新消息发送状态
        await bBCnNVNpEtaDPQgS(LzYZgypaJvlVWNba: LzYZgypaJvlVWNba);
        LLTqoNwdULMbTCMh.DwbTkDIljwhCkWxz.KuzgoGyXoqDTCcrr(() {
          hQEmfmSHWbVnfOjU?.call(BYQhAOcHRUuLSvkg, LzYZgypaJvlVWNba, oCgstdHjeFkEZJjg, cDeQIDiofjWaDrqG);
        });
      });
    }

    if (LzYZgypaJvlVWNba.attachment?.url != null) {
      Future<void> IYWvYPRSJekqCEEX({Future<String> Function(String url)? zoczGnjwqutbnEip, required Function() eZPLAeGIVykDAhie}) async {
        if (LzYZgypaJvlVWNba.attachment!.url.startsWith("http://") || LzYZgypaJvlVWNba.attachment!.url.startsWith("https://")) {
          eZPLAeGIVykDAhie.call();
          return;
        }

        void KBgfhjLoufvgvcyp() {
          LLTqoNwdULMbTCMh.vwIBJtuDcnHAfSXz.IYWvYPRSJekqCEEX(
            cTFtyhUyTjrxXhaB: LzYZgypaJvlVWNba.attachment!.url,
            jGVNVbwqSBVVFZbB: jGVNVbwqSBVVFZbB,
            HgJpocucwKHqnYGe: "${LLTqoNwdULMbTCMh.yWiKPzRWuKnMOmDg!.appKey}/${LLTqoNwdULMbTCMh.IemXKsVNcGUWeUgJ}/${hhhoJoDMDtRYJkyz.name}",
            NwETUbuRJduoSsiH: (count, total) {
              LLTqoNwdULMbTCMh.DwbTkDIljwhCkWxz.KuzgoGyXoqDTCcrr(() {
                uBjCVJTPLCEQLFbc?.call(LzYZgypaJvlVWNba, count, total);
              });
            },
            tYWHjgcGPgFRkKIM: (BYQhAOcHRUuLSvkg, url, error) async {
              if (!BYQhAOcHRUuLSvkg) {
                LzYZgypaJvlVWNba.messageState = YIMEnum_MessageState.Fail;
                await bBCnNVNpEtaDPQgS(LzYZgypaJvlVWNba: LzYZgypaJvlVWNba);
                LLTqoNwdULMbTCMh.DwbTkDIljwhCkWxz.KuzgoGyXoqDTCcrr(() {
                  hQEmfmSHWbVnfOjU?.call(false, LzYZgypaJvlVWNba, 0, "file upload error:$error");
                });
                return;
              }
              LzYZgypaJvlVWNba.attachment?.url = url!;
              await bBCnNVNpEtaDPQgS(LzYZgypaJvlVWNba: LzYZgypaJvlVWNba);
              eZPLAeGIVykDAhie.call();
            },
          );
        }

        if (zoczGnjwqutbnEip != null) {
          LzYZgypaJvlVWNba.attachment!.url = await zoczGnjwqutbnEip(LzYZgypaJvlVWNba.attachment!.url);
          LzYZgypaJvlVWNba.attachment!.size = await XFile(LzYZgypaJvlVWNba.attachment!.url).length();
          await bBCnNVNpEtaDPQgS(LzYZgypaJvlVWNba: LzYZgypaJvlVWNba);
          KBgfhjLoufvgvcyp();
        } else {
          KBgfhjLoufvgvcyp();
        }
      }

      switch (hhhoJoDMDtRYJkyz) {
        case YIMEnum_MessageType.Audio:
          IYWvYPRSJekqCEEX(eZPLAeGIVykDAhie: () => UserBYFTdAGggcmI());
          break;
        case YIMEnum_MessageType.Image:
          final SNxzUrjofxRyIUqR = LzYZgypaJvlVWNba.attachment!.ext as YIMAttachmentExt_Image;
          IYWvYPRSJekqCEEX(
            zoczGnjwqutbnEip: SNxzUrjofxRyIUqR.compress ? (url) async => await LLTqoNwdULMbTCMh.mZmeuZIRbeugluVu.QStDVRtVSlvyuShq(url) : null,
            eZPLAeGIVykDAhie: () => UserBYFTdAGggcmI(),
          );
          break;
        case YIMEnum_MessageType.Video:
          final SNxzUrjofxRyIUqR = LzYZgypaJvlVWNba.attachment!.ext as YIMAttachmentExt_Video;
          IYWvYPRSJekqCEEX(
            zoczGnjwqutbnEip: SNxzUrjofxRyIUqR.compress ? (url) async => await LLTqoNwdULMbTCMh.mZmeuZIRbeugluVu.bHAxdrIMufRrrStv(url) : null,
            eZPLAeGIVykDAhie: () async {
              SNxzUrjofxRyIUqR.image = LLTqoNwdULMbTCMh.vwIBJtuDcnHAfSXz.rtBDGKESdNjhwXml(LzYZgypaJvlVWNba.attachment!.url);
              await bBCnNVNpEtaDPQgS(LzYZgypaJvlVWNba: LzYZgypaJvlVWNba);
              UserBYFTdAGggcmI();
            },
          );
          break;
        case YIMEnum_MessageType.File:
          IYWvYPRSJekqCEEX(eZPLAeGIVykDAhie: () => UserBYFTdAGggcmI());
          break;
        default:
          break;
      }
    } else {
      UserBYFTdAGggcmI();
    }
  }

  UFWAGwHDnWMkeYVR.uzkozbjuyYvNIrYu.ajTLACjgidEMYssN(WeQhHiCFWrXRykFU: (uPYgvxFwWZJlLsIn) {
    final ELXjQlSjetoxvWEy = uPYgvxFwWZJlLsIn?.where((element) => element.getConversatinoID() == APZrxmPSOMdFqrhE);
    if (ELXjQlSjetoxvWEy != null && ELXjQlSjetoxvWEy.isNotEmpty) {
      switch (ELXjQlSjetoxvWEy.first.lastMessage.conversationType) {
        case YIMEnum_ConversationType.P2P:
          if (ELXjQlSjetoxvWEy.first.getIsMine()) {
            pfFZQjlgsGKqhWSK(ELXjQlSjetoxvWEy.first.lastMessage.toInfo);
          } else {
            pfFZQjlgsGKqhWSK(ELXjQlSjetoxvWEy.first.lastMessage.fromInfo);
          }
          break;
        default:
          pfFZQjlgsGKqhWSK(ELXjQlSjetoxvWEy.first.lastMessage.toInfo);
          break;
      }
    } else {
      pfFZQjlgsGKqhWSK(null);
    }
  });
}