fix: Modifying non JSON serialization errors in extended fields

This commit is contained in:
SL 2024-05-29 14:49:22 +08:00
parent c9f359906e
commit 5f686c4f90
7 changed files with 66 additions and 36 deletions

View File

@ -79,4 +79,6 @@
### 1.3.9 ### 1.3.9
* fix: Update RecvAckPacket header encode method * fix: Update RecvAckPacket header encode method
### 1.4.0 ### 1.4.0
* fix: Modifying the issue of a large number of offline messages getting stuck during synchronization * fix: Modifying the issue of a large number of offline messages getting stuck during synchronization
### 1.4.1
* fix: Modifying non JSON serialization errors in extended fields

View File

@ -9,7 +9,7 @@
#### 安装 #### 安装
``` ```
dependencies: dependencies:
wukongimfluttersdk: ^1.4.0 wukongimfluttersdk: ^1.4.1
``` ```
#### 引入 #### 引入
```dart ```dart

View File

@ -1,5 +1,6 @@
import 'package:wukongimfluttersdk/entity/msg.dart'; import 'package:wukongimfluttersdk/entity/msg.dart';
import 'package:wukongimfluttersdk/type/const.dart'; import 'package:wukongimfluttersdk/type/const.dart';
import 'package:wukongimfluttersdk/wkim.dart';
import 'const.dart'; import 'const.dart';

View File

@ -46,11 +46,7 @@ class WKDBConst {
msg.topicID = readString(data, 'topic_id'); msg.topicID = readString(data, 'topic_id');
// //
msg.wkMsgExtra = serializeMsgExtra(data); msg.wkMsgExtra = serializeMsgExtra(data);
msg.localExtraMap = readDynamic(data, 'extra');
String extra = readString(data, 'extra');
if (extra != '') {
msg.localExtraMap = jsonEncode(extra);
}
if (msg.content != '') { if (msg.content != '') {
dynamic contentJson = jsonDecode(msg.content); dynamic contentJson = jsonDecode(msg.content);
msg.messageContent = WKIM.shared.messageManager msg.messageContent = WKIM.shared.messageManager
@ -109,10 +105,7 @@ class WKDBConst {
msg.lastMsgSeq = readInt(data, 'last_msg_seq'); msg.lastMsgSeq = readInt(data, 'last_msg_seq');
msg.parentChannelID = readString(data, 'parent_channel_id'); msg.parentChannelID = readString(data, 'parent_channel_id');
msg.parentChannelType = readInt(data, 'parent_channel_type'); msg.parentChannelType = readInt(data, 'parent_channel_type');
String extra = readString(data, 'extra'); msg.localExtraMap = readDynamic(data, 'extra');
if (extra != '') {
msg.localExtraMap = jsonDecode(extra);
}
msg.msgExtra = serializeConversationExtra(data); msg.msgExtra = serializeConversationExtra(data);
return msg; return msg;
} }
@ -167,14 +160,8 @@ class WKDBConst {
} }
channel.createdAt = readString(data, 'created_at'); channel.createdAt = readString(data, 'created_at');
channel.updatedAt = readString(data, 'updated_at'); channel.updatedAt = readString(data, 'updated_at');
String remoteExtra = readString(data, 'remote_extra'); channel.remoteExtraMap = readDynamic(data, 'remote_extra');
if (remoteExtra != '') { channel.localExtra = readDynamic(data, 'extra');
channel.remoteExtraMap = jsonDecode(remoteExtra);
}
String localExtra = readString(data, 'extra');
if (remoteExtra != '') {
channel.localExtra = jsonDecode(localExtra);
}
return channel; return channel;
} }
@ -210,11 +197,7 @@ class WKDBConst {
} else { } else {
member.memberAvatarCacheKey = readString(data, 'member_avatar_cache_key'); member.memberAvatarCacheKey = readString(data, 'member_avatar_cache_key');
} }
String extra = readString(data, 'extra'); member.extraMap = readDynamic(data, 'extra');
if (extra != '') {
member.extraMap = jsonDecode(extra);
}
return member; return member;
} }
@ -230,12 +213,9 @@ class WKDBConst {
reminder.text = readString(data, 'text'); reminder.text = readString(data, 'text');
reminder.version = readInt(data, 'version'); reminder.version = readInt(data, 'version');
reminder.done = readInt(data, 'done'); reminder.done = readInt(data, 'done');
String data1 = readString(data, 'data');
reminder.needUpload = readInt(data, 'need_upload'); reminder.needUpload = readInt(data, 'need_upload');
reminder.publisher = readString(data, 'publisher'); reminder.publisher = readString(data, 'publisher');
if (data1 != '') { reminder.data = readDynamic(data, 'data');
reminder.data = jsonDecode(data1);
}
return reminder; return reminder;
} }
@ -255,6 +235,23 @@ class WKDBConst {
return result.toString(); return result.toString();
} }
static dynamic readDynamic(dynamic data, String key) {
String jsonStr = readString(data, key);
if (jsonStr != '' && isJsonString(jsonStr)) {
return jsonDecode(jsonStr);
}
return {};
}
static bool isJsonString(String str) {
try {
final parsed = json.decode(str);
return parsed is Map || parsed is List;
} on FormatException {
return false;
}
}
static String getPlaceholders(int count) { static String getPlaceholders(int count) {
StringBuffer placeholders = StringBuffer(); StringBuffer placeholders = StringBuffer();
for (int i = 0; i < count; i++) { for (int i = 0; i < count; i++) {

View File

@ -378,7 +378,11 @@ class MessageDB {
oldestMsgSeq != 0 && oldestMsgSeq != 0 &&
oldestMsgSeq - maxMessageSeq > 1) { oldestMsgSeq - maxMessageSeq > 1) {
isSyncMsg = true; isSyncMsg = true;
startMsgSeq = oldestMsgSeq; if (contain) {
startMsgSeq = oldestMsgSeq;
} else {
startMsgSeq = oldestMsgSeq - 1;
}
endMsgSeq = maxMessageSeq; endMsgSeq = maxMessageSeq;
} }
} else { } else {
@ -387,7 +391,11 @@ class MessageDB {
oldestMsgSeq != 0 && oldestMsgSeq != 0 &&
minMessageSeq - oldestMsgSeq > 1) { minMessageSeq - oldestMsgSeq > 1) {
isSyncMsg = true; isSyncMsg = true;
startMsgSeq = oldestMsgSeq; if (contain) {
startMsgSeq = oldestMsgSeq;
} else {
startMsgSeq = oldestMsgSeq + 1;
}
endMsgSeq = minMessageSeq; endMsgSeq = minMessageSeq;
} }
} }
@ -413,13 +421,20 @@ class MessageDB {
} }
if (pullMode == 0) { if (pullMode == 0) {
// //
startMsgSeq = max; if (max > startMsgSeq) {
endMsgSeq = min; startMsgSeq = max;
}
if (endMsgSeq == 0 || min < endMsgSeq) {
endMsgSeq = min;
}
} else { } else {
startMsgSeq = min; if (startMsgSeq == 0 || min < startMsgSeq) {
endMsgSeq = max; startMsgSeq = min;
}
if (max > endMsgSeq) {
endMsgSeq = max;
}
} }
break;
} }
} }
} }
@ -754,6 +769,14 @@ class MessageDB {
return wkMsg; return wkMsg;
} }
Future<int> deleteWithMessageIDs(List<String> msgIds) async {
var map = <String, Object>{};
map['is_deleted'] = 1;
return await WKDBHelper.shared.getDB().update(WKDBConst.tableMessage, map,
where: "message_id in (${WKDBConst.getPlaceholders(msgIds.length)})",
whereArgs: msgIds);
}
Future<int> deleteWithChannel(String channelId, int channelType) async { Future<int> deleteWithChannel(String channelId, int channelType) async {
var map = <String, Object>{}; var map = <String, Object>{};
map['is_deleted'] = 1; map['is_deleted'] = 1;

View File

@ -172,8 +172,12 @@ class WKMessageManager {
saveRemoteExtraMsg(List<WKMsgExtra> list) async { saveRemoteExtraMsg(List<WKMsgExtra> list) async {
MessageDB.shared.insertMsgExtras(list); MessageDB.shared.insertMsgExtras(list);
List<String> msgIds = []; List<String> msgIds = [];
List<String> deletedMsgIds = [];
for (var extra in list) { for (var extra in list) {
msgIds.add(extra.messageID); msgIds.add(extra.messageID);
if (extra.isMutualDeleted == 1) {
deletedMsgIds.add(extra.messageID);
}
} }
var msgList = await MessageDB.shared.queryWithMessageIds(msgIds); var msgList = await MessageDB.shared.queryWithMessageIds(msgIds);
for (var msg in msgList) { for (var msg in msgList) {
@ -199,6 +203,9 @@ class WKMessageManager {
} }
setRefreshMsg(msg); setRefreshMsg(msg);
} }
if (deletedMsgIds.isNotEmpty) {
MessageDB.shared.deleteWithMessageIDs(deletedMsgIds);
}
} }
void setSyncChannelMsgListener( void setSyncChannelMsgListener(

View File

@ -15,7 +15,7 @@ description: wukong IM flutter sdk
# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html # https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html
# In Windows, build-name is used as the major, minor, and patch parts # In Windows, build-name is used as the major, minor, and patch parts
# of the product and file versions while build-number is used as the build suffix. # of the product and file versions while build-number is used as the build suffix.
version: 1.4.0 version: 1.4.1
homepage: https://github.com/WuKongIM/WuKongIMFlutterSDK homepage: https://github.com/WuKongIM/WuKongIMFlutterSDK
environment: environment: