flutter/lib/utils/parse_message_summary.dart

183 lines
6.7 KiB
Dart
Raw Normal View History

2025-07-21 15:46:30 +08:00
import 'dart:convert';
2025-08-27 23:26:29 +08:00
import 'package:loopin/IM/push_service.dart';
import 'package:loopin/models/notify_message.type.dart';
2025-08-21 10:50:38 +08:00
import 'package:loopin/models/summary_type.dart';
2025-07-21 15:46:30 +08:00
import 'package:tencent_cloud_chat_sdk/enum/message_elem_type.dart';
import 'package:tencent_cloud_chat_sdk/models/v2_tim_message.dart';
String parseMessageSummary(V2TimMessage msg) {
switch (msg.elemType) {
case MessageElemType.V2TIM_ELEM_TYPE_TEXT:
return msg.textElem?.text ?? '[文本消息]';
case MessageElemType.V2TIM_ELEM_TYPE_IMAGE:
return '[图片]';
case MessageElemType.V2TIM_ELEM_TYPE_SOUND:
return '[语音]';
case MessageElemType.V2TIM_ELEM_TYPE_VIDEO:
return '[视频]';
case MessageElemType.V2TIM_ELEM_TYPE_FILE:
2025-08-21 10:50:38 +08:00
return '[文件]'; // 先不做
2025-07-21 15:46:30 +08:00
case MessageElemType.V2TIM_ELEM_TYPE_LOCATION:
2025-08-21 10:50:38 +08:00
return '[位置]'; // 先不做
2025-07-21 15:46:30 +08:00
case MessageElemType.V2TIM_ELEM_TYPE_FACE:
return '[表情]';
case MessageElemType.V2TIM_ELEM_TYPE_CUSTOM:
2025-08-21 10:50:38 +08:00
return _parseCustomMessage(msg);
2025-07-21 15:46:30 +08:00
case MessageElemType.V2TIM_ELEM_TYPE_MERGER:
return '[合并转发消息]';
case MessageElemType.V2TIM_ELEM_TYPE_GROUP_TIPS:
return '[群提示]';
default:
2025-08-21 10:50:38 +08:00
return '[未知消息类型1]';
2025-07-21 15:46:30 +08:00
}
}
// newFoucs, //新的关注
// systemNotify, // 系统->通知
// systemReport, // 系统->举报下架(视频,视频评论)
// systemCheck, // 系统->审核结果(复审,驳回 ,通过)
// systemPush, //系统->推广类的
// interactionComment, //互动->评论
// interactionAt, //互动->视频评论中的@
// interactionLike, //互动->点赞
// interactionReply, //互动->评论回复
// orderRecharge, //订单->充值 online
// orderPay, //订单->订单交易成功通知 online
// orderRefund, //订单->退款结果通知
// groupNotifyCheck, //群通知->进群申请 online
// groupNotifyAccpet, // 群通知->进群审核审核通过 online
// groupNotifyFail, // 群通知->进群审核审核拒绝 online
// groupNotifyLeaveUp, // 群通知->群升级为达人群通知
2025-08-21 10:50:38 +08:00
String _parseCustomMessage(V2TimMessage? msg) {
if (msg == null) return '[null]';
final sum = msg.cloudCustomData;
final elment = msg.customElem; // 所有服务端发送的通知消息都走【自定义消息类型】
2025-08-27 23:26:29 +08:00
logger.w('解析自定义消息:${msg.toJson()}');
logger.w('解析element${elment?.desc ?? 'summary_error'}');
2025-07-21 15:46:30 +08:00
try {
2025-08-21 10:50:38 +08:00
switch (sum) {
case SummaryType.hongbao:
final hbData = jsonDecode(msg.customElem!.data!);
return '[红包]${hbData['remark']}';
case SummaryType.shareTuangou:
return '[分享商品]';
case SummaryType.shareVideo:
return '[分享视频]';
// 解析服务端通知类的
/// [des]显示的文本内容
/// [data] json数据
/// 名称firstFrameImg先取cover如果没有在取firstFrameImg
case NotifyMessageTypeConstants.newFoucs:
// 关注
///发起关注人的[userID],
///发起关注人的昵称[nickName],
///发起关注人的头像地址[faceUrl],
///------
///客户端检测发起关注人与本人的关注关系
return elment!.desc!;
case NotifyMessageTypeConstants.systemNotify:
///系统级别的没有就先不做
return elment!.desc!;
case NotifyMessageTypeConstants.systemReport:
// 视频举报
///先只处理视频,评论的先不管
///被举报的视频[vlogID],
///被举报的视频标题[title],
///被举报的视频首帧图[firstFrameImg]
return elment!.desc!;
case NotifyMessageTypeConstants.systemCheck:
// 视频审核
///视频审核结果通知 通过还是驳回
///被审核的视频[vlogID]
///被审核的视频标题[title],
///被审核的视频首帧图[firstFrameImg]
return elment!.desc!;
case NotifyMessageTypeConstants.systemPush:
///系统推广类的先不管了
return elment!.desc!;
case NotifyMessageTypeConstants.interactionComment:
// 评论视频
/// 发起评论人的[userID]
/// 发起评论人的头像[faceUrl]
/// 发起评论人的[nickName]
/// 评论的内容[comment]
/// 评论的id[commentID]
/// 被评论的视频[vlogID]
/// 被评论的视频首帧图[firstFrameImg]
return elment!.desc!;
case NotifyMessageTypeConstants.interactionAt:
// 视频评论中@互关好友
/// 发起@人的[userID]
/// 发起@人的[nickName]
/// 发起@人的头像[faceUrl]
/// 关联视频的首帧图[firstFrameImg]
/// 关联视频的[vlogID]
/// 评论的id[commentID]
return elment!.desc!;
case NotifyMessageTypeConstants.interactionLike:
// 点赞
/// 发起点赞人的[userID]
/// 发起点赞人的头像[faceUrl]
/// 发起点赞人的[nickName]
/// 被点赞视频的[vlogID]
/// 被点赞视频的封面图[firstFrameImg]
return elment!.desc!;
case NotifyMessageTypeConstants.interactionReply:
// 回复评论
/// 回复人的[userID]
/// 回复人的[faceUrl]
/// 回复人的[nickName]
/// 关联视频的[vlogID]
/// 关联视频的首帧图[firstFrameImg]
/// 被回复评论的[commentID]
/// 回复的评论内容[comment]
return elment!.desc!;
case NotifyMessageTypeConstants.orderRecharge:
// 充值成功通知
/// 订单编号[orderID]
/// 充值金额[amount]
/// 充值后帐户余额[totalAmount]
return elment!.desc!;
case NotifyMessageTypeConstants.orderPay:
// 订单交易结果通知(商品购买成功后)
/// 订单编号[orderID]
/// 订单金额[amount]
/// 商品名称[name]
/// 商品描述[describe]
/// 商品价格[price]
/// 商品主图[pic]
return elment!.desc!;
case NotifyMessageTypeConstants.orderRefund:
// 订单退款通知
/// 订单编号[orderID]
/// 订单金额[amount]
/// 商品名称[name]
/// 商品描述[describe]
/// 商品价格[price]
/// 商品主图[pic]
return elment!.desc!;
case NotifyMessageTypeConstants.groupNotifyCheck:
return elment!.desc!;
case NotifyMessageTypeConstants.groupNotifyAccpet:
return elment!.desc!;
case NotifyMessageTypeConstants.groupNotifyFail:
return elment!.desc!;
case NotifyMessageTypeConstants.groupNotifyLeaveUp:
return elment!.desc!;
2025-07-21 15:46:30 +08:00
default:
2025-08-21 10:50:38 +08:00
return '[未知消息类型2]';
2025-07-21 15:46:30 +08:00
}
} catch (_) {
2025-08-21 10:50:38 +08:00
return '[未知消息类型3]';
2025-07-21 15:46:30 +08:00
}
}