2023-08-18 21:55:18 +08:00

250 lines
9.1 KiB
Dart

import 'dart:convert';
import 'package:wukongimfluttersdk/entity/channel.dart';
import 'package:wukongimfluttersdk/entity/channel_member.dart';
import 'package:wukongimfluttersdk/entity/conversation.dart';
import 'package:wukongimfluttersdk/entity/msg.dart';
import 'package:wukongimfluttersdk/entity/reminder.dart';
import 'package:wukongimfluttersdk/type/const.dart';
import 'package:wukongimfluttersdk/wkim.dart';
import '../proto/proto.dart';
class WKDBConst {
static const tableMessage = 'message';
static const tableMessageReaction = 'message_reaction';
static const tableMessageExtra = 'message_extra';
static const tableConversation = 'conversation';
static const tableConversationExtra = 'conversation_extra';
static const tableChannel = 'channel';
static const tableChannelMember = 'channel_members';
static const tableReminders = 'reminders';
static const tableRobot = 'robot';
static const tableRobotMenu = 'robot_menu';
static WKMsg serializeWKMsg(dynamic data) {
WKMsg msg = WKMsg();
msg.messageID = readString(data, 'message_id');
msg.messageSeq = readInt(data, 'message_seq');
msg.clientSeq = readInt(data, 'client_seq');
msg.timestamp = data['timestamp'];
msg.fromUID = data['from_uid'];
msg.channelID = data['channel_id'];
msg.channelType = data['channel_type'];
msg.contentType = data['type'];
msg.content = data['content'];
msg.status = data['status'];
msg.voiceStatus = data['voice_status'];
msg.searchableWord = data['searchable_word'];
msg.clientMsgNO = data['client_msg_no'];
msg.isDeleted = data['is_deleted'];
msg.orderSeq = data['order_seq'];
int setting = data['setting'];
msg.setting = Setting().decode(setting);
msg.viewed = data['viewed'];
msg.viewedAt = data['viewed_at'];
msg.topicID = data['topic_id'];
// 扩展表数据
msg.wkMsgExtra = serializeMsgExtra(data);
String extra = data['extra'];
if (extra != '') {
msg.localExtraMap = jsonEncode(extra);
}
if (msg.content != '') {
dynamic contentJson = jsonDecode(msg.content);
msg.messageContent = WKIM.shared.messageManager
.getMessageModel(msg.contentType, contentJson);
}
if (msg.wkMsgExtra!.contentEdit != '') {
dynamic json = jsonDecode(msg.wkMsgExtra!.contentEdit);
msg.wkMsgExtra!.messageContent = WKIM.shared.messageManager
.getMessageModel(WkMessageContentType.text, json);
}
return msg;
}
static WKMsgExtra serializeMsgExtra(dynamic data) {
WKMsgExtra extra = WKMsgExtra();
extra.messageID = readString(data, 'message_id');
extra.channelID = readString(data, 'channel_id');
extra.channelType = readInt(data, 'channel_type');
extra.readed = readInt(data, 'readed');
extra.readedCount = readInt(data, 'readed_count');
extra.unreadCount = readInt(data, 'unread_count');
extra.revoke = readInt(data, 'revoke');
extra.isMutualDeleted = readInt(data, 'is_mutual_deleted');
extra.revoker = readString(data, 'revoker');
extra.extraVersion = readInt(data, 'extra_version');
extra.editedAt = readInt(data, 'edited_at');
extra.contentEdit = readString(data, 'content_edit');
extra.needUpload = readInt(data, 'need_upload');
return extra;
}
static WKMsgReaction serializeMsgReation(dynamic data) {
WKMsgReaction reaction = WKMsgReaction();
reaction.channelID = data['channel_id'];
reaction.channelType = data['channel_type'];
reaction.isDeleted = data['is_deleted'];
reaction.uid = data['uid'];
reaction.name = data['name'];
reaction.messageID = data['message_id'];
reaction.createdAt = data['created_at'];
reaction.seq = data['seq'];
reaction.emoji = data['emoji'];
reaction.isDeleted = data['is_deleted'];
return reaction;
}
static WKConversationMsg serializeCoversation(dynamic data) {
WKConversationMsg msg = WKConversationMsg();
msg.channelID = data['channel_id'];
msg.channelType = data['channel_type'];
msg.lastMsgTimestamp = data['last_msg_timestamp'];
msg.unreadCount = data['unread_count'];
msg.isDeleted = data['is_deleted'];
msg.version = data['version'];
msg.lastClientMsgNO = data['last_client_msg_no'];
msg.lastMsgSeq = data['last_msg_seq'];
msg.parentChannelID = data['parent_channel_id'];
msg.parentChannelType = data['parent_channel_type'];
String extra = data['extra'];
if (extra != '') {
msg.localExtraMap = jsonDecode(extra);
}
msg.msgExtra = serializeConversationExtra(data);
return msg;
}
static WKConversationMsgExtra serializeConversationExtra(dynamic data) {
WKConversationMsgExtra extra = WKConversationMsgExtra();
extra.channelID = readString(data, 'channel_id');
extra.channelType = readInt(data, 'channel_type');
extra.keepMessageSeq = readInt(data, 'keep_message_seq');
extra.keepOffsetY = readInt(data, 'keep_offset_y');
extra.draft = readString(data, 'draft');
extra.browseTo = readInt(data, 'browse_to');
extra.draftUpdatedAt = readInt(data, 'draft_updated_at');
extra.version = readInt(data, 'version');
if (data['extra_version'] != null) {
extra.version = data['extra_version'];
}
return extra;
}
static WKChannel serializeChannel(dynamic data) {
String channelID = data['channel_id'];
int channelType = data['channel_type'];
WKChannel channel = WKChannel(channelID, channelType);
channel.channelName = data['channel_name'];
channel.channelRemark = data['channel_remark'];
channel.showNick = data['show_nick'];
channel.top = data['top'];
channel.mute = data['mute'];
channel.isDeleted = data['is_deleted'];
channel.forbidden = data['forbidden'];
channel.status = data['status'];
channel.follow = data['follow'];
channel.invite = data['invite'];
channel.version = data['version'];
channel.avatar = data['avatar'];
channel.online = data['online'];
channel.lastOffline = data['last_offline'];
channel.category = data['category'];
channel.receipt = data['receipt'];
channel.robot = data['robot'];
channel.username = data['username'];
channel.avatarCacheKey = data['avatar_cache_key'];
channel.deviceFlag = data['device_flag'];
channel.parentChannelID = data['parent_channel_id'];
channel.parentChannelType = data['parent_channel_type'];
channel.createdAt = data['created_at'];
channel.updatedAt = data['updated_at'];
String remoteExtra = data['remote_extra'];
if (remoteExtra != '') {
channel.remoteExtraMap = jsonDecode(remoteExtra);
}
String localExtra = data['extra'];
if (remoteExtra != '') {
channel.localExtra = jsonDecode(localExtra);
}
return channel;
}
static WKChannelMember serializeChannelMember(dynamic data) {
WKChannelMember member = WKChannelMember();
member.status = data['status'];
member.channelID = data['channel_id'];
member.channelType = data['channel_type'];
member.memberUID = data['member_uid'];
member.memberName = data['member_name'];
member.memberAvatar = data['member_avatar'];
member.memberRemark = data['member_remark'];
member.role = data['role'];
member.isDeleted = data['is_deleted'];
member.version = data['version'];
member.createdAt = data['created_at'];
member.updatedAt = data['updated_at'];
member.memberInviteUID = data['member_invite_uid'];
member.robot = data['robot'];
member.forbiddenExpirationTime = data['forbidden_expiration_time'];
String channelName = readString(data, 'channel_name');
if (channelName != '') {
member.memberName = channelName;
}
member.remark = readString(data, 'channel_remark');
member.memberAvatar = readString(data, 'avatar');
String avatarCache = readString(data, 'avatar_cache_key');
if (avatarCache != '') {
member.memberAvatarCacheKey = avatarCache;
} else {
member.memberAvatarCacheKey = readString(data, 'member_avatar_cache_key');
}
String extra = readString(data, 'extra');
if (extra != '') {
member.extraMap = jsonDecode(extra);
}
return member;
}
static WKReminder serializeReminder(dynamic data) {
WKReminder reminder = WKReminder();
reminder.type = data['type'];
reminder.reminderID = data['reminder_id'];
reminder.messageID = data['message_id'];
reminder.messageSeq = data['message_seq'];
reminder.isLocate = data['is_locate'];
reminder.channelID = data['channel_id'];
reminder.channelType = data['channel_type'];
reminder.text = data['text'];
reminder.version = data['version'];
reminder.done = data['done'];
String data1 = data['data'];
reminder.needUpload = data['needUpload'];
reminder.publisher = data['publisher'];
if (data1 != '') {
reminder.data = jsonDecode(data1);
}
return reminder;
}
static int readInt(dynamic data, String key) {
dynamic result = data[key];
if (result == Null || result == null) {
return 0;
}
return result as int;
}
static String readString(dynamic data, String key) {
dynamic result = data[key];
if (result == Null || result == null) {
return '';
}
return result.toString();
}
}