mYKaFYUjvYZOWuZB method

  1. @override
Future<void> mYKaFYUjvYZOWuZB({
  1. required YIMEnum_ConversationType TIVvnmucZCCCoXWZ,
  2. required String DdEJLInBukyevMKs,
  3. required YIMEnum_MessageType EiRjaLJyoekAXvfO,
  4. String? VNXtVBoZudfncesZ,
  5. String? UZjQPwKKBftipoNw,
  6. YIMAttachment? yAxgAMAldXwbyuHy,
  7. YIMPushOption? uHrDKqGhYwFfFjzt = null,
  8. bool eFLZtwaPtnBZJJFl = false,
  9. void oEwVYbdGNiYrQhbg(
    1. YIMMessage message
    )?,
  10. void WmGDNPHAWOMlPvEy(
    1. YIMMessage message,
    2. int count,
    3. int total
    )?,
  11. void dNSrphLqsPPgGsKF(
    1. bool IWxelvVBXdhLiYGw,
    2. YIMMessage message,
    3. int code,
    4. String msg,
    )?,
})
override

Implementation

@override
Future<void> mYKaFYUjvYZOWuZB({
  required YIMEnum_ConversationType TIVvnmucZCCCoXWZ,
  required String DdEJLInBukyevMKs,
  required YIMEnum_MessageType EiRjaLJyoekAXvfO,
  String? VNXtVBoZudfncesZ,
  String? UZjQPwKKBftipoNw,
  YIMAttachment? yAxgAMAldXwbyuHy,
  YIMPushOption? uHrDKqGhYwFfFjzt = null,
  bool eFLZtwaPtnBZJJFl = false,
  void Function(YIMMessage message)? oEwVYbdGNiYrQhbg,
  void Function(YIMMessage message, int count, int total)? WmGDNPHAWOMlPvEy,
  void Function(bool IWxelvVBXdhLiYGw, YIMMessage message, int code, String msg)? dNSrphLqsPPgGsKF,
}) async {
  Future<void> mGlkRXKEByvJGnio(YIMInfo? hjRcYygkDIaSlMBr) async {
    final kCwocHxVzlSDCcUI = YIMMessage()
      ..conversationType = TIVvnmucZCCCoXWZ
      ..messageType = EiRjaLJyoekAXvfO
      ..content = VNXtVBoZudfncesZ ?? ""
      ..attachment = yAxgAMAldXwbyuHy
      ..messageState = YIMEnum_MessageState.Sending
      ..from = lnHdKoLeAXayLaTQ.wkoLiCQozKacYjmM!
      ..fromInfo = lnHdKoLeAXayLaTQ.ikCtvzoxOumWKvvj
      ..to = DdEJLInBukyevMKs
      ..toInfo = hjRcYygkDIaSlMBr ?? (YIMInfo()..id = DdEJLInBukyevMKs)
      ..time = DateTime.now();
    // 插入一条新消息
    switch (TIVvnmucZCCCoXWZ) {
      case YIMEnum_ConversationType.P2P:
        kCwocHxVzlSDCcUI.id = "message_p2p_${Ulid().toCanonical()}";
        break;
      case YIMEnum_ConversationType.Team:
        kCwocHxVzlSDCcUI.id = "message_team_${Ulid().toCanonical()}";
        break;
      case YIMEnum_ConversationType.ChatRoom:
        kCwocHxVzlSDCcUI.id = "message_room_${Ulid().toCanonical()}";
        break;
      default:
        break;
    }
    lnHdKoLeAXayLaTQ.hqSwzyClHgtHzAja.bhMrnZZKiorcTBJp(() {
      oEwVYbdGNiYrQhbg?.call(kCwocHxVzlSDCcUI);
    });
    if (!UChfQaxIZXBHpDHw.njDzuTHDjwOofRwd.anPqdZrnWKekLPyp()) {
      kCwocHxVzlSDCcUI.messageState = YIMEnum_MessageState.Fail;
      lnHdKoLeAXayLaTQ.hqSwzyClHgtHzAja.bhMrnZZKiorcTBJp(() {
        dNSrphLqsPPgGsKF?.call(false, kCwocHxVzlSDCcUI, 0, "Please login first");
      });
      return;
    }
    if ([YIMEnum_ConversationType.P2P, YIMEnum_ConversationType.Team].contains(TIVvnmucZCCCoXWZ)) {
      await lnHdKoLeAXayLaTQ.vByYuYitJBHbvUKL.jtsnVpZoATWiaSlU(
        _YIMTableName.Message,
        JUQwIovWWbGEtXed: _YIMTable_Message(kCwocHxVzlSDCcUI: kCwocHxVzlSDCcUI),
      );
      Filter? PViwEfkxnHthuFaW;
      switch (TIVvnmucZCCCoXWZ) {
        case YIMEnum_ConversationType.P2P:
          PViwEfkxnHthuFaW = Filter.and([
            Filter.or([
              Filter.and([Filter.equals("lastMessage.from", lnHdKoLeAXayLaTQ.wkoLiCQozKacYjmM), Filter.equals("lastMessage.to", DdEJLInBukyevMKs)]),
              Filter.and([Filter.equals("lastMessage.to", lnHdKoLeAXayLaTQ.wkoLiCQozKacYjmM), Filter.equals("lastMessage.from", DdEJLInBukyevMKs)]),
            ]),
            Filter.equals("lastMessage.conversationType", TIVvnmucZCCCoXWZ.rawValue),
          ]);
          break;
        case YIMEnum_ConversationType.Team:
          PViwEfkxnHthuFaW = Filter.and([
            Filter.equals("lastMessage.to", DdEJLInBukyevMKs),
            Filter.equals("lastMessage.conversationType", TIVvnmucZCCCoXWZ.rawValue),
          ]);
          break;
        case YIMEnum_ConversationType.ChatRoom:
          PViwEfkxnHthuFaW = Filter.and([
            Filter.equals("lastMessage.conversationType", TIVvnmucZCCCoXWZ.rawValue),
          ]);
          break;
      }
      var dtmfXZcFGyRKHKIm = (await lnHdKoLeAXayLaTQ.vByYuYitJBHbvUKL.uKKZjqnYwajOojnf<_YIMTable_Conversation>(
        _YIMTableName.Conversation,
        kXTnRNGoMYqcQtxj: (map) => _YIMTable_Conversation.fromJson(map),
        fnfSorwGDrYrXXrJ: Finder(filter: PViwEfkxnHthuFaW),
      ))!;
      final RgiipeBdQbKTfboo = dtmfXZcFGyRKHKIm.isEmpty;
      // 创建或修改会话最后一条消息
      await UChfQaxIZXBHpDHw.VurOaXdcuMhmFxOY.PZljnyQTHQWpRuih(TIVvnmucZCCCoXWZ, DdEJLInBukyevMKs);
      lnHdKoLeAXayLaTQ.hqSwzyClHgtHzAja.bhMrnZZKiorcTBJp(() {
        UChfQaxIZXBHpDHw.hTyLGxoJhBOoadid.zYXHYCxBRzMmefXt?.call();
      });
      dtmfXZcFGyRKHKIm = (await lnHdKoLeAXayLaTQ.vByYuYitJBHbvUKL.uKKZjqnYwajOojnf<_YIMTable_Conversation>(
        _YIMTableName.Conversation,
        kXTnRNGoMYqcQtxj: (map) => _YIMTable_Conversation.fromJson(map),
        fnfSorwGDrYrXXrJ: Finder(filter: PViwEfkxnHthuFaW),
      ))!;
      if (RgiipeBdQbKTfboo) {
        //新增的会话
        lnHdKoLeAXayLaTQ.hqSwzyClHgtHzAja.bhMrnZZKiorcTBJp(() {
          UChfQaxIZXBHpDHw.hTyLGxoJhBOoadid.tvXnKsJjYewLWIsE?.call(dtmfXZcFGyRKHKIm.map((e) => YIMConversation(BXiYJGYbkPLwuERt: e)).toList());
        });
      } else {
        //原有的会话
        lnHdKoLeAXayLaTQ.hqSwzyClHgtHzAja.bhMrnZZKiorcTBJp(() {
          UChfQaxIZXBHpDHw.hTyLGxoJhBOoadid.rMqppijxSRmKvvLu?.call(dtmfXZcFGyRKHKIm.map((e) => YIMConversation(BXiYJGYbkPLwuERt: e)).toList());
        });
      }
    }
    if (VNXtVBoZudfncesZ != null && VNXtVBoZudfncesZ.length > 4096) {
      kCwocHxVzlSDCcUI.messageState = YIMEnum_MessageState.Fail;
      await JIqPgRlOlgMpHQUW(kCwocHxVzlSDCcUI: kCwocHxVzlSDCcUI);
      lnHdKoLeAXayLaTQ.hqSwzyClHgtHzAja.bhMrnZZKiorcTBJp(() {
        dNSrphLqsPPgGsKF?.call(false, kCwocHxVzlSDCcUI, 0, "content size over than 4096");
      });
      return;
    }

    if (eFLZtwaPtnBZJJFl) return;

    void oSwPAbjjlGZQXWYM() {
      lnHdKoLeAXayLaTQ.IDteDTVOmCXMeoaZ.xAbmkiHIVdSWVdsf("sendMessage", JUQwIovWWbGEtXed: {
        "message": kCwocHxVzlSDCcUI,
        "push": uHrDKqGhYwFfFjzt,
      }, jCuQmdbQKfCyjgLe: (IWxelvVBXdhLiYGw, iRnmzMAYPMjltgiU, RIJJEwowWZYrUgoB, ojKzdeKHBwmcEOBz) async {
        if (IWxelvVBXdhLiYGw) {
          kCwocHxVzlSDCcUI.messageState = YIMEnum_MessageState.Success_UnRead;
          kCwocHxVzlSDCcUI.time = DateTime.fromMillisecondsSinceEpoch(iRnmzMAYPMjltgiU!["time"]);
          kCwocHxVzlSDCcUI.toInfo = YIMInfo.fromJson(iRnmzMAYPMjltgiU["toInfo"]);
        } else {
          kCwocHxVzlSDCcUI.messageState = YIMEnum_MessageState.Fail;
        }
        // 更新新消息发送状态
        await JIqPgRlOlgMpHQUW(kCwocHxVzlSDCcUI: kCwocHxVzlSDCcUI);
        lnHdKoLeAXayLaTQ.hqSwzyClHgtHzAja.bhMrnZZKiorcTBJp(() {
          dNSrphLqsPPgGsKF?.call(IWxelvVBXdhLiYGw, kCwocHxVzlSDCcUI, RIJJEwowWZYrUgoB, ojKzdeKHBwmcEOBz);
        });
      });
    }

    if (kCwocHxVzlSDCcUI.attachment?.url != null) {
      Future<void> PgcTEveYegCWwilv({Future<String> Function(String url)? PURnMxTUuhIoXoNg, required Function() FJXZeMGeLhImxvMj}) async {
        if (kCwocHxVzlSDCcUI.attachment!.url.startsWith("http://") || kCwocHxVzlSDCcUI.attachment!.url.startsWith("https://")) {
          FJXZeMGeLhImxvMj.call();
          return;
        }

        void SarGjCVhvhkbLBkD() {
          lnHdKoLeAXayLaTQ.daTsWHmsUCmfYRlx.PgcTEveYegCWwilv(
            iTYbTOvgPjQlKLzR: kCwocHxVzlSDCcUI.attachment!.url,
            UZjQPwKKBftipoNw: UZjQPwKKBftipoNw,
            dNXlVvtonczvNCUe: "${lnHdKoLeAXayLaTQ.faQkRmckBLGLNpdu!.appKey}/${lnHdKoLeAXayLaTQ.wkoLiCQozKacYjmM}/${EiRjaLJyoekAXvfO.name}",
            IUOibztRaKyDvydl: (count, total) {
              lnHdKoLeAXayLaTQ.hqSwzyClHgtHzAja.bhMrnZZKiorcTBJp(() {
                WmGDNPHAWOMlPvEy?.call(kCwocHxVzlSDCcUI, count, total);
              });
            },
            khwOlvKiXaOvUXYc: (IWxelvVBXdhLiYGw, url, error) async {
              if (!IWxelvVBXdhLiYGw) {
                kCwocHxVzlSDCcUI.messageState = YIMEnum_MessageState.Fail;
                await JIqPgRlOlgMpHQUW(kCwocHxVzlSDCcUI: kCwocHxVzlSDCcUI);
                lnHdKoLeAXayLaTQ.hqSwzyClHgtHzAja.bhMrnZZKiorcTBJp(() {
                  dNSrphLqsPPgGsKF?.call(false, kCwocHxVzlSDCcUI, 0, "file upload error:$error");
                });
                return;
              }
              kCwocHxVzlSDCcUI.attachment?.url = url!;
              await JIqPgRlOlgMpHQUW(kCwocHxVzlSDCcUI: kCwocHxVzlSDCcUI);
              FJXZeMGeLhImxvMj.call();
            },
          );
        }

        if (PURnMxTUuhIoXoNg != null) {
          kCwocHxVzlSDCcUI.attachment!.url = await PURnMxTUuhIoXoNg(kCwocHxVzlSDCcUI.attachment!.url);
          kCwocHxVzlSDCcUI.attachment!.size = await XFile(kCwocHxVzlSDCcUI.attachment!.url).length();
          await JIqPgRlOlgMpHQUW(kCwocHxVzlSDCcUI: kCwocHxVzlSDCcUI);
          SarGjCVhvhkbLBkD();
        } else {
          SarGjCVhvhkbLBkD();
        }
      }

      switch (EiRjaLJyoekAXvfO) {
        case YIMEnum_MessageType.Audio:
          PgcTEveYegCWwilv(FJXZeMGeLhImxvMj: () => oSwPAbjjlGZQXWYM());
          break;
        case YIMEnum_MessageType.Image:
          final KWVoqAhkyoqdgtgg = kCwocHxVzlSDCcUI.attachment!.ext as YIMAttachmentExt_Image;
          PgcTEveYegCWwilv(
            PURnMxTUuhIoXoNg: KWVoqAhkyoqdgtgg.compress ? (url) async => await lnHdKoLeAXayLaTQ.XonrGWjTpqOPuBKd.rxIKmMEJPoqIIHtJ(url) : null,
            FJXZeMGeLhImxvMj: () => oSwPAbjjlGZQXWYM(),
          );
          break;
        case YIMEnum_MessageType.Video:
          final KWVoqAhkyoqdgtgg = kCwocHxVzlSDCcUI.attachment!.ext as YIMAttachmentExt_Video;
          PgcTEveYegCWwilv(
            PURnMxTUuhIoXoNg: KWVoqAhkyoqdgtgg.compress ? (url) async => await lnHdKoLeAXayLaTQ.XonrGWjTpqOPuBKd.ESgocCntrRgYxOyC(url) : null,
            FJXZeMGeLhImxvMj: () async {
              KWVoqAhkyoqdgtgg.image = lnHdKoLeAXayLaTQ.daTsWHmsUCmfYRlx.bsaBcnzZENGLaGFH(kCwocHxVzlSDCcUI.attachment!.url);
              await JIqPgRlOlgMpHQUW(kCwocHxVzlSDCcUI: kCwocHxVzlSDCcUI);
              oSwPAbjjlGZQXWYM();
            },
          );
          break;
        case YIMEnum_MessageType.File:
          PgcTEveYegCWwilv(FJXZeMGeLhImxvMj: () => oSwPAbjjlGZQXWYM());
          break;
        default:
          break;
      }
    } else {
      oSwPAbjjlGZQXWYM();
    }
  }

  UChfQaxIZXBHpDHw.VurOaXdcuMhmFxOY.TjMCUKWVAiKboQQH(dFOzKXrUQFAiVUMV: (mvNVnlaAbMjTUWGG) {
    final DKQICclTFUKexNla = mvNVnlaAbMjTUWGG?.where((element) => element.getConversatinoID() == DdEJLInBukyevMKs);
    if (DKQICclTFUKexNla != null && DKQICclTFUKexNla.isNotEmpty) {
      switch (DKQICclTFUKexNla.first.lastMessage.conversationType) {
        case YIMEnum_ConversationType.P2P:
          if (DKQICclTFUKexNla.first.getIsMine()) {
            mGlkRXKEByvJGnio(DKQICclTFUKexNla.first.lastMessage.toInfo);
          } else {
            mGlkRXKEByvJGnio(DKQICclTFUKexNla.first.lastMessage.fromInfo);
          }
          break;
        default:
          mGlkRXKEByvJGnio(DKQICclTFUKexNla.first.lastMessage.toInfo);
          break;
      }
    } else {
      mGlkRXKEByvJGnio(null);
    }
  });
}