ODoEXvBcmcXHcGxA method

  1. @override
Future<void> ODoEXvBcmcXHcGxA({
  1. required YIMEnum_ConversationType FhjdxBSxQMYGyidK,
  2. required String vINCQVmsnelWAFiE,
  3. required YIMEnum_MessageType emyCfpbAqaBRvied,
  4. String? jyGrjvexFspFYkTx,
  5. String? MZYYCseyHDIiPuZX,
  6. YIMAttachment? GlTawvIobfbIZrok,
  7. YIMPushOption? uVAXjPfKCzuYRoJu = null,
  8. bool jGozHRRUYjUFvVCL = false,
  9. void cXOfRbhlCgpfZxZG(
    1. YIMMessage message
    )?,
  10. void vRDFbOUHPLiVRNZO(
    1. YIMMessage message,
    2. int count,
    3. int total
    )?,
  11. void kQwsXzoVfyDQSSHC(
    1. bool vlIVOpmRlppDVoLJ,
    2. YIMMessage message,
    3. int code,
    4. String msg,
    )?,
})
override

Implementation

@override
Future<void> ODoEXvBcmcXHcGxA({
  required YIMEnum_ConversationType FhjdxBSxQMYGyidK,
  required String vINCQVmsnelWAFiE,
  required YIMEnum_MessageType emyCfpbAqaBRvied,
  String? jyGrjvexFspFYkTx,
  String? MZYYCseyHDIiPuZX,
  YIMAttachment? GlTawvIobfbIZrok,
  YIMPushOption? uVAXjPfKCzuYRoJu = null,
  bool jGozHRRUYjUFvVCL = false,
  void Function(YIMMessage message)? cXOfRbhlCgpfZxZG,
  void Function(YIMMessage message, int count, int total)? vRDFbOUHPLiVRNZO,
  void Function(bool vlIVOpmRlppDVoLJ, YIMMessage message, int code, String msg)? kQwsXzoVfyDQSSHC,
}) async {
  Future<void> jZuVKtWrfLkoNKiv(YIMInfo? hkosCDZlYEHgvwFc) async {
    final NouDniwlzyGmGpUJ = YIMMessage()
      ..conversationType = FhjdxBSxQMYGyidK
      ..messageType = emyCfpbAqaBRvied
      ..content = jyGrjvexFspFYkTx ?? ""
      ..attachment = GlTawvIobfbIZrok
      ..messageState = YIMEnum_MessageState.Sending
      ..from = pUedSqApqySLXfuk.HDRcNNpDAaYaKnho!
      ..fromInfo = pUedSqApqySLXfuk.LNoEFVterpfBmSay
      ..to = vINCQVmsnelWAFiE
      ..toInfo = hkosCDZlYEHgvwFc ?? (YIMInfo()..id = vINCQVmsnelWAFiE)
      ..time = DateTime.now();
    // 插入一条新消息
    switch (FhjdxBSxQMYGyidK) {
      case YIMEnum_ConversationType.P2P:
        NouDniwlzyGmGpUJ.id = "message_p2p_${Ulid().toCanonical()}";
        break;
      case YIMEnum_ConversationType.Team:
        NouDniwlzyGmGpUJ.id = "message_team_${Ulid().toCanonical()}";
        break;
      case YIMEnum_ConversationType.ChatRoom:
        NouDniwlzyGmGpUJ.id = "message_room_${Ulid().toCanonical()}";
        break;
      default:
        break;
    }
    pUedSqApqySLXfuk.UdAwLgllDinVqLkg.JraVUDkLNAsqCzWV(() {
      cXOfRbhlCgpfZxZG?.call(NouDniwlzyGmGpUJ);
    });
    if (!iDxDuKoCRjwSpSnP.lUBagJdrpVTUiLlL.nJlQLbYMmygXrVIu()) {
      NouDniwlzyGmGpUJ.messageState = YIMEnum_MessageState.Fail;
      pUedSqApqySLXfuk.UdAwLgllDinVqLkg.JraVUDkLNAsqCzWV(() {
        kQwsXzoVfyDQSSHC?.call(false, NouDniwlzyGmGpUJ, 0, "Please login first");
      });
      return;
    }
    if ([YIMEnum_ConversationType.P2P, YIMEnum_ConversationType.Team].contains(FhjdxBSxQMYGyidK)) {
      await pUedSqApqySLXfuk.ahWEMLhfSiuhBwFl.xHLoiYMIgKDYsInU(
        _YIMTableName.Message,
        rFbpbySHruxzmGYR: _YIMTable_Message(NouDniwlzyGmGpUJ: NouDniwlzyGmGpUJ),
      );
      Filter? PczaErAOrgmnlYTK;
      switch (FhjdxBSxQMYGyidK) {
        case YIMEnum_ConversationType.P2P:
          PczaErAOrgmnlYTK = Filter.and([
            Filter.or([
              Filter.and([Filter.equals("lastMessage.from", pUedSqApqySLXfuk.HDRcNNpDAaYaKnho), Filter.equals("lastMessage.to", vINCQVmsnelWAFiE)]),
              Filter.and([Filter.equals("lastMessage.to", pUedSqApqySLXfuk.HDRcNNpDAaYaKnho), Filter.equals("lastMessage.from", vINCQVmsnelWAFiE)]),
            ]),
            Filter.equals("lastMessage.conversationType", FhjdxBSxQMYGyidK.rawValue),
          ]);
          break;
        case YIMEnum_ConversationType.Team:
          PczaErAOrgmnlYTK = Filter.and([
            Filter.equals("lastMessage.to", vINCQVmsnelWAFiE),
            Filter.equals("lastMessage.conversationType", FhjdxBSxQMYGyidK.rawValue),
          ]);
          break;
        case YIMEnum_ConversationType.ChatRoom:
          PczaErAOrgmnlYTK = Filter.and([
            Filter.equals("lastMessage.conversationType", FhjdxBSxQMYGyidK.rawValue),
          ]);
          break;
      }
      var RJJZEVUaxDvrzUJv = (await pUedSqApqySLXfuk.ahWEMLhfSiuhBwFl.wanYqaCFigqxxdwW<_YIMTable_Conversation>(
        _YIMTableName.Conversation,
        BozapwVfDLDEsXet: (map) => _YIMTable_Conversation.fromJson(map),
        bNcvVipPUFFpNiXa: Finder(filter: PczaErAOrgmnlYTK),
      ))!;
      final eOjAveOTJaooLdQm = RJJZEVUaxDvrzUJv.isEmpty;
      // 创建或修改会话最后一条消息
      await iDxDuKoCRjwSpSnP.fzjbYoEllDvCcigm.VJhqgocOoZnovLIz(FhjdxBSxQMYGyidK, vINCQVmsnelWAFiE);
      pUedSqApqySLXfuk.UdAwLgllDinVqLkg.JraVUDkLNAsqCzWV(() {
        iDxDuKoCRjwSpSnP.tAlpmicvlJCqimjh.UuYFyMelxcIiuATS?.call();
      });
      RJJZEVUaxDvrzUJv = (await pUedSqApqySLXfuk.ahWEMLhfSiuhBwFl.wanYqaCFigqxxdwW<_YIMTable_Conversation>(
        _YIMTableName.Conversation,
        BozapwVfDLDEsXet: (map) => _YIMTable_Conversation.fromJson(map),
        bNcvVipPUFFpNiXa: Finder(filter: PczaErAOrgmnlYTK),
      ))!;
      if (eOjAveOTJaooLdQm) {
        //新增的会话
        pUedSqApqySLXfuk.UdAwLgllDinVqLkg.JraVUDkLNAsqCzWV(() {
          iDxDuKoCRjwSpSnP.tAlpmicvlJCqimjh.yjsVNFOgyFcFDUjI?.call(RJJZEVUaxDvrzUJv.map((e) => YIMConversation(OxbmHPoYuPTpcmgT: e)).toList());
        });
      } else {
        //原有的会话
        pUedSqApqySLXfuk.UdAwLgllDinVqLkg.JraVUDkLNAsqCzWV(() {
          iDxDuKoCRjwSpSnP.tAlpmicvlJCqimjh.WXBRvbiPvYYuBfEB?.call(RJJZEVUaxDvrzUJv.map((e) => YIMConversation(OxbmHPoYuPTpcmgT: e)).toList());
        });
      }
    }
    if (jyGrjvexFspFYkTx != null && jyGrjvexFspFYkTx.length > 4096) {
      NouDniwlzyGmGpUJ.messageState = YIMEnum_MessageState.Fail;
      await zVVTdvoPFePrERdF(NouDniwlzyGmGpUJ: NouDniwlzyGmGpUJ);
      pUedSqApqySLXfuk.UdAwLgllDinVqLkg.JraVUDkLNAsqCzWV(() {
        kQwsXzoVfyDQSSHC?.call(false, NouDniwlzyGmGpUJ, 0, "content size over than 4096");
      });
      return;
    }

    if (jGozHRRUYjUFvVCL) return;

    void ABPXZbmRenDDRcXg() {
      pUedSqApqySLXfuk.KpxKYjvUKTKwfqjk.kvxCwDBIcIBVbdEA("sendMessage", rFbpbySHruxzmGYR: {
        "message": NouDniwlzyGmGpUJ,
        "push": uVAXjPfKCzuYRoJu,
      }, iwKloQCTGRoPHvpN: (vlIVOpmRlppDVoLJ, hvZigxghgcRFFwdO, pvovyYaVxMwKNREX, PJqUrrwaWORPhMvl) async {
        if (vlIVOpmRlppDVoLJ) {
          NouDniwlzyGmGpUJ.messageState = YIMEnum_MessageState.Success_UnRead;
          NouDniwlzyGmGpUJ.time = DateTime.fromMillisecondsSinceEpoch(hvZigxghgcRFFwdO!["time"]);
          NouDniwlzyGmGpUJ.toInfo = YIMInfo.fromJson(hvZigxghgcRFFwdO["toInfo"]);
        } else {
          NouDniwlzyGmGpUJ.messageState = YIMEnum_MessageState.Fail;
        }
        // 更新新消息发送状态
        await zVVTdvoPFePrERdF(NouDniwlzyGmGpUJ: NouDniwlzyGmGpUJ);
        pUedSqApqySLXfuk.UdAwLgllDinVqLkg.JraVUDkLNAsqCzWV(() {
          kQwsXzoVfyDQSSHC?.call(vlIVOpmRlppDVoLJ, NouDniwlzyGmGpUJ, pvovyYaVxMwKNREX, PJqUrrwaWORPhMvl);
        });
      });
    }

    if (NouDniwlzyGmGpUJ.attachment?.url != null) {
      Future<void> WpPiwyrFNbddbiqA({Future<String> Function(String url)? XUgDAWGfRAyLdPMx, required Function() COvnnKXeTdapRQAk}) async {
        if (NouDniwlzyGmGpUJ.attachment!.url.startsWith("http://") || NouDniwlzyGmGpUJ.attachment!.url.startsWith("https://")) {
          COvnnKXeTdapRQAk.call();
          return;
        }

        void nJIvAufjKwnFOFod() {
          pUedSqApqySLXfuk.LkauoVbLzIsCeEvr.WpPiwyrFNbddbiqA(
            TtxoseDbzqRBFETL: NouDniwlzyGmGpUJ.attachment!.url,
            MZYYCseyHDIiPuZX: MZYYCseyHDIiPuZX,
            pJFvRHuIynkhwrYG: "${pUedSqApqySLXfuk.skXQQIaSsaiDhaLc!.appKey}/${pUedSqApqySLXfuk.HDRcNNpDAaYaKnho}/${emyCfpbAqaBRvied.name}",
            tJCFXtNxuYKjkxle: (count, total) {
              pUedSqApqySLXfuk.UdAwLgllDinVqLkg.JraVUDkLNAsqCzWV(() {
                vRDFbOUHPLiVRNZO?.call(NouDniwlzyGmGpUJ, count, total);
              });
            },
            tQjwMUpeRcXitaIP: (vlIVOpmRlppDVoLJ, url, error) async {
              if (!vlIVOpmRlppDVoLJ) {
                NouDniwlzyGmGpUJ.messageState = YIMEnum_MessageState.Fail;
                await zVVTdvoPFePrERdF(NouDniwlzyGmGpUJ: NouDniwlzyGmGpUJ);
                pUedSqApqySLXfuk.UdAwLgllDinVqLkg.JraVUDkLNAsqCzWV(() {
                  kQwsXzoVfyDQSSHC?.call(false, NouDniwlzyGmGpUJ, 0, "file upload error:$error");
                });
                return;
              }
              NouDniwlzyGmGpUJ.attachment?.url = url!;
              await zVVTdvoPFePrERdF(NouDniwlzyGmGpUJ: NouDniwlzyGmGpUJ);
              COvnnKXeTdapRQAk.call();
            },
          );
        }

        if (XUgDAWGfRAyLdPMx != null) {
          NouDniwlzyGmGpUJ.attachment!.url = await XUgDAWGfRAyLdPMx(NouDniwlzyGmGpUJ.attachment!.url);
          NouDniwlzyGmGpUJ.attachment!.size = await XFile(NouDniwlzyGmGpUJ.attachment!.url).length();
          await zVVTdvoPFePrERdF(NouDniwlzyGmGpUJ: NouDniwlzyGmGpUJ);
          nJIvAufjKwnFOFod();
        } else {
          nJIvAufjKwnFOFod();
        }
      }

      switch (emyCfpbAqaBRvied) {
        case YIMEnum_MessageType.Audio:
          WpPiwyrFNbddbiqA(COvnnKXeTdapRQAk: () => ABPXZbmRenDDRcXg());
          break;
        case YIMEnum_MessageType.Image:
          final MKnoWqBLNNfIvtjL = NouDniwlzyGmGpUJ.attachment!.ext as YIMAttachmentExt_Image;
          WpPiwyrFNbddbiqA(
            XUgDAWGfRAyLdPMx: MKnoWqBLNNfIvtjL.compress ? (url) async => await pUedSqApqySLXfuk.ZzkeZNuALKxgOeSn.dLpDLVopjvfaThxf(url) : null,
            COvnnKXeTdapRQAk: () => ABPXZbmRenDDRcXg(),
          );
          break;
        case YIMEnum_MessageType.Video:
          final MKnoWqBLNNfIvtjL = NouDniwlzyGmGpUJ.attachment!.ext as YIMAttachmentExt_Video;
          WpPiwyrFNbddbiqA(
            XUgDAWGfRAyLdPMx: MKnoWqBLNNfIvtjL.compress ? (url) async => await pUedSqApqySLXfuk.ZzkeZNuALKxgOeSn.FmDFsgrImFpkzKwq(url) : null,
            COvnnKXeTdapRQAk: () async {
              MKnoWqBLNNfIvtjL.image = pUedSqApqySLXfuk.LkauoVbLzIsCeEvr.ndYDniLbyosgbkCN(NouDniwlzyGmGpUJ.attachment!.url);
              await zVVTdvoPFePrERdF(NouDniwlzyGmGpUJ: NouDniwlzyGmGpUJ);
              ABPXZbmRenDDRcXg();
            },
          );
          break;
        case YIMEnum_MessageType.File:
          WpPiwyrFNbddbiqA(COvnnKXeTdapRQAk: () => ABPXZbmRenDDRcXg());
          break;
        default:
          break;
      }
    } else {
      ABPXZbmRenDDRcXg();
    }
  }

  iDxDuKoCRjwSpSnP.fzjbYoEllDvCcigm.eUSSMDZGAOtpUEYZ(fDsWzZmHzuvhjHYF: (soFwquLayEmGnujs) {
    final BrKTflrAMmxtyIhS = soFwquLayEmGnujs?.where((element) => element.getConversatinoID() == vINCQVmsnelWAFiE);
    if (BrKTflrAMmxtyIhS != null && BrKTflrAMmxtyIhS.isNotEmpty) {
      switch (BrKTflrAMmxtyIhS.first.lastMessage.conversationType) {
        case YIMEnum_ConversationType.P2P:
          if (BrKTflrAMmxtyIhS.first.getIsMine()) {
            jZuVKtWrfLkoNKiv(BrKTflrAMmxtyIhS.first.lastMessage.toInfo);
          } else {
            jZuVKtWrfLkoNKiv(BrKTflrAMmxtyIhS.first.lastMessage.fromInfo);
          }
          break;
        default:
          jZuVKtWrfLkoNKiv(BrKTflrAMmxtyIhS.first.lastMessage.toInfo);
          break;
      }
    } else {
      jZuVKtWrfLkoNKiv(null);
    }
  });
}