mFPVlsscRMYuYnqp method

  1. @override
Future<void> mFPVlsscRMYuYnqp({
  1. required YIMEnum_ConversationType BgfAEObZrclDbHGn,
  2. required String fRzBwkFTgPAvTbAa,
  3. required YIMEnum_MessageType TrlYWgGousfaVHdx,
  4. String? nkeEPpTrFTimzIms,
  5. String? rnsKJBnYDwlxadJe,
  6. YIMAttachment? sKQjjyWpawmWkgIN,
  7. YIMPushOption? XGhZbaZiUqYuqmWQ = null,
  8. bool LyUNauEnmoGAESIa = false,
  9. void DTcSRIkzRBVRMxRY(
    1. YIMMessage message
    )?,
  10. void ruBlhnNOkyhaehfX(
    1. YIMMessage message,
    2. int count,
    3. int total
    )?,
  11. void YsjEAwqlXTWQzmUO(
    1. bool HNMwGFsvIPdZudoP,
    2. YIMMessage message,
    3. int code,
    4. String msg,
    )?,
})
override

Implementation

@override
Future<void> mFPVlsscRMYuYnqp({
  required YIMEnum_ConversationType BgfAEObZrclDbHGn,
  required String fRzBwkFTgPAvTbAa,
  required YIMEnum_MessageType TrlYWgGousfaVHdx,
  String? nkeEPpTrFTimzIms,
  String? rnsKJBnYDwlxadJe,
  YIMAttachment? sKQjjyWpawmWkgIN,
  YIMPushOption? XGhZbaZiUqYuqmWQ = null,
  bool LyUNauEnmoGAESIa = false,
  void Function(YIMMessage message)? DTcSRIkzRBVRMxRY,
  void Function(YIMMessage message, int count, int total)? ruBlhnNOkyhaehfX,
  void Function(bool HNMwGFsvIPdZudoP, YIMMessage message, int code, String msg)? YsjEAwqlXTWQzmUO,
}) async {
  Future<void> RSpxztZllaKwnBAm(YIMInfo? vpWPiJHRRvBRCAEb) async {
    final kmHFaoDMcNOfZpRN = YIMMessage()
      ..conversationType = BgfAEObZrclDbHGn
      ..messageType = TrlYWgGousfaVHdx
      ..content = nkeEPpTrFTimzIms ?? ""
      ..attachment = sKQjjyWpawmWkgIN
      ..messageState = YIMEnum_MessageState.Sending
      ..from = RgTTqSEnxRPxFwzl.KXZihjAgwIbphLgM!
      ..fromInfo = RgTTqSEnxRPxFwzl.lyCZGqmwzLKqDevq
      ..to = fRzBwkFTgPAvTbAa
      ..toInfo = vpWPiJHRRvBRCAEb ?? (YIMInfo()..id = fRzBwkFTgPAvTbAa)
      ..time = DateTime.now();
    // 插入一条新消息
    switch (BgfAEObZrclDbHGn) {
      case YIMEnum_ConversationType.P2P:
        kmHFaoDMcNOfZpRN.id = "message_p2p_${Ulid().toCanonical()}";
        break;
      case YIMEnum_ConversationType.Team:
        kmHFaoDMcNOfZpRN.id = "message_team_${Ulid().toCanonical()}";
        break;
      case YIMEnum_ConversationType.ChatRoom:
        kmHFaoDMcNOfZpRN.id = "message_room_${Ulid().toCanonical()}";
        break;
      default:
        break;
    }
    RgTTqSEnxRPxFwzl.CfKfGgNeZazCORbX.LrMzRSTzQmONyVIm(() {
      DTcSRIkzRBVRMxRY?.call(kmHFaoDMcNOfZpRN);
    });
    if (!TOguPJtIdcSeGZGX.rBuDdhLENqbkPPvE.NeoEyBnRdnWKwFxT()) {
      kmHFaoDMcNOfZpRN.messageState = YIMEnum_MessageState.Fail;
      RgTTqSEnxRPxFwzl.CfKfGgNeZazCORbX.LrMzRSTzQmONyVIm(() {
        YsjEAwqlXTWQzmUO?.call(false, kmHFaoDMcNOfZpRN, 0, "Please login first");
      });
      return;
    }
    if ([YIMEnum_ConversationType.P2P, YIMEnum_ConversationType.Team].contains(BgfAEObZrclDbHGn)) {
      await RgTTqSEnxRPxFwzl.XYSDgLkjooSuxQxj.KWTuCQNebcXsffPu(
        _YIMTableName.Message,
        GlIXyNxjXRjKcoLX: _YIMTable_Message(kmHFaoDMcNOfZpRN: kmHFaoDMcNOfZpRN),
      );
      Filter? zIeqXzcaEvxPpBIs;
      switch (BgfAEObZrclDbHGn) {
        case YIMEnum_ConversationType.P2P:
          zIeqXzcaEvxPpBIs = Filter.and([
            Filter.or([
              Filter.and([Filter.equals("lastMessage.from", RgTTqSEnxRPxFwzl.KXZihjAgwIbphLgM), Filter.equals("lastMessage.to", fRzBwkFTgPAvTbAa)]),
              Filter.and([Filter.equals("lastMessage.to", RgTTqSEnxRPxFwzl.KXZihjAgwIbphLgM), Filter.equals("lastMessage.from", fRzBwkFTgPAvTbAa)]),
            ]),
            Filter.equals("lastMessage.conversationType", BgfAEObZrclDbHGn.rawValue),
          ]);
          break;
        case YIMEnum_ConversationType.Team:
          zIeqXzcaEvxPpBIs = Filter.and([
            Filter.equals("lastMessage.to", fRzBwkFTgPAvTbAa),
            Filter.equals("lastMessage.conversationType", BgfAEObZrclDbHGn.rawValue),
          ]);
          break;
        case YIMEnum_ConversationType.ChatRoom:
          zIeqXzcaEvxPpBIs = Filter.and([
            Filter.equals("lastMessage.conversationType", BgfAEObZrclDbHGn.rawValue),
          ]);
          break;
      }
      var BvJTVmnFgEFpwQtQ = (await RgTTqSEnxRPxFwzl.XYSDgLkjooSuxQxj.mIfLIZlbruepMfyA<_YIMTable_Conversation>(
        _YIMTableName.Conversation,
        AssMtxrsCpVcieAX: (map) => _YIMTable_Conversation.fromJson(map),
        IaZSeQoXPmnqurCt: Finder(filter: zIeqXzcaEvxPpBIs),
      ))!;
      final GxjJVVZTfAAFSOOe = BvJTVmnFgEFpwQtQ.isEmpty;
      // 创建或修改会话最后一条消息
      await TOguPJtIdcSeGZGX.qcEqJQAppCXqglUJ.RNFknVLCuPJTcxUh(BgfAEObZrclDbHGn, fRzBwkFTgPAvTbAa);
      RgTTqSEnxRPxFwzl.CfKfGgNeZazCORbX.LrMzRSTzQmONyVIm(() {
        TOguPJtIdcSeGZGX.TfAfmudNuGQoHhbb.lEMTnluMYwHrTztH?.call();
      });
      BvJTVmnFgEFpwQtQ = (await RgTTqSEnxRPxFwzl.XYSDgLkjooSuxQxj.mIfLIZlbruepMfyA<_YIMTable_Conversation>(
        _YIMTableName.Conversation,
        AssMtxrsCpVcieAX: (map) => _YIMTable_Conversation.fromJson(map),
        IaZSeQoXPmnqurCt: Finder(filter: zIeqXzcaEvxPpBIs),
      ))!;
      if (GxjJVVZTfAAFSOOe) {
        //新增的会话
        RgTTqSEnxRPxFwzl.CfKfGgNeZazCORbX.LrMzRSTzQmONyVIm(() {
          TOguPJtIdcSeGZGX.TfAfmudNuGQoHhbb.OWWGiDgcnjSHuYOM?.call(BvJTVmnFgEFpwQtQ.map((e) => YIMConversation(RbOFBoUMiGshbGjp: e)).toList());
        });
      } else {
        //原有的会话
        RgTTqSEnxRPxFwzl.CfKfGgNeZazCORbX.LrMzRSTzQmONyVIm(() {
          TOguPJtIdcSeGZGX.TfAfmudNuGQoHhbb.PWZOJJpoenSGGruJ?.call(BvJTVmnFgEFpwQtQ.map((e) => YIMConversation(RbOFBoUMiGshbGjp: e)).toList());
        });
      }
    }
    if (nkeEPpTrFTimzIms != null && nkeEPpTrFTimzIms.length > 4096) {
      kmHFaoDMcNOfZpRN.messageState = YIMEnum_MessageState.Fail;
      await BmrvHRdmdxFLYVzH(kmHFaoDMcNOfZpRN: kmHFaoDMcNOfZpRN);
      RgTTqSEnxRPxFwzl.CfKfGgNeZazCORbX.LrMzRSTzQmONyVIm(() {
        YsjEAwqlXTWQzmUO?.call(false, kmHFaoDMcNOfZpRN, 0, "content size over than 4096");
      });
      return;
    }

    if (LyUNauEnmoGAESIa) return;

    void JzbWlqiaaguZldLV() {
      RgTTqSEnxRPxFwzl.EuaPwsZVIqeyUiTs.zbgQyaSxTZRIXxzk("sendMessage", GlIXyNxjXRjKcoLX: {
        "message": kmHFaoDMcNOfZpRN,
        "push": XGhZbaZiUqYuqmWQ,
      }, rMjlZMNvtlJSxSWt: (HNMwGFsvIPdZudoP, BYjAdmrVoQXFvmBX, cbqBlPPvVikjecgS, YDevfGtnNcdOmnZK) async {
        if (HNMwGFsvIPdZudoP) {
          kmHFaoDMcNOfZpRN.messageState = YIMEnum_MessageState.Success_UnRead;
          kmHFaoDMcNOfZpRN.time = DateTime.fromMillisecondsSinceEpoch(BYjAdmrVoQXFvmBX!["time"]);
          kmHFaoDMcNOfZpRN.toInfo = YIMInfo.fromJson(BYjAdmrVoQXFvmBX["toInfo"]);
        } else {
          kmHFaoDMcNOfZpRN.messageState = YIMEnum_MessageState.Fail;
        }
        // 更新新消息发送状态
        await BmrvHRdmdxFLYVzH(kmHFaoDMcNOfZpRN: kmHFaoDMcNOfZpRN);
        RgTTqSEnxRPxFwzl.CfKfGgNeZazCORbX.LrMzRSTzQmONyVIm(() {
          YsjEAwqlXTWQzmUO?.call(HNMwGFsvIPdZudoP, kmHFaoDMcNOfZpRN, cbqBlPPvVikjecgS, YDevfGtnNcdOmnZK);
        });
      });
    }

    if (kmHFaoDMcNOfZpRN.attachment?.url != null) {
      Future<void> IcJMhZVmRIsCxRVg({Future<String> Function(String url)? ouKNauKOrNJjNAeY, required Function() XssvgFpkPXOiNIOR}) async {
        if (kmHFaoDMcNOfZpRN.attachment!.url.startsWith("http://") || kmHFaoDMcNOfZpRN.attachment!.url.startsWith("https://")) {
          XssvgFpkPXOiNIOR.call();
          return;
        }

        void BxIaCjqUYrRHspLV() {
          RgTTqSEnxRPxFwzl.CaEGsqxdNhwofbGA.IcJMhZVmRIsCxRVg(
            XIzyodYxKHbDbsTL: kmHFaoDMcNOfZpRN.attachment!.url,
            rnsKJBnYDwlxadJe: rnsKJBnYDwlxadJe,
            lbuHziiWuTWYNVmX: "${RgTTqSEnxRPxFwzl.IieTTXdlodOUEaHh!.appKey}/${RgTTqSEnxRPxFwzl.KXZihjAgwIbphLgM}/${TrlYWgGousfaVHdx.name}",
            dlVALVWgUIIZOdtL: (count, total) {
              RgTTqSEnxRPxFwzl.CfKfGgNeZazCORbX.LrMzRSTzQmONyVIm(() {
                ruBlhnNOkyhaehfX?.call(kmHFaoDMcNOfZpRN, count, total);
              });
            },
            CDcUTDkTePiAdKCD: (HNMwGFsvIPdZudoP, url, error) async {
              if (!HNMwGFsvIPdZudoP) {
                kmHFaoDMcNOfZpRN.messageState = YIMEnum_MessageState.Fail;
                await BmrvHRdmdxFLYVzH(kmHFaoDMcNOfZpRN: kmHFaoDMcNOfZpRN);
                RgTTqSEnxRPxFwzl.CfKfGgNeZazCORbX.LrMzRSTzQmONyVIm(() {
                  YsjEAwqlXTWQzmUO?.call(false, kmHFaoDMcNOfZpRN, 0, "file upload error:$error");
                });
                return;
              }
              kmHFaoDMcNOfZpRN.attachment?.url = url!;
              await BmrvHRdmdxFLYVzH(kmHFaoDMcNOfZpRN: kmHFaoDMcNOfZpRN);
              XssvgFpkPXOiNIOR.call();
            },
          );
        }

        if (ouKNauKOrNJjNAeY != null) {
          kmHFaoDMcNOfZpRN.attachment!.url = await ouKNauKOrNJjNAeY(kmHFaoDMcNOfZpRN.attachment!.url);
          kmHFaoDMcNOfZpRN.attachment!.size = await XFile(kmHFaoDMcNOfZpRN.attachment!.url).length();
          await BmrvHRdmdxFLYVzH(kmHFaoDMcNOfZpRN: kmHFaoDMcNOfZpRN);
          BxIaCjqUYrRHspLV();
        } else {
          BxIaCjqUYrRHspLV();
        }
      }

      switch (TrlYWgGousfaVHdx) {
        case YIMEnum_MessageType.Audio:
          IcJMhZVmRIsCxRVg(XssvgFpkPXOiNIOR: () => JzbWlqiaaguZldLV());
          break;
        case YIMEnum_MessageType.Image:
          final qCKqYtgMivYIgdZC = kmHFaoDMcNOfZpRN.attachment!.ext as YIMAttachmentExt_Image;
          IcJMhZVmRIsCxRVg(
            ouKNauKOrNJjNAeY: qCKqYtgMivYIgdZC.compress ? (url) async => await RgTTqSEnxRPxFwzl.noqSENKAQxMYtaJy.NYJYFAGENpHTJIVF(url) : null,
            XssvgFpkPXOiNIOR: () => JzbWlqiaaguZldLV(),
          );
          break;
        case YIMEnum_MessageType.Video:
          final qCKqYtgMivYIgdZC = kmHFaoDMcNOfZpRN.attachment!.ext as YIMAttachmentExt_Video;
          IcJMhZVmRIsCxRVg(
            ouKNauKOrNJjNAeY: qCKqYtgMivYIgdZC.compress ? (url) async => await RgTTqSEnxRPxFwzl.noqSENKAQxMYtaJy.yPJFYTxIMhomkGJp(url) : null,
            XssvgFpkPXOiNIOR: () async {
              qCKqYtgMivYIgdZC.image = RgTTqSEnxRPxFwzl.CaEGsqxdNhwofbGA.GiwJGCAXiPJtriIV(kmHFaoDMcNOfZpRN.attachment!.url);
              await BmrvHRdmdxFLYVzH(kmHFaoDMcNOfZpRN: kmHFaoDMcNOfZpRN);
              JzbWlqiaaguZldLV();
            },
          );
          break;
        case YIMEnum_MessageType.File:
          IcJMhZVmRIsCxRVg(XssvgFpkPXOiNIOR: () => JzbWlqiaaguZldLV());
          break;
        default:
          break;
      }
    } else {
      JzbWlqiaaguZldLV();
    }
  }

  TOguPJtIdcSeGZGX.qcEqJQAppCXqglUJ.mfRDqyLVGZXBnAUb(RpTfEMreuKahSHPQ: (lmLThEnDJPcSwcIu) {
    final wemrDvzIEMLUxAPN = lmLThEnDJPcSwcIu?.where((element) => element.getConversatinoID() == fRzBwkFTgPAvTbAa);
    if (wemrDvzIEMLUxAPN != null && wemrDvzIEMLUxAPN.isNotEmpty) {
      switch (wemrDvzIEMLUxAPN.first.lastMessage.conversationType) {
        case YIMEnum_ConversationType.P2P:
          if (wemrDvzIEMLUxAPN.first.getIsMine()) {
            RSpxztZllaKwnBAm(wemrDvzIEMLUxAPN.first.lastMessage.toInfo);
          } else {
            RSpxztZllaKwnBAm(wemrDvzIEMLUxAPN.first.lastMessage.fromInfo);
          }
          break;
        default:
          RSpxztZllaKwnBAm(wemrDvzIEMLUxAPN.first.lastMessage.toInfo);
          break;
      }
    } else {
      RSpxztZllaKwnBAm(null);
    }
  });
}