mirror of
https://github.com/WuKongIM/WuKongIMFlutterSDK
synced 2025-06-06 13:28:17 +00:00
fix: Upgrade message protocol, add message extension topping function and the ability to send expired messages
This commit is contained in:
parent
45e66eef06
commit
d1bf1daedf
@ -92,3 +92,5 @@
|
|||||||
* fix: Update send & recv message No fromChannel information added
|
* fix: Update send & recv message No fromChannel information added
|
||||||
### 1.4.6
|
### 1.4.6
|
||||||
* fix: Update send message fromChannel information is Null
|
* fix: Update send message fromChannel information is Null
|
||||||
|
### 1.4.7
|
||||||
|
* fix: Upgrade message protocol, add message extension topping function and the ability to send expired messages
|
3
assets/202407042149.sql
Normal file
3
assets/202407042149.sql
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
ALTER TABLE 'message' add column 'expire_time' BIGINT DEFAULT 0;
|
||||||
|
ALTER TABLE 'message' add column 'expire_timestamp' BIGINT DEFAULT 0;
|
||||||
|
ALTER TABLE 'message_extra' ADD COLUMN is_pinned int DEFAULT 0;
|
@ -15,3 +15,4 @@
|
|||||||
202211251048;
|
202211251048;
|
||||||
202302070951;
|
202302070951;
|
||||||
202302081049;
|
202302081049;
|
||||||
|
202407042149;
|
@ -121,7 +121,6 @@ class HttpUtils {
|
|||||||
String payload = json['payload'];
|
String payload = json['payload'];
|
||||||
try {
|
try {
|
||||||
msg.payload = jsonDecode(utf8.decode(base64Decode(payload)));
|
msg.payload = jsonDecode(utf8.decode(base64Decode(payload)));
|
||||||
print('消息seq: ${msg.messageSeq},查询的消息${msg.payload}');
|
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
// print('异常了');
|
// print('异常了');
|
||||||
}
|
}
|
||||||
|
@ -3,7 +3,7 @@ import '../proto/proto.dart';
|
|||||||
class Options {
|
class Options {
|
||||||
String? uid, token;
|
String? uid, token;
|
||||||
String? addr; // connect address IP:PORT
|
String? addr; // connect address IP:PORT
|
||||||
int protoVersion = 0x01; // protocol version
|
int protoVersion = 0x04; // protocol version
|
||||||
Function(Function(String addr) complete)?
|
Function(Function(String addr) complete)?
|
||||||
getAddr; // async get connect address
|
getAddr; // async get connect address
|
||||||
Proto proto = Proto();
|
Proto proto = Proto();
|
||||||
|
@ -14,7 +14,10 @@ class ChannelDB {
|
|||||||
|
|
||||||
Future<WKChannel?> query(String channelID, int channelType) async {
|
Future<WKChannel?> query(String channelID, int channelType) async {
|
||||||
WKChannel? channel;
|
WKChannel? channel;
|
||||||
List<Map<String, Object?>> list = await WKDBHelper.shared.getDB().query(
|
if (WKDBHelper.shared.getDB() == null) {
|
||||||
|
return channel;
|
||||||
|
}
|
||||||
|
List<Map<String, Object?>> list = await WKDBHelper.shared.getDB()!.query(
|
||||||
WKDBConst.tableChannel,
|
WKDBConst.tableChannel,
|
||||||
where: "channel_id=? and channel_type=?",
|
where: "channel_id=? and channel_type=?",
|
||||||
whereArgs: [channelID, channelType]);
|
whereArgs: [channelID, channelType]);
|
||||||
@ -25,6 +28,9 @@ class ChannelDB {
|
|||||||
}
|
}
|
||||||
|
|
||||||
insertOrUpdateList(List<WKChannel> list) async {
|
insertOrUpdateList(List<WKChannel> list) async {
|
||||||
|
if (WKDBHelper.shared.getDB() == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
List<Map<String, dynamic>> addList = [];
|
List<Map<String, dynamic>> addList = [];
|
||||||
for (WKChannel channel in list) {
|
for (WKChannel channel in list) {
|
||||||
if (channel.channelID != '') {
|
if (channel.channelID != '') {
|
||||||
@ -32,7 +38,7 @@ class ChannelDB {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (addList.isNotEmpty) {
|
if (addList.isNotEmpty) {
|
||||||
WKDBHelper.shared.getDB().transaction((txn) async {
|
WKDBHelper.shared.getDB()!.transaction((txn) async {
|
||||||
if (addList.isNotEmpty) {
|
if (addList.isNotEmpty) {
|
||||||
for (Map<String, dynamic> value in addList) {
|
for (Map<String, dynamic> value in addList) {
|
||||||
txn.insert(WKDBConst.tableChannel, value,
|
txn.insert(WKDBConst.tableChannel, value,
|
||||||
@ -48,19 +54,22 @@ class ChannelDB {
|
|||||||
}
|
}
|
||||||
|
|
||||||
insert(WKChannel channel) {
|
insert(WKChannel channel) {
|
||||||
WKDBHelper.shared.getDB().insert(WKDBConst.tableChannel, getMap(channel),
|
WKDBHelper.shared.getDB()?.insert(WKDBConst.tableChannel, getMap(channel),
|
||||||
conflictAlgorithm: ConflictAlgorithm.replace);
|
conflictAlgorithm: ConflictAlgorithm.replace);
|
||||||
}
|
}
|
||||||
|
|
||||||
update(WKChannel channel) {
|
update(WKChannel channel) {
|
||||||
WKDBHelper.shared.getDB().update(WKDBConst.tableChannel, getMap(channel),
|
WKDBHelper.shared.getDB()?.update(WKDBConst.tableChannel, getMap(channel),
|
||||||
where: "channel_id=? and channel_type=?",
|
where: "channel_id=? and channel_type=?",
|
||||||
whereArgs: [channel.channelID, channel.channelType]);
|
whereArgs: [channel.channelID, channel.channelType]);
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<bool> isExist(String channelID, int channelType) async {
|
Future<bool> isExist(String channelID, int channelType) async {
|
||||||
bool isExit = false;
|
bool isExit = false;
|
||||||
List<Map<String, Object?>> list = await WKDBHelper.shared.getDB().query(
|
if (WKDBHelper.shared.getDB() == null) {
|
||||||
|
return isExit;
|
||||||
|
}
|
||||||
|
List<Map<String, Object?>> list = await WKDBHelper.shared.getDB()!.query(
|
||||||
WKDBConst.tableChannel,
|
WKDBConst.tableChannel,
|
||||||
where: "channel_id=? and channel_type=?",
|
where: "channel_id=? and channel_type=?",
|
||||||
whereArgs: [channelID, channelType]);
|
whereArgs: [channelID, channelType]);
|
||||||
@ -85,7 +94,10 @@ class ChannelDB {
|
|||||||
args.addAll(channelIDs);
|
args.addAll(channelIDs);
|
||||||
args.add(channelType);
|
args.add(channelType);
|
||||||
List<WKChannel> list = [];
|
List<WKChannel> list = [];
|
||||||
List<Map<String, Object?>> results = await WKDBHelper.shared.getDB().query(
|
if (WKDBHelper.shared.getDB() == null) {
|
||||||
|
return list;
|
||||||
|
}
|
||||||
|
List<Map<String, Object?>> results = await WKDBHelper.shared.getDB()!.query(
|
||||||
WKDBConst.tableChannel,
|
WKDBConst.tableChannel,
|
||||||
where:
|
where:
|
||||||
"channel_id in (${WKDBConst.getPlaceholders(channelIDs.length)}) and channel_type=?",
|
"channel_id in (${WKDBConst.getPlaceholders(channelIDs.length)}) and channel_type=?",
|
||||||
|
@ -19,7 +19,10 @@ class ChannelMemberDB {
|
|||||||
args.add(channelType);
|
args.add(channelType);
|
||||||
args.addAll(uidList);
|
args.addAll(uidList);
|
||||||
List<WKChannelMember> list = [];
|
List<WKChannelMember> list = [];
|
||||||
List<Map<String, Object?>> results = await WKDBHelper.shared.getDB().query(
|
if (WKDBHelper.shared.getDB() == null) {
|
||||||
|
return list;
|
||||||
|
}
|
||||||
|
List<Map<String, Object?>> results = await WKDBHelper.shared.getDB()!.query(
|
||||||
WKDBConst.tableChannelMember,
|
WKDBConst.tableChannelMember,
|
||||||
where:
|
where:
|
||||||
"channel_id=? and channel_type=? and member_uid in (${WKDBConst.getPlaceholders(uidList.length)})",
|
"channel_id=? and channel_type=? and member_uid in (${WKDBConst.getPlaceholders(uidList.length)})",
|
||||||
@ -36,9 +39,12 @@ class ChannelMemberDB {
|
|||||||
String sql =
|
String sql =
|
||||||
"select max(version) version from ${WKDBConst.tableChannelMember} where channel_id =? and channel_type=? limit 0, 1";
|
"select max(version) version from ${WKDBConst.tableChannelMember} where channel_id =? and channel_type=? limit 0, 1";
|
||||||
int version = 0;
|
int version = 0;
|
||||||
|
if (WKDBHelper.shared.getDB() == null) {
|
||||||
List<Map<String, Object?>> results =
|
return version;
|
||||||
await WKDBHelper.shared.getDB().rawQuery(sql, [channelID, channelType]);
|
}
|
||||||
|
List<Map<String, Object?>> results = await WKDBHelper.shared
|
||||||
|
.getDB()!
|
||||||
|
.rawQuery(sql, [channelID, channelType]);
|
||||||
if (results.isNotEmpty) {
|
if (results.isNotEmpty) {
|
||||||
dynamic data = results[0];
|
dynamic data = results[0];
|
||||||
version = WKDBConst.readInt(data, 'version');
|
version = WKDBConst.readInt(data, 'version');
|
||||||
@ -51,8 +57,11 @@ class ChannelMemberDB {
|
|||||||
String sql =
|
String sql =
|
||||||
"select ${WKDBConst.tableChannelMember}.*,$channelCols from ${WKDBConst.tableChannelMember} left join ${WKDBConst.tableChannel} on ${WKDBConst.tableChannelMember}.member_uid = ${WKDBConst.tableChannel}.channel_id AND ${WKDBConst.tableChannel}.channel_type=1 where (${WKDBConst.tableChannelMember}.channel_id=? and ${WKDBConst.tableChannelMember}.channel_type=? and ${WKDBConst.tableChannelMember}.member_uid=?)";
|
"select ${WKDBConst.tableChannelMember}.*,$channelCols from ${WKDBConst.tableChannelMember} left join ${WKDBConst.tableChannel} on ${WKDBConst.tableChannelMember}.member_uid = ${WKDBConst.tableChannel}.channel_id AND ${WKDBConst.tableChannel}.channel_type=1 where (${WKDBConst.tableChannelMember}.channel_id=? and ${WKDBConst.tableChannelMember}.channel_type=? and ${WKDBConst.tableChannelMember}.member_uid=?)";
|
||||||
WKChannelMember? channelMember;
|
WKChannelMember? channelMember;
|
||||||
|
if (WKDBHelper.shared.getDB() == null) {
|
||||||
|
return channelMember;
|
||||||
|
}
|
||||||
List<Map<String, Object?>> list = await WKDBHelper.shared
|
List<Map<String, Object?>> list = await WKDBHelper.shared
|
||||||
.getDB()
|
.getDB()!
|
||||||
.rawQuery(sql, [channelId, channelType, memberUID]);
|
.rawQuery(sql, [channelId, channelType, memberUID]);
|
||||||
if (list.isNotEmpty) {
|
if (list.isNotEmpty) {
|
||||||
channelMember = WKDBConst.serializeChannelMember(list[0]);
|
channelMember = WKDBConst.serializeChannelMember(list[0]);
|
||||||
@ -65,8 +74,12 @@ class ChannelMemberDB {
|
|||||||
String sql =
|
String sql =
|
||||||
"select ${WKDBConst.tableChannelMember}.*,$channelCols from ${WKDBConst.tableChannelMember} LEFT JOIN ${WKDBConst.tableChannel} on ${WKDBConst.tableChannelMember}.member_uid=${WKDBConst.tableChannel}.channel_id and ${WKDBConst.tableChannel}.channel_type=1 where ${WKDBConst.tableChannelMember}.channel_id=? and ${WKDBConst.tableChannelMember}.channel_type=? and ${WKDBConst.tableChannelMember}.is_deleted=0 and ${WKDBConst.tableChannelMember}.status=1 order by ${WKDBConst.tableChannelMember}.role=1 desc,${WKDBConst.tableChannelMember}.role=2 desc,${WKDBConst.tableChannelMember}.created_at asc";
|
"select ${WKDBConst.tableChannelMember}.*,$channelCols from ${WKDBConst.tableChannelMember} LEFT JOIN ${WKDBConst.tableChannel} on ${WKDBConst.tableChannelMember}.member_uid=${WKDBConst.tableChannel}.channel_id and ${WKDBConst.tableChannel}.channel_type=1 where ${WKDBConst.tableChannelMember}.channel_id=? and ${WKDBConst.tableChannelMember}.channel_type=? and ${WKDBConst.tableChannelMember}.is_deleted=0 and ${WKDBConst.tableChannelMember}.status=1 order by ${WKDBConst.tableChannelMember}.role=1 desc,${WKDBConst.tableChannelMember}.role=2 desc,${WKDBConst.tableChannelMember}.created_at asc";
|
||||||
List<WKChannelMember> list = [];
|
List<WKChannelMember> list = [];
|
||||||
List<Map<String, Object?>> results =
|
if (WKDBHelper.shared.getDB() == null) {
|
||||||
await WKDBHelper.shared.getDB().rawQuery(sql, [channelId, channelType]);
|
return list;
|
||||||
|
}
|
||||||
|
List<Map<String, Object?>> results = await WKDBHelper.shared
|
||||||
|
.getDB()!
|
||||||
|
.rawQuery(sql, [channelId, channelType]);
|
||||||
if (results.isNotEmpty) {
|
if (results.isNotEmpty) {
|
||||||
for (Map<String, Object?> data in results) {
|
for (Map<String, Object?> data in results) {
|
||||||
list.add(WKDBConst.serializeChannelMember(data));
|
list.add(WKDBConst.serializeChannelMember(data));
|
||||||
@ -83,7 +96,10 @@ class ChannelMemberDB {
|
|||||||
args.addAll(uidList);
|
args.addAll(uidList);
|
||||||
|
|
||||||
List<WKChannelMember> list = [];
|
List<WKChannelMember> list = [];
|
||||||
List<Map<String, Object?>> results = await WKDBHelper.shared.getDB().query(
|
if (WKDBHelper.shared.getDB() == null) {
|
||||||
|
return list;
|
||||||
|
}
|
||||||
|
List<Map<String, Object?>> results = await WKDBHelper.shared.getDB()!.query(
|
||||||
WKDBConst.tableChannelMember,
|
WKDBConst.tableChannelMember,
|
||||||
where:
|
where:
|
||||||
"channel_id=? and channel_type=? and member_uid in (${WKDBConst.getPlaceholders(uidList.length)}) ",
|
"channel_id=? and channel_type=? and member_uid in (${WKDBConst.getPlaceholders(uidList.length)}) ",
|
||||||
@ -97,12 +113,15 @@ class ChannelMemberDB {
|
|||||||
}
|
}
|
||||||
|
|
||||||
insertList(List<WKChannelMember> allMemberList) {
|
insertList(List<WKChannelMember> allMemberList) {
|
||||||
|
if (WKDBHelper.shared.getDB() == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
List<Map<String, Object>> insertCVList = [];
|
List<Map<String, Object>> insertCVList = [];
|
||||||
for (WKChannelMember channelMember in allMemberList) {
|
for (WKChannelMember channelMember in allMemberList) {
|
||||||
insertCVList.add(getMap(channelMember));
|
insertCVList.add(getMap(channelMember));
|
||||||
}
|
}
|
||||||
if (insertCVList.isNotEmpty) {
|
if (insertCVList.isNotEmpty) {
|
||||||
WKDBHelper.shared.getDB().transaction((txn) async {
|
WKDBHelper.shared.getDB()!.transaction((txn) async {
|
||||||
if (insertCVList.isNotEmpty) {
|
if (insertCVList.isNotEmpty) {
|
||||||
for (Map<String, dynamic> value in insertCVList) {
|
for (Map<String, dynamic> value in insertCVList) {
|
||||||
txn.insert(WKDBConst.tableChannelMember, value,
|
txn.insert(WKDBConst.tableChannelMember, value,
|
||||||
|
@ -44,6 +44,8 @@ class WKDBConst {
|
|||||||
msg.viewed = readInt(data, 'viewed');
|
msg.viewed = readInt(data, 'viewed');
|
||||||
msg.viewedAt = readInt(data, 'viewed_at');
|
msg.viewedAt = readInt(data, 'viewed_at');
|
||||||
msg.topicID = readString(data, 'topic_id');
|
msg.topicID = readString(data, 'topic_id');
|
||||||
|
msg.expireTime = readInt(data, 'expire_time');
|
||||||
|
msg.expireTimestamp = readInt(data, 'expire_timestamp');
|
||||||
// 扩展表数据
|
// 扩展表数据
|
||||||
msg.wkMsgExtra = serializeMsgExtra(data);
|
msg.wkMsgExtra = serializeMsgExtra(data);
|
||||||
msg.localExtraMap = readDynamic(data, 'extra');
|
msg.localExtraMap = readDynamic(data, 'extra');
|
||||||
@ -76,6 +78,7 @@ class WKDBConst {
|
|||||||
extra.editedAt = readInt(data, 'edited_at');
|
extra.editedAt = readInt(data, 'edited_at');
|
||||||
extra.contentEdit = readString(data, 'content_edit');
|
extra.contentEdit = readString(data, 'content_edit');
|
||||||
extra.needUpload = readInt(data, 'need_upload');
|
extra.needUpload = readInt(data, 'need_upload');
|
||||||
|
extra.isPinned = readInt(data, 'is_pinned');
|
||||||
return extra;
|
return extra;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -224,7 +227,10 @@ class WKDBConst {
|
|||||||
if (result == Null || result == null) {
|
if (result == Null || result == null) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
return result as int;
|
if (result is int) {
|
||||||
|
return int.parse(result.toString());
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static String readString(dynamic data, String key) {
|
static String readString(dynamic data, String key) {
|
||||||
|
@ -21,8 +21,11 @@ class ConversationDB {
|
|||||||
String sql =
|
String sql =
|
||||||
"SELECT ${WKDBConst.tableConversation}.*,$channelCols,$extraCols FROM ${WKDBConst.tableConversation} LEFT JOIN ${WKDBConst.tableChannel} ON ${WKDBConst.tableConversation}.channel_id = ${WKDBConst.tableChannel}.channel_id AND ${WKDBConst.tableConversation}.channel_type = ${WKDBConst.tableChannel}.channel_type LEFT JOIN ${WKDBConst.tableConversationExtra} ON ${WKDBConst.tableConversation}.channel_id=${WKDBConst.tableConversationExtra}.channel_id AND ${WKDBConst.tableConversation}.channel_type=${WKDBConst.tableConversationExtra}.channel_type where ${WKDBConst.tableConversation}.is_deleted=0 order by last_msg_timestamp desc";
|
"SELECT ${WKDBConst.tableConversation}.*,$channelCols,$extraCols FROM ${WKDBConst.tableConversation} LEFT JOIN ${WKDBConst.tableChannel} ON ${WKDBConst.tableConversation}.channel_id = ${WKDBConst.tableChannel}.channel_id AND ${WKDBConst.tableConversation}.channel_type = ${WKDBConst.tableChannel}.channel_type LEFT JOIN ${WKDBConst.tableConversationExtra} ON ${WKDBConst.tableConversation}.channel_id=${WKDBConst.tableConversationExtra}.channel_id AND ${WKDBConst.tableConversation}.channel_type=${WKDBConst.tableConversationExtra}.channel_type where ${WKDBConst.tableConversation}.is_deleted=0 order by last_msg_timestamp desc";
|
||||||
List<WKUIConversationMsg> list = [];
|
List<WKUIConversationMsg> list = [];
|
||||||
|
if (WKDBHelper.shared.getDB() == null) {
|
||||||
|
return list;
|
||||||
|
}
|
||||||
List<Map<String, Object?>> results =
|
List<Map<String, Object?>> results =
|
||||||
await WKDBHelper.shared.getDB().rawQuery(sql);
|
await WKDBHelper.shared.getDB()!.rawQuery(sql);
|
||||||
if (results.isNotEmpty) {
|
if (results.isNotEmpty) {
|
||||||
for (Map<String, Object?> data in results) {
|
for (Map<String, Object?> data in results) {
|
||||||
WKConversationMsg msg = WKDBConst.serializeCoversation(data);
|
WKConversationMsg msg = WKDBConst.serializeCoversation(data);
|
||||||
@ -36,9 +39,12 @@ class ConversationDB {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Future<bool> delete(String channelID, int channelType) async {
|
Future<bool> delete(String channelID, int channelType) async {
|
||||||
|
if (WKDBHelper.shared.getDB() == null) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
Map<String, dynamic> data = HashMap<String, Object>();
|
Map<String, dynamic> data = HashMap<String, Object>();
|
||||||
data['is_deleted'] = 1;
|
data['is_deleted'] = 1;
|
||||||
int row = await WKDBHelper.shared.getDB().update(
|
int row = await WKDBHelper.shared.getDB()!.update(
|
||||||
WKDBConst.tableConversation, data,
|
WKDBConst.tableConversation, data,
|
||||||
where: "channel_id=? and channel_type=?",
|
where: "channel_id=? and channel_type=?",
|
||||||
whereArgs: [channelID, channelType]);
|
whereArgs: [channelID, channelType]);
|
||||||
@ -47,18 +53,21 @@ class ConversationDB {
|
|||||||
|
|
||||||
Future<WKUIConversationMsg?> insertOrUpdateWithConvMsg(
|
Future<WKUIConversationMsg?> insertOrUpdateWithConvMsg(
|
||||||
WKConversationMsg conversationMsg) async {
|
WKConversationMsg conversationMsg) async {
|
||||||
|
if (WKDBHelper.shared.getDB() == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
int row;
|
int row;
|
||||||
WKConversationMsg? lastMsg = await queryMsgByMsgChannelId(
|
WKConversationMsg? lastMsg = await queryMsgByMsgChannelId(
|
||||||
conversationMsg.channelID, conversationMsg.channelType);
|
conversationMsg.channelID, conversationMsg.channelType);
|
||||||
|
|
||||||
if (lastMsg == null || lastMsg.channelID.isEmpty) {
|
if (lastMsg == null || lastMsg.channelID.isEmpty) {
|
||||||
row = await WKDBHelper.shared.getDB().insert(
|
row = await WKDBHelper.shared.getDB()!.insert(
|
||||||
WKDBConst.tableConversation, getMap(conversationMsg, false),
|
WKDBConst.tableConversation, getMap(conversationMsg, false),
|
||||||
conflictAlgorithm: ConflictAlgorithm.replace);
|
conflictAlgorithm: ConflictAlgorithm.replace);
|
||||||
} else {
|
} else {
|
||||||
conversationMsg.unreadCount =
|
conversationMsg.unreadCount =
|
||||||
lastMsg.unreadCount + conversationMsg.unreadCount;
|
lastMsg.unreadCount + conversationMsg.unreadCount;
|
||||||
row = await WKDBHelper.shared.getDB().update(
|
row = await WKDBHelper.shared.getDB()!.update(
|
||||||
WKDBConst.tableConversation, getMap(conversationMsg, false),
|
WKDBConst.tableConversation, getMap(conversationMsg, false),
|
||||||
where: "channel_id=? and channel_type=?",
|
where: "channel_id=? and channel_type=?",
|
||||||
whereArgs: [conversationMsg.channelID, conversationMsg.channelType]);
|
whereArgs: [conversationMsg.channelID, conversationMsg.channelType]);
|
||||||
@ -72,8 +81,10 @@ class ConversationDB {
|
|||||||
Future<WKConversationMsg?> queryMsgByMsgChannelId(
|
Future<WKConversationMsg?> queryMsgByMsgChannelId(
|
||||||
String channelId, int channelType) async {
|
String channelId, int channelType) async {
|
||||||
WKConversationMsg? msg;
|
WKConversationMsg? msg;
|
||||||
|
if (WKDBHelper.shared.getDB() == null) {
|
||||||
List<Map<String, Object?>> list = await WKDBHelper.shared.getDB().query(
|
return msg;
|
||||||
|
}
|
||||||
|
List<Map<String, Object?>> list = await WKDBHelper.shared.getDB()!.query(
|
||||||
WKDBConst.tableConversation,
|
WKDBConst.tableConversation,
|
||||||
where: "channel_id=? and channel_type=?",
|
where: "channel_id=? and channel_type=?",
|
||||||
whereArgs: [channelId, channelType]);
|
whereArgs: [channelId, channelType]);
|
||||||
@ -85,11 +96,14 @@ class ConversationDB {
|
|||||||
|
|
||||||
Future<int> getMaxVersion() async {
|
Future<int> getMaxVersion() async {
|
||||||
int maxVersion = 0;
|
int maxVersion = 0;
|
||||||
|
if (WKDBHelper.shared.getDB() == null) {
|
||||||
|
return maxVersion;
|
||||||
|
}
|
||||||
String sql =
|
String sql =
|
||||||
"select max(version) version from ${WKDBConst.tableConversation} limit 0, 1";
|
"select max(version) version from ${WKDBConst.tableConversation} limit 0, 1";
|
||||||
|
|
||||||
List<Map<String, Object?>> list =
|
List<Map<String, Object?>> list =
|
||||||
await WKDBHelper.shared.getDB().rawQuery(sql);
|
await WKDBHelper.shared.getDB()!.rawQuery(sql);
|
||||||
if (list.isNotEmpty) {
|
if (list.isNotEmpty) {
|
||||||
dynamic data = list[0];
|
dynamic data = list[0];
|
||||||
maxVersion = WKDBConst.readInt(data, 'version');
|
maxVersion = WKDBConst.readInt(data, 'version');
|
||||||
@ -99,11 +113,14 @@ class ConversationDB {
|
|||||||
|
|
||||||
Future<String> getLastMsgSeqs() async {
|
Future<String> getLastMsgSeqs() async {
|
||||||
String lastMsgSeqs = "";
|
String lastMsgSeqs = "";
|
||||||
|
if (WKDBHelper.shared.getDB() == null) {
|
||||||
|
return lastMsgSeqs;
|
||||||
|
}
|
||||||
String sql =
|
String sql =
|
||||||
"select GROUP_CONCAT(channel_id||':'||channel_type||':'|| last_seq,'|') synckey from (select *,(select max(message_seq) from ${WKDBConst.tableMessage} where ${WKDBConst.tableMessage}.channel_id=${WKDBConst.tableConversation}.channel_id and ${WKDBConst.tableMessage}.channel_type=${WKDBConst.tableConversation}.channel_type limit 1) last_seq from ${WKDBConst.tableConversation}) cn where channel_id<>'' AND is_deleted=0";
|
"select GROUP_CONCAT(channel_id||':'||channel_type||':'|| last_seq,'|') synckey from (select *,(select max(message_seq) from ${WKDBConst.tableMessage} where ${WKDBConst.tableMessage}.channel_id=${WKDBConst.tableConversation}.channel_id and ${WKDBConst.tableMessage}.channel_type=${WKDBConst.tableConversation}.channel_type limit 1) last_seq from ${WKDBConst.tableConversation}) cn where channel_id<>'' AND is_deleted=0";
|
||||||
|
|
||||||
List<Map<String, Object?>> list =
|
List<Map<String, Object?>> list =
|
||||||
await WKDBHelper.shared.getDB().rawQuery(sql);
|
await WKDBHelper.shared.getDB()!.rawQuery(sql);
|
||||||
if (list.isNotEmpty) {
|
if (list.isNotEmpty) {
|
||||||
dynamic data = list[0];
|
dynamic data = list[0];
|
||||||
lastMsgSeqs = WKDBConst.readString(data, 'synckey');
|
lastMsgSeqs = WKDBConst.readString(data, 'synckey');
|
||||||
@ -114,7 +131,10 @@ class ConversationDB {
|
|||||||
Future<List<WKConversationMsg>> queryWithChannelIds(
|
Future<List<WKConversationMsg>> queryWithChannelIds(
|
||||||
List<String> channelIds) async {
|
List<String> channelIds) async {
|
||||||
List<WKConversationMsg> list = [];
|
List<WKConversationMsg> list = [];
|
||||||
List<Map<String, Object?>> results = await WKDBHelper.shared.getDB().query(
|
if (WKDBHelper.shared.getDB() == null) {
|
||||||
|
return list;
|
||||||
|
}
|
||||||
|
List<Map<String, Object?>> results = await WKDBHelper.shared.getDB()!.query(
|
||||||
WKDBConst.tableConversation,
|
WKDBConst.tableConversation,
|
||||||
where:
|
where:
|
||||||
"channel_id in (${WKDBConst.getPlaceholders(channelIds.length)})",
|
"channel_id in (${WKDBConst.getPlaceholders(channelIds.length)})",
|
||||||
@ -128,11 +148,14 @@ class ConversationDB {
|
|||||||
}
|
}
|
||||||
|
|
||||||
insetMsgs(List<WKConversationMsg> list) async {
|
insetMsgs(List<WKConversationMsg> list) async {
|
||||||
|
if (WKDBHelper.shared.getDB() == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
List<Map<String, dynamic>> insertList = [];
|
List<Map<String, dynamic>> insertList = [];
|
||||||
for (WKConversationMsg msg in list) {
|
for (WKConversationMsg msg in list) {
|
||||||
insertList.add(getMap(msg, true));
|
insertList.add(getMap(msg, true));
|
||||||
}
|
}
|
||||||
WKDBHelper.shared.getDB().transaction((txn) async {
|
WKDBHelper.shared.getDB()!.transaction((txn) async {
|
||||||
if (insertList.isNotEmpty) {
|
if (insertList.isNotEmpty) {
|
||||||
for (int i = 0; i < insertList.length; i++) {
|
for (int i = 0; i < insertList.length; i++) {
|
||||||
txn.insert(WKDBConst.tableConversation, insertList[i],
|
txn.insert(WKDBConst.tableConversation, insertList[i],
|
||||||
@ -143,6 +166,9 @@ class ConversationDB {
|
|||||||
}
|
}
|
||||||
|
|
||||||
insertMsgList(List<WKConversationMsg> list) async {
|
insertMsgList(List<WKConversationMsg> list) async {
|
||||||
|
if (WKDBHelper.shared.getDB() == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
List<String> channelIds = [];
|
List<String> channelIds = [];
|
||||||
for (var i = 0; i < list.length; i++) {
|
for (var i = 0; i < list.length; i++) {
|
||||||
if (list[i].channelID != '') {
|
if (list[i].channelID != '') {
|
||||||
@ -170,7 +196,7 @@ class ConversationDB {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (insertList.isNotEmpty || updateList.isNotEmpty) {
|
if (insertList.isNotEmpty || updateList.isNotEmpty) {
|
||||||
WKDBHelper.shared.getDB().transaction((txn) async {
|
WKDBHelper.shared.getDB()!.transaction((txn) async {
|
||||||
if (insertList.isNotEmpty) {
|
if (insertList.isNotEmpty) {
|
||||||
for (int i = 0; i < insertList.length; i++) {
|
for (int i = 0; i < insertList.length; i++) {
|
||||||
txn.insert(WKDBConst.tableConversation, insertList[i],
|
txn.insert(WKDBConst.tableConversation, insertList[i],
|
||||||
@ -189,16 +215,22 @@ class ConversationDB {
|
|||||||
}
|
}
|
||||||
|
|
||||||
clearAll() {
|
clearAll() {
|
||||||
WKDBHelper.shared.getDB().delete(WKDBConst.tableConversation);
|
if (WKDBHelper.shared.getDB() == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
WKDBHelper.shared.getDB()!.delete(WKDBConst.tableConversation);
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<int> queryExtraMaxVersion() async {
|
Future<int> queryExtraMaxVersion() async {
|
||||||
int maxVersion = 0;
|
int maxVersion = 0;
|
||||||
|
if (WKDBHelper.shared.getDB() == null) {
|
||||||
|
return maxVersion;
|
||||||
|
}
|
||||||
String sql =
|
String sql =
|
||||||
"select max(version) version from ${WKDBConst.tableConversationExtra}";
|
"select max(version) version from ${WKDBConst.tableConversationExtra}";
|
||||||
|
|
||||||
List<Map<String, Object?>> list =
|
List<Map<String, Object?>> list =
|
||||||
await WKDBHelper.shared.getDB().rawQuery(sql);
|
await WKDBHelper.shared.getDB()!.rawQuery(sql);
|
||||||
if (list.isNotEmpty) {
|
if (list.isNotEmpty) {
|
||||||
dynamic data = list[0];
|
dynamic data = list[0];
|
||||||
maxVersion = WKDBConst.readInt(data, 'version');
|
maxVersion = WKDBConst.readInt(data, 'version');
|
||||||
@ -207,16 +239,23 @@ class ConversationDB {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Future<int> clearAllRedDot() async {
|
Future<int> clearAllRedDot() async {
|
||||||
|
if (WKDBHelper.shared.getDB() == null) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
var map = <String, Object>{};
|
var map = <String, Object>{};
|
||||||
|
|
||||||
map['unread_count'] = 0;
|
map['unread_count'] = 0;
|
||||||
return await WKDBHelper.shared
|
return await WKDBHelper.shared
|
||||||
.getDB()
|
.getDB()!
|
||||||
.update(WKDBConst.tableConversation, map, where: "unread_count>0");
|
.update(WKDBConst.tableConversation, map, where: "unread_count>0");
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<int> updateWithField(
|
Future<int> updateWithField(
|
||||||
dynamic map, String channelID, int channelType) async {
|
dynamic map, String channelID, int channelType) async {
|
||||||
return await WKDBHelper.shared.getDB().update(
|
if (WKDBHelper.shared.getDB() == null) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
return await WKDBHelper.shared.getDB()!.update(
|
||||||
WKDBConst.tableConversation, map,
|
WKDBConst.tableConversation, map,
|
||||||
where: "channel_id=? and channel_type=?",
|
where: "channel_id=? and channel_type=?",
|
||||||
whereArgs: [channelID, channelType]);
|
whereArgs: [channelID, channelType]);
|
||||||
|
@ -18,13 +18,16 @@ class MessageDB {
|
|||||||
static final MessageDB _instance = MessageDB._privateConstructor();
|
static final MessageDB _instance = MessageDB._privateConstructor();
|
||||||
static MessageDB get shared => _instance;
|
static MessageDB get shared => _instance;
|
||||||
final String extraCols =
|
final String extraCols =
|
||||||
"IFNULL(${WKDBConst.tableMessageExtra}.readed,0) as readed,IFNULL(${WKDBConst.tableMessageExtra}.readed_count,0) as readed_count,IFNULL(${WKDBConst.tableMessageExtra}.unread_count,0) as unread_count,IFNULL(${WKDBConst.tableMessageExtra}.revoke,0) as revoke,IFNULL(${WKDBConst.tableMessageExtra}.revoker,'') as revoker,IFNULL(${WKDBConst.tableMessageExtra}.extra_version,0) as extra_version,IFNULL(${WKDBConst.tableMessageExtra}.is_mutual_deleted,0) as is_mutual_deleted,IFNULL(${WKDBConst.tableMessageExtra}.need_upload,0) as need_upload,IFNULL(${WKDBConst.tableMessageExtra}.content_edit,'') as content_edit,IFNULL(${WKDBConst.tableMessageExtra}.edited_at,0) as edited_at";
|
"IFNULL(${WKDBConst.tableMessageExtra}.readed,0) as readed,IFNULL(${WKDBConst.tableMessageExtra}.readed_count,0) as readed_count,IFNULL(${WKDBConst.tableMessageExtra}.unread_count,0) as unread_count,IFNULL(${WKDBConst.tableMessageExtra}.revoke,0) as revoke,IFNULL(${WKDBConst.tableMessageExtra}.revoker,'') as revoker,IFNULL(${WKDBConst.tableMessageExtra}.extra_version,0) as extra_version,IFNULL(${WKDBConst.tableMessageExtra}.is_mutual_deleted,0) as is_mutual_deleted,IFNULL(${WKDBConst.tableMessageExtra}.need_upload,0) as need_upload,IFNULL(${WKDBConst.tableMessageExtra}.content_edit,'') as content_edit,IFNULL(${WKDBConst.tableMessageExtra}.edited_at,0) as edited_at,IFNULL(${WKDBConst.tableMessageExtra}.is_pinned,0) as is_pinned";
|
||||||
final String messageCols =
|
final String messageCols =
|
||||||
"${WKDBConst.tableMessage}.client_seq,${WKDBConst.tableMessage}.message_id,${WKDBConst.tableMessage}.message_seq,${WKDBConst.tableMessage}.channel_id,${WKDBConst.tableMessage}.channel_type,${WKDBConst.tableMessage}.timestamp,${WKDBConst.tableMessage}.topic_id,${WKDBConst.tableMessage}.from_uid,${WKDBConst.tableMessage}.type,${WKDBConst.tableMessage}.content,${WKDBConst.tableMessage}.status,${WKDBConst.tableMessage}.voice_status,${WKDBConst.tableMessage}.created_at,${WKDBConst.tableMessage}.updated_at,${WKDBConst.tableMessage}.searchable_word,${WKDBConst.tableMessage}.client_msg_no,${WKDBConst.tableMessage}.setting,${WKDBConst.tableMessage}.order_seq,${WKDBConst.tableMessage}.extra,${WKDBConst.tableMessage}.is_deleted,${WKDBConst.tableMessage}.flame,${WKDBConst.tableMessage}.flame_second,${WKDBConst.tableMessage}.viewed,${WKDBConst.tableMessage}.viewed_at";
|
"${WKDBConst.tableMessage}.client_seq,${WKDBConst.tableMessage}.message_id,${WKDBConst.tableMessage}.message_seq,${WKDBConst.tableMessage}.channel_id,${WKDBConst.tableMessage}.channel_type,${WKDBConst.tableMessage}.timestamp,${WKDBConst.tableMessage}.topic_id,${WKDBConst.tableMessage}.from_uid,${WKDBConst.tableMessage}.type,${WKDBConst.tableMessage}.content,${WKDBConst.tableMessage}.status,${WKDBConst.tableMessage}.voice_status,${WKDBConst.tableMessage}.created_at,${WKDBConst.tableMessage}.updated_at,${WKDBConst.tableMessage}.searchable_word,${WKDBConst.tableMessage}.client_msg_no,${WKDBConst.tableMessage}.setting,${WKDBConst.tableMessage}.order_seq,${WKDBConst.tableMessage}.extra,${WKDBConst.tableMessage}.is_deleted,${WKDBConst.tableMessage}.flame,${WKDBConst.tableMessage}.flame_second,${WKDBConst.tableMessage}.viewed,${WKDBConst.tableMessage}.viewed_at,${WKDBConst.tableMessage}.expire_time,${WKDBConst.tableMessage}.expire_timestamp";
|
||||||
|
|
||||||
Future<bool> isExist(String clientMsgNo) async {
|
Future<bool> isExist(String clientMsgNo) async {
|
||||||
bool isExist = false;
|
bool isExist = false;
|
||||||
List<Map<String, Object?>> list = await WKDBHelper.shared.getDB().query(
|
if (WKDBHelper.shared.getDB() == null) {
|
||||||
|
return isExist;
|
||||||
|
}
|
||||||
|
List<Map<String, Object?>> list = await WKDBHelper.shared.getDB()!.query(
|
||||||
WKDBConst.tableMessage,
|
WKDBConst.tableMessage,
|
||||||
where: "client_msg_no=?",
|
where: "client_msg_no=?",
|
||||||
whereArgs: [clientMsgNo]);
|
whereArgs: [clientMsgNo]);
|
||||||
@ -46,25 +49,34 @@ class MessageDB {
|
|||||||
msg.clientMsgNO = WKIM.shared.messageManager.generateClientMsgNo();
|
msg.clientMsgNO = WKIM.shared.messageManager.generateClientMsgNo();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return await WKDBHelper.shared.getDB().insert(
|
return await WKDBHelper.shared.getDB()!.insert(
|
||||||
WKDBConst.tableMessage, getMap(msg),
|
WKDBConst.tableMessage, getMap(msg),
|
||||||
conflictAlgorithm: ConflictAlgorithm.replace);
|
conflictAlgorithm: ConflictAlgorithm.replace);
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<int> updateMsg(WKMsg msg) async {
|
Future<int> updateMsg(WKMsg msg) async {
|
||||||
return await WKDBHelper.shared.getDB().update(
|
if (WKDBHelper.shared.getDB() == null) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
return await WKDBHelper.shared.getDB()!.update(
|
||||||
WKDBConst.tableMessage, getMap(msg),
|
WKDBConst.tableMessage, getMap(msg),
|
||||||
where: "client_seq=?", whereArgs: [msg.clientSeq]);
|
where: "client_seq=?", whereArgs: [msg.clientSeq]);
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<int> updateMsgWithField(dynamic map, int clientSeq) async {
|
Future<int> updateMsgWithField(dynamic map, int clientSeq) async {
|
||||||
return await WKDBHelper.shared.getDB().update(WKDBConst.tableMessage, map,
|
if (WKDBHelper.shared.getDB() == null) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
return await WKDBHelper.shared.getDB()!.update(WKDBConst.tableMessage, map,
|
||||||
where: "client_seq=?", whereArgs: [clientSeq]);
|
where: "client_seq=?", whereArgs: [clientSeq]);
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<int> updateMsgWithFieldAndClientMsgNo(
|
Future<int> updateMsgWithFieldAndClientMsgNo(
|
||||||
dynamic map, String clientMsgNO) async {
|
dynamic map, String clientMsgNO) async {
|
||||||
return await WKDBHelper.shared.getDB().update(WKDBConst.tableMessage, map,
|
if (WKDBHelper.shared.getDB() == null) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
return await WKDBHelper.shared.getDB()!.update(WKDBConst.tableMessage, map,
|
||||||
where: "client_msg_no=?", whereArgs: [clientMsgNO]);
|
where: "client_msg_no=?", whereArgs: [clientMsgNO]);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -72,9 +84,11 @@ class MessageDB {
|
|||||||
WKMsg? wkMsg;
|
WKMsg? wkMsg;
|
||||||
String sql =
|
String sql =
|
||||||
"select $messageCols,$extraCols from ${WKDBConst.tableMessage} LEFT JOIN ${WKDBConst.tableMessageExtra} ON ${WKDBConst.tableMessage}.message_id=${WKDBConst.tableMessageExtra}.message_id WHERE ${WKDBConst.tableMessage}.client_msg_no=?";
|
"select $messageCols,$extraCols from ${WKDBConst.tableMessage} LEFT JOIN ${WKDBConst.tableMessageExtra} ON ${WKDBConst.tableMessage}.message_id=${WKDBConst.tableMessageExtra}.message_id WHERE ${WKDBConst.tableMessage}.client_msg_no=?";
|
||||||
|
if (WKDBHelper.shared.getDB() == null) {
|
||||||
|
return wkMsg;
|
||||||
|
}
|
||||||
List<Map<String, Object?>> list =
|
List<Map<String, Object?>> list =
|
||||||
await WKDBHelper.shared.getDB().rawQuery(sql, [clientMsgNo]);
|
await WKDBHelper.shared.getDB()!.rawQuery(sql, [clientMsgNo]);
|
||||||
if (list.isNotEmpty) {
|
if (list.isNotEmpty) {
|
||||||
wkMsg = WKDBConst.serializeWKMsg(list[0]);
|
wkMsg = WKDBConst.serializeWKMsg(list[0]);
|
||||||
}
|
}
|
||||||
@ -89,9 +103,11 @@ class MessageDB {
|
|||||||
WKMsg? wkMsg;
|
WKMsg? wkMsg;
|
||||||
String sql =
|
String sql =
|
||||||
"select $messageCols,$extraCols from ${WKDBConst.tableMessage} LEFT JOIN ${WKDBConst.tableMessageExtra} ON ${WKDBConst.tableMessage}.message_id=${WKDBConst.tableMessageExtra}.message_id WHERE ${WKDBConst.tableMessage}.client_seq=?";
|
"select $messageCols,$extraCols from ${WKDBConst.tableMessage} LEFT JOIN ${WKDBConst.tableMessageExtra} ON ${WKDBConst.tableMessage}.message_id=${WKDBConst.tableMessageExtra}.message_id WHERE ${WKDBConst.tableMessage}.client_seq=?";
|
||||||
|
if (WKDBHelper.shared.getDB() == null) {
|
||||||
|
return wkMsg;
|
||||||
|
}
|
||||||
List<Map<String, Object?>> list =
|
List<Map<String, Object?>> list =
|
||||||
await WKDBHelper.shared.getDB().rawQuery(sql, [clientSeq]);
|
await WKDBHelper.shared.getDB()!.rawQuery(sql, [clientSeq]);
|
||||||
if (list.isNotEmpty) {
|
if (list.isNotEmpty) {
|
||||||
wkMsg = WKDBConst.serializeWKMsg(list[0]);
|
wkMsg = WKDBConst.serializeWKMsg(list[0]);
|
||||||
}
|
}
|
||||||
@ -106,8 +122,11 @@ class MessageDB {
|
|||||||
String sql =
|
String sql =
|
||||||
"select $messageCols,$extraCols from ${WKDBConst.tableMessage} LEFT JOIN ${WKDBConst.tableMessageExtra} ON ${WKDBConst.tableMessage}.message_id=${WKDBConst.tableMessageExtra}.message_id WHERE ${WKDBConst.tableMessage}.message_id in (${WKDBConst.getPlaceholders(messageIds.length)})";
|
"select $messageCols,$extraCols from ${WKDBConst.tableMessage} LEFT JOIN ${WKDBConst.tableMessageExtra} ON ${WKDBConst.tableMessage}.message_id=${WKDBConst.tableMessageExtra}.message_id WHERE ${WKDBConst.tableMessage}.message_id in (${WKDBConst.getPlaceholders(messageIds.length)})";
|
||||||
List<WKMsg> list = [];
|
List<WKMsg> list = [];
|
||||||
|
if (WKDBHelper.shared.getDB() == null) {
|
||||||
|
return list;
|
||||||
|
}
|
||||||
List<Map<String, Object?>> results =
|
List<Map<String, Object?>> results =
|
||||||
await WKDBHelper.shared.getDB().rawQuery(sql, messageIds);
|
await WKDBHelper.shared.getDB()!.rawQuery(sql, messageIds);
|
||||||
if (results.isNotEmpty) {
|
if (results.isNotEmpty) {
|
||||||
for (Map<String, Object?> data in results) {
|
for (Map<String, Object?> data in results) {
|
||||||
list.add(WKDBConst.serializeWKMsg(data));
|
list.add(WKDBConst.serializeWKMsg(data));
|
||||||
@ -118,10 +137,14 @@ class MessageDB {
|
|||||||
|
|
||||||
Future<int> queryMaxOrderSeq(String channelID, int channelType) async {
|
Future<int> queryMaxOrderSeq(String channelID, int channelType) async {
|
||||||
int maxOrderSeq = 0;
|
int maxOrderSeq = 0;
|
||||||
|
if (WKDBHelper.shared.getDB() == null) {
|
||||||
|
return maxOrderSeq;
|
||||||
|
}
|
||||||
String sql =
|
String sql =
|
||||||
"select max(order_seq) order_seq from ${WKDBConst.tableMessage} where channel_id =? and channel_type=? and type<>99 and type<>0 and is_deleted=0";
|
"select max(order_seq) order_seq from ${WKDBConst.tableMessage} where channel_id =? and channel_type=? and type<>99 and type<>0 and is_deleted=0";
|
||||||
List<Map<String, Object?>> list =
|
List<Map<String, Object?>> list = await WKDBHelper.shared
|
||||||
await WKDBHelper.shared.getDB().rawQuery(sql, [channelID, channelType]);
|
.getDB()!
|
||||||
|
.rawQuery(sql, [channelID, channelType]);
|
||||||
if (list.isNotEmpty) {
|
if (list.isNotEmpty) {
|
||||||
dynamic data = list[0];
|
dynamic data = list[0];
|
||||||
maxOrderSeq = WKDBConst.readInt(data, 'order_seq');
|
maxOrderSeq = WKDBConst.readInt(data, 'order_seq');
|
||||||
@ -133,8 +156,12 @@ class MessageDB {
|
|||||||
String sql =
|
String sql =
|
||||||
"SELECT max(message_seq) message_seq FROM ${WKDBConst.tableMessage} WHERE channel_id=? AND channel_type=?";
|
"SELECT max(message_seq) message_seq FROM ${WKDBConst.tableMessage} WHERE channel_id=? AND channel_type=?";
|
||||||
int messageSeq = 0;
|
int messageSeq = 0;
|
||||||
List<Map<String, Object?>> list =
|
if (WKDBHelper.shared.getDB() == null) {
|
||||||
await WKDBHelper.shared.getDB().rawQuery(sql, [channelID, channelType]);
|
return messageSeq;
|
||||||
|
}
|
||||||
|
List<Map<String, Object?>> list = await WKDBHelper.shared
|
||||||
|
.getDB()!
|
||||||
|
.rawQuery(sql, [channelID, channelType]);
|
||||||
if (list.isNotEmpty) {
|
if (list.isNotEmpty) {
|
||||||
dynamic data = list[0];
|
dynamic data = list[0];
|
||||||
messageSeq = WKDBConst.readInt(data, 'message_seq');
|
messageSeq = WKDBConst.readInt(data, 'message_seq');
|
||||||
@ -145,10 +172,13 @@ class MessageDB {
|
|||||||
Future<int> getOrderSeq(
|
Future<int> getOrderSeq(
|
||||||
String channelID, int channelType, int maxOrderSeq, int limit) async {
|
String channelID, int channelType, int maxOrderSeq, int limit) async {
|
||||||
int minOrderSeq = 0;
|
int minOrderSeq = 0;
|
||||||
|
if (WKDBHelper.shared.getDB() == null) {
|
||||||
|
return minOrderSeq;
|
||||||
|
}
|
||||||
String sql =
|
String sql =
|
||||||
"select order_seq from ${WKDBConst.tableMessage} where channel_id=? and channel_type=? and type<>99 and order_seq <=? order by order_seq desc limit ?";
|
"select order_seq from ${WKDBConst.tableMessage} where channel_id=? and channel_type=? and type<>99 and order_seq <=? order by order_seq desc limit ?";
|
||||||
List<Map<String, Object?>> list = await WKDBHelper.shared
|
List<Map<String, Object?>> list = await WKDBHelper.shared
|
||||||
.getDB()
|
.getDB()!
|
||||||
.rawQuery(sql, [channelID, channelType, maxOrderSeq, limit]);
|
.rawQuery(sql, [channelID, channelType, maxOrderSeq, limit]);
|
||||||
if (list.isNotEmpty) {
|
if (list.isNotEmpty) {
|
||||||
dynamic data = list[0];
|
dynamic data = list[0];
|
||||||
@ -195,7 +225,7 @@ class MessageDB {
|
|||||||
List<String> replyMsgIds = [];
|
List<String> replyMsgIds = [];
|
||||||
List<String> fromUIDs = [];
|
List<String> fromUIDs = [];
|
||||||
List<Map<String, Object?>> results =
|
List<Map<String, Object?>> results =
|
||||||
await WKDBHelper.shared.getDB().rawQuery(sql, args);
|
await WKDBHelper.shared.getDB()!.rawQuery(sql, args);
|
||||||
if (results.isNotEmpty) {
|
if (results.isNotEmpty) {
|
||||||
WKChannel? wkChannel =
|
WKChannel? wkChannel =
|
||||||
await ChannelDB.shared.query(channelId, channelType);
|
await ChannelDB.shared.query(channelId, channelType);
|
||||||
@ -502,8 +532,11 @@ class MessageDB {
|
|||||||
String sql =
|
String sql =
|
||||||
"select count(*) num from ${WKDBConst.tableMessage} where channel_id=? and channel_type=? and message_seq>? and message_seq<? and is_deleted=1";
|
"select count(*) num from ${WKDBConst.tableMessage} where channel_id=? and channel_type=? and message_seq>? and message_seq<? and is_deleted=1";
|
||||||
int num = 0;
|
int num = 0;
|
||||||
|
if (WKDBHelper.shared.getDB() == null) {
|
||||||
|
return num;
|
||||||
|
}
|
||||||
List<Map<String, Object?>> list = await WKDBHelper.shared
|
List<Map<String, Object?>> list = await WKDBHelper.shared
|
||||||
.getDB()
|
.getDB()!
|
||||||
.rawQuery(sql, [channelID, channelType, minMessageSeq, maxMessageSeq]);
|
.rawQuery(sql, [channelID, channelType, minMessageSeq, maxMessageSeq]);
|
||||||
if (list.isNotEmpty) {
|
if (list.isNotEmpty) {
|
||||||
dynamic data = list[0];
|
dynamic data = list[0];
|
||||||
@ -523,9 +556,11 @@ class MessageDB {
|
|||||||
sql =
|
sql =
|
||||||
"select message_seq from ${WKDBConst.tableMessage} where channel_id=? and channel_type=? and order_seq<? and message_seq<>0 order by message_seq asc limit 1";
|
"select message_seq from ${WKDBConst.tableMessage} where channel_id=? and channel_type=? and order_seq<? and message_seq<>0 order by message_seq asc limit 1";
|
||||||
}
|
}
|
||||||
|
if (WKDBHelper.shared.getDB() == null) {
|
||||||
|
return messageSeq;
|
||||||
|
}
|
||||||
List<Map<String, Object?>> list = await WKDBHelper.shared
|
List<Map<String, Object?>> list = await WKDBHelper.shared
|
||||||
.getDB()
|
.getDB()!
|
||||||
.rawQuery(sql, [channelID, channelType, oldestOrderSeq]);
|
.rawQuery(sql, [channelID, channelType, oldestOrderSeq]);
|
||||||
if (list.isNotEmpty) {
|
if (list.isNotEmpty) {
|
||||||
dynamic data = list[0];
|
dynamic data = list[0];
|
||||||
@ -595,7 +630,7 @@ class MessageDB {
|
|||||||
cvList.add(getMap(wkMsg));
|
cvList.add(getMap(wkMsg));
|
||||||
}
|
}
|
||||||
if (cvList.isNotEmpty) {
|
if (cvList.isNotEmpty) {
|
||||||
WKDBHelper.shared.getDB().transaction((txn) async {
|
WKDBHelper.shared.getDB()!.transaction((txn) async {
|
||||||
for (int i = 0; i < cvList.length; i++) {
|
for (int i = 0; i < cvList.length; i++) {
|
||||||
txn.insert(WKDBConst.tableMessage, cvList[i],
|
txn.insert(WKDBConst.tableMessage, cvList[i],
|
||||||
conflictAlgorithm: ConflictAlgorithm.replace);
|
conflictAlgorithm: ConflictAlgorithm.replace);
|
||||||
@ -607,7 +642,10 @@ class MessageDB {
|
|||||||
|
|
||||||
Future<List<WKMsg>> queryWithClientMsgNos(List<String> clientMsgNos) async {
|
Future<List<WKMsg>> queryWithClientMsgNos(List<String> clientMsgNos) async {
|
||||||
List<WKMsg> msgs = [];
|
List<WKMsg> msgs = [];
|
||||||
List<Map<String, Object?>> results = await WKDBHelper.shared.getDB().query(
|
if (WKDBHelper.shared.getDB() == null) {
|
||||||
|
return msgs;
|
||||||
|
}
|
||||||
|
List<Map<String, Object?>> results = await WKDBHelper.shared.getDB()!.query(
|
||||||
WKDBConst.tableMessage,
|
WKDBConst.tableMessage,
|
||||||
where:
|
where:
|
||||||
"client_msg_no in (${WKDBConst.getPlaceholders(clientMsgNos.length)})",
|
"client_msg_no in (${WKDBConst.getPlaceholders(clientMsgNos.length)})",
|
||||||
@ -628,7 +666,7 @@ class MessageDB {
|
|||||||
for (int i = 0, size = list.length; i < size; i++) {
|
for (int i = 0, size = list.length; i < size; i++) {
|
||||||
insertCVList.add(getExtraMap(list[i]));
|
insertCVList.add(getExtraMap(list[i]));
|
||||||
}
|
}
|
||||||
WKDBHelper.shared.getDB().transaction((txn) async {
|
WKDBHelper.shared.getDB()!.transaction((txn) async {
|
||||||
if (insertCVList.isNotEmpty) {
|
if (insertCVList.isNotEmpty) {
|
||||||
for (int i = 0; i < insertCVList.length; i++) {
|
for (int i = 0; i < insertCVList.length; i++) {
|
||||||
txn.insert(WKDBConst.tableMessageExtra, insertCVList[i],
|
txn.insert(WKDBConst.tableMessageExtra, insertCVList[i],
|
||||||
@ -663,7 +701,7 @@ class MessageDB {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (insertCVList.isNotEmpty || updateCVList.isNotEmpty) {
|
if (insertCVList.isNotEmpty || updateCVList.isNotEmpty) {
|
||||||
WKDBHelper.shared.getDB().transaction((txn) async {
|
WKDBHelper.shared.getDB()!.transaction((txn) async {
|
||||||
if (insertCVList.isNotEmpty) {
|
if (insertCVList.isNotEmpty) {
|
||||||
for (int i = 0; i < insertCVList.length; i++) {
|
for (int i = 0; i < insertCVList.length; i++) {
|
||||||
txn.insert(WKDBConst.tableMessageExtra, insertCVList[i],
|
txn.insert(WKDBConst.tableMessageExtra, insertCVList[i],
|
||||||
@ -687,8 +725,9 @@ class MessageDB {
|
|||||||
int extraVersion = 0;
|
int extraVersion = 0;
|
||||||
String sql =
|
String sql =
|
||||||
"select max(extra_version) extra_version from ${WKDBConst.tableMessageExtra} where channel_id =? and channel_type=?";
|
"select max(extra_version) extra_version from ${WKDBConst.tableMessageExtra} where channel_id =? and channel_type=?";
|
||||||
List<Map<String, Object?>> list =
|
List<Map<String, Object?>> list = await WKDBHelper.shared
|
||||||
await WKDBHelper.shared.getDB().rawQuery(sql, [channelID, channelType]);
|
.getDB()!
|
||||||
|
.rawQuery(sql, [channelID, channelType]);
|
||||||
if (list.isNotEmpty) {
|
if (list.isNotEmpty) {
|
||||||
dynamic data = list[0];
|
dynamic data = list[0];
|
||||||
extraVersion = WKDBConst.readInt(data, 'extra_version');
|
extraVersion = WKDBConst.readInt(data, 'extra_version');
|
||||||
@ -701,7 +740,7 @@ class MessageDB {
|
|||||||
"select * from ${WKDBConst.tableMessageExtra} where need_upload=?";
|
"select * from ${WKDBConst.tableMessageExtra} where need_upload=?";
|
||||||
List<WKMsgExtra> list = [];
|
List<WKMsgExtra> list = [];
|
||||||
List<Map<String, Object?>> results =
|
List<Map<String, Object?>> results =
|
||||||
await WKDBHelper.shared.getDB().rawQuery(sql, [needUpload]);
|
await WKDBHelper.shared.getDB()!.rawQuery(sql, [needUpload]);
|
||||||
if (results.isNotEmpty) {
|
if (results.isNotEmpty) {
|
||||||
for (Map<String, Object?> data in results) {
|
for (Map<String, Object?> data in results) {
|
||||||
list.add(WKDBConst.serializeMsgExtra(data));
|
list.add(WKDBConst.serializeMsgExtra(data));
|
||||||
@ -713,7 +752,10 @@ class MessageDB {
|
|||||||
|
|
||||||
Future<WKMsgExtra?> queryMsgExtraWithMsgID(String messageID) async {
|
Future<WKMsgExtra?> queryMsgExtraWithMsgID(String messageID) async {
|
||||||
WKMsgExtra? msgExtra;
|
WKMsgExtra? msgExtra;
|
||||||
List<Map<String, Object?>> list = await WKDBHelper.shared.getDB().query(
|
if (WKDBHelper.shared.getDB() == null) {
|
||||||
|
return msgExtra;
|
||||||
|
}
|
||||||
|
List<Map<String, Object?>> list = await WKDBHelper.shared.getDB()!.query(
|
||||||
WKDBConst.tableMessageExtra,
|
WKDBConst.tableMessageExtra,
|
||||||
where: "message_id=?",
|
where: "message_id=?",
|
||||||
whereArgs: [messageID]);
|
whereArgs: [messageID]);
|
||||||
@ -725,7 +767,10 @@ class MessageDB {
|
|||||||
|
|
||||||
Future<List<WKMsgExtra>> queryMsgExtrasWithMsgIds(List<String> msgIds) async {
|
Future<List<WKMsgExtra>> queryMsgExtrasWithMsgIds(List<String> msgIds) async {
|
||||||
List<WKMsgExtra> list = [];
|
List<WKMsgExtra> list = [];
|
||||||
List<Map<String, Object?>> results = await WKDBHelper.shared.getDB().query(
|
if (WKDBHelper.shared.getDB() == null) {
|
||||||
|
return list;
|
||||||
|
}
|
||||||
|
List<Map<String, Object?>> results = await WKDBHelper.shared.getDB()!.query(
|
||||||
WKDBConst.tableMessageExtra,
|
WKDBConst.tableMessageExtra,
|
||||||
where: "message_id in (${WKDBConst.getPlaceholders(msgIds.length)})",
|
where: "message_id in (${WKDBConst.getPlaceholders(msgIds.length)})",
|
||||||
whereArgs: msgIds);
|
whereArgs: msgIds);
|
||||||
@ -739,10 +784,13 @@ class MessageDB {
|
|||||||
}
|
}
|
||||||
|
|
||||||
updateSendingMsgFail() {
|
updateSendingMsgFail() {
|
||||||
|
if (WKDBHelper.shared.getDB() == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
var map = <String, Object>{};
|
var map = <String, Object>{};
|
||||||
map['status'] = WKSendMsgResult.sendFail;
|
map['status'] = WKSendMsgResult.sendFail;
|
||||||
WKDBHelper.shared
|
WKDBHelper.shared
|
||||||
.getDB()
|
.getDB()!
|
||||||
.update(WKDBConst.tableMessage, map, where: 'status=0');
|
.update(WKDBConst.tableMessage, map, where: 'status=0');
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -751,8 +799,9 @@ class MessageDB {
|
|||||||
WKMsg? wkMsg;
|
WKMsg? wkMsg;
|
||||||
String sql =
|
String sql =
|
||||||
"select * from ${WKDBConst.tableMessage} where channel_id=? and channel_type=? and is_deleted=0 and type<>0 and type<>99 order by order_seq desc limit 1";
|
"select * from ${WKDBConst.tableMessage} where channel_id=? and channel_type=? and is_deleted=0 and type<>0 and type<>99 order by order_seq desc limit 1";
|
||||||
List<Map<String, Object?>> list =
|
List<Map<String, Object?>> list = await WKDBHelper.shared
|
||||||
await WKDBHelper.shared.getDB().rawQuery(sql, [channelID, channelType]);
|
.getDB()!
|
||||||
|
.rawQuery(sql, [channelID, channelType]);
|
||||||
if (list.isNotEmpty) {
|
if (list.isNotEmpty) {
|
||||||
dynamic data = list[0];
|
dynamic data = list[0];
|
||||||
if (data != null) {
|
if (data != null) {
|
||||||
@ -767,17 +816,23 @@ class MessageDB {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Future<int> deleteWithMessageIDs(List<String> msgIds) async {
|
Future<int> deleteWithMessageIDs(List<String> msgIds) async {
|
||||||
|
if (WKDBHelper.shared.getDB() == null) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
var map = <String, Object>{};
|
var map = <String, Object>{};
|
||||||
map['is_deleted'] = 1;
|
map['is_deleted'] = 1;
|
||||||
return await WKDBHelper.shared.getDB().update(WKDBConst.tableMessage, map,
|
return await WKDBHelper.shared.getDB()!.update(WKDBConst.tableMessage, map,
|
||||||
where: "message_id in (${WKDBConst.getPlaceholders(msgIds.length)})",
|
where: "message_id in (${WKDBConst.getPlaceholders(msgIds.length)})",
|
||||||
whereArgs: msgIds);
|
whereArgs: msgIds);
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<int> deleteWithChannel(String channelId, int channelType) async {
|
Future<int> deleteWithChannel(String channelId, int channelType) async {
|
||||||
|
if (WKDBHelper.shared.getDB() == null) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
var map = <String, Object>{};
|
var map = <String, Object>{};
|
||||||
map['is_deleted'] = 1;
|
map['is_deleted'] = 1;
|
||||||
return await WKDBHelper.shared.getDB().update(WKDBConst.tableMessage, map,
|
return await WKDBHelper.shared.getDB()!.update(WKDBConst.tableMessage, map,
|
||||||
where: "channel_id=? and channel_type=?",
|
where: "channel_id=? and channel_type=?",
|
||||||
whereArgs: [channelId, channelType]);
|
whereArgs: [channelId, channelType]);
|
||||||
}
|
}
|
||||||
@ -800,6 +855,8 @@ class MessageDB {
|
|||||||
map['viewed'] = msg.viewed;
|
map['viewed'] = msg.viewed;
|
||||||
map['viewed_at'] = msg.viewedAt;
|
map['viewed_at'] = msg.viewedAt;
|
||||||
map['topic_id'] = msg.topicID;
|
map['topic_id'] = msg.topicID;
|
||||||
|
map['expire_time'] = msg.expireTime;
|
||||||
|
map['expire_timestamp'] = msg.expireTimestamp;
|
||||||
if (msg.messageContent != null) {
|
if (msg.messageContent != null) {
|
||||||
map['searchable_word'] = msg.messageContent!.searchableWord();
|
map['searchable_word'] = msg.messageContent!.searchableWord();
|
||||||
} else {
|
} else {
|
||||||
@ -829,6 +886,7 @@ class MessageDB {
|
|||||||
map['edited_at'] = extra.editedAt;
|
map['edited_at'] = extra.editedAt;
|
||||||
map['need_upload'] = extra.needUpload;
|
map['need_upload'] = extra.needUpload;
|
||||||
map['message_id'] = extra.messageID;
|
map['message_id'] = extra.messageID;
|
||||||
|
map['is_pinned'] = extra.isPinned;
|
||||||
return map;
|
return map;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -14,8 +14,9 @@ class ReactionDB {
|
|||||||
"select max(seq) seq from ${WKDBConst.tableMessageReaction} where channel_id=? and channel_type=? limit 0, 1";
|
"select max(seq) seq from ${WKDBConst.tableMessageReaction} where channel_id=? and channel_type=? limit 0, 1";
|
||||||
int version = 0;
|
int version = 0;
|
||||||
|
|
||||||
List<Map<String, Object?>> list =
|
List<Map<String, Object?>> list = await WKDBHelper.shared
|
||||||
await WKDBHelper.shared.getDB().rawQuery(sql, [channelID, channelType]);
|
.getDB()!
|
||||||
|
.rawQuery(sql, [channelID, channelType]);
|
||||||
if (list.isNotEmpty) {
|
if (list.isNotEmpty) {
|
||||||
dynamic data = list[0];
|
dynamic data = list[0];
|
||||||
if (data != null) {
|
if (data != null) {
|
||||||
@ -27,7 +28,7 @@ class ReactionDB {
|
|||||||
|
|
||||||
Future<List<WKMsgReaction>> queryWithMessageId(String messageId) async {
|
Future<List<WKMsgReaction>> queryWithMessageId(String messageId) async {
|
||||||
List<WKMsgReaction> list = [];
|
List<WKMsgReaction> list = [];
|
||||||
List<Map<String, Object?>> results = await WKDBHelper.shared.getDB().query(
|
List<Map<String, Object?>> results = await WKDBHelper.shared.getDB()!.query(
|
||||||
WKDBConst.tableMessageReaction,
|
WKDBConst.tableMessageReaction,
|
||||||
where: "message_id=? and is_deleted=0",
|
where: "message_id=? and is_deleted=0",
|
||||||
whereArgs: [messageId],
|
whereArgs: [messageId],
|
||||||
@ -43,7 +44,7 @@ class ReactionDB {
|
|||||||
Future<List<WKMsgReaction>> queryWithMessageIds(
|
Future<List<WKMsgReaction>> queryWithMessageIds(
|
||||||
List<String> messageIds) async {
|
List<String> messageIds) async {
|
||||||
List<WKMsgReaction> list = [];
|
List<WKMsgReaction> list = [];
|
||||||
List<Map<String, Object?>> results = await WKDBHelper.shared.getDB().query(
|
List<Map<String, Object?>> results = await WKDBHelper.shared.getDB()!.query(
|
||||||
WKDBConst.tableMessageReaction,
|
WKDBConst.tableMessageReaction,
|
||||||
where:
|
where:
|
||||||
"message_id in (${WKDBConst.getPlaceholders(messageIds.length)}) and is_deleted=0",
|
"message_id in (${WKDBConst.getPlaceholders(messageIds.length)}) and is_deleted=0",
|
||||||
@ -90,14 +91,14 @@ class ReactionDB {
|
|||||||
// }
|
// }
|
||||||
|
|
||||||
insertReaction(WKMsgReaction reaction) {
|
insertReaction(WKMsgReaction reaction) {
|
||||||
WKDBHelper.shared.getDB().insert(
|
WKDBHelper.shared.getDB()!.insert(
|
||||||
WKDBConst.tableMessageReaction, getReactionMap(reaction),
|
WKDBConst.tableMessageReaction, getReactionMap(reaction),
|
||||||
conflictAlgorithm: ConflictAlgorithm.replace);
|
conflictAlgorithm: ConflictAlgorithm.replace);
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<bool> isExistReaction(String uid, String messageID) async {
|
Future<bool> isExistReaction(String uid, String messageID) async {
|
||||||
bool isExist = false;
|
bool isExist = false;
|
||||||
List<Map<String, Object?>> list = await WKDBHelper.shared.getDB().query(
|
List<Map<String, Object?>> list = await WKDBHelper.shared.getDB()!.query(
|
||||||
WKDBConst.tableMessageReaction,
|
WKDBConst.tableMessageReaction,
|
||||||
where: "message_id=? and uid=?",
|
where: "message_id=? and uid=?",
|
||||||
whereArgs: [messageID, uid]);
|
whereArgs: [messageID, uid]);
|
||||||
|
@ -21,7 +21,7 @@ class ReminderDB {
|
|||||||
int version = 0;
|
int version = 0;
|
||||||
|
|
||||||
List<Map<String, Object?>> list =
|
List<Map<String, Object?>> list =
|
||||||
await WKDBHelper.shared.getDB().rawQuery(sql);
|
await WKDBHelper.shared.getDB()!.rawQuery(sql);
|
||||||
if (list.isNotEmpty) {
|
if (list.isNotEmpty) {
|
||||||
dynamic data = list[0];
|
dynamic data = list[0];
|
||||||
if (data != null) {
|
if (data != null) {
|
||||||
@ -34,7 +34,7 @@ class ReminderDB {
|
|||||||
Future<List<WKReminder>> queryWithChannel(
|
Future<List<WKReminder>> queryWithChannel(
|
||||||
String channelID, int channelType, int done) async {
|
String channelID, int channelType, int done) async {
|
||||||
List<WKReminder> list = [];
|
List<WKReminder> list = [];
|
||||||
List<Map<String, Object?>> results = await WKDBHelper.shared.getDB().query(
|
List<Map<String, Object?>> results = await WKDBHelper.shared.getDB()!.query(
|
||||||
WKDBConst.tableReminders,
|
WKDBConst.tableReminders,
|
||||||
where: "channel_id=? and channel_type=? and done=?",
|
where: "channel_id=? and channel_type=? and done=?",
|
||||||
whereArgs: [channelID, channelType, done],
|
whereArgs: [channelID, channelType, done],
|
||||||
@ -82,7 +82,7 @@ class ReminderDB {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (addList.isNotEmpty || updateList.isNotEmpty) {
|
if (addList.isNotEmpty || updateList.isNotEmpty) {
|
||||||
WKDBHelper.shared.getDB().transaction((txn) async {
|
WKDBHelper.shared.getDB()!.transaction((txn) async {
|
||||||
if (addList.isNotEmpty) {
|
if (addList.isNotEmpty) {
|
||||||
for (Map<String, dynamic> value in addList) {
|
for (Map<String, dynamic> value in addList) {
|
||||||
txn.insert(WKDBConst.tableReminders, value,
|
txn.insert(WKDBConst.tableReminders, value,
|
||||||
@ -118,7 +118,7 @@ class ReminderDB {
|
|||||||
|
|
||||||
Future<List<WKReminder>> queryWithChannelIds(List<String> channelIds) async {
|
Future<List<WKReminder>> queryWithChannelIds(List<String> channelIds) async {
|
||||||
List<WKReminder> list = [];
|
List<WKReminder> list = [];
|
||||||
List<Map<String, Object?>> results = await WKDBHelper.shared.getDB().query(
|
List<Map<String, Object?>> results = await WKDBHelper.shared.getDB()!.query(
|
||||||
WKDBConst.tableReminders,
|
WKDBConst.tableReminders,
|
||||||
where:
|
where:
|
||||||
"channel_id in (${WKDBConst.getPlaceholders(channelIds.length)})",
|
"channel_id in (${WKDBConst.getPlaceholders(channelIds.length)})",
|
||||||
@ -133,7 +133,7 @@ class ReminderDB {
|
|||||||
|
|
||||||
Future<List<WKReminder>> queryWithIds(List<int> ids) async {
|
Future<List<WKReminder>> queryWithIds(List<int> ids) async {
|
||||||
List<WKReminder> list = [];
|
List<WKReminder> list = [];
|
||||||
List<Map<String, Object?>> results = await WKDBHelper.shared.getDB().query(
|
List<Map<String, Object?>> results = await WKDBHelper.shared.getDB()!.query(
|
||||||
WKDBConst.tableReminders,
|
WKDBConst.tableReminders,
|
||||||
where: "reminder_id in (${WKDBConst.getPlaceholders(ids.length)})",
|
where: "reminder_id in (${WKDBConst.getPlaceholders(ids.length)})",
|
||||||
whereArgs: ids);
|
whereArgs: ids);
|
||||||
|
@ -61,8 +61,8 @@ class WKDBHelper {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
Database getDB() {
|
Database? getDB() {
|
||||||
return _database!;
|
return _database;
|
||||||
}
|
}
|
||||||
|
|
||||||
close() {
|
close() {
|
||||||
|
@ -30,6 +30,8 @@ class WKMsg {
|
|||||||
WKChannel? _channelInfo;
|
WKChannel? _channelInfo;
|
||||||
WKChannelMember? _memberOfFrom;
|
WKChannelMember? _memberOfFrom;
|
||||||
int orderSeq = 0;
|
int orderSeq = 0;
|
||||||
|
int expireTime = 0;
|
||||||
|
int expireTimestamp = 0;
|
||||||
int viewed = 0;
|
int viewed = 0;
|
||||||
int viewedAt = 0;
|
int viewedAt = 0;
|
||||||
String topicID = "";
|
String topicID = "";
|
||||||
@ -89,6 +91,7 @@ class WKMsgExtra {
|
|||||||
int editedAt = 0;
|
int editedAt = 0;
|
||||||
String contentEdit = "";
|
String contentEdit = "";
|
||||||
int needUpload = 0;
|
int needUpload = 0;
|
||||||
|
int isPinned = 0;
|
||||||
WKMessageContent? messageContent;
|
WKMessageContent? messageContent;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -447,6 +447,10 @@ class WKConnectionManager {
|
|||||||
msg.timestamp = recvMsg.messageTime;
|
msg.timestamp = recvMsg.messageTime;
|
||||||
msg.fromUID = recvMsg.fromUID;
|
msg.fromUID = recvMsg.fromUID;
|
||||||
msg.clientMsgNO = recvMsg.clientMsgNO;
|
msg.clientMsgNO = recvMsg.clientMsgNO;
|
||||||
|
msg.expireTime = recvMsg.expire;
|
||||||
|
if (msg.expireTime > 0) {
|
||||||
|
msg.expireTimestamp = msg.expireTime + msg.timestamp;
|
||||||
|
}
|
||||||
msg.status = WKSendMsgResult.sendSuccess;
|
msg.status = WKSendMsgResult.sendSuccess;
|
||||||
msg.topicID = recvMsg.topic;
|
msg.topicID = recvMsg.topic;
|
||||||
msg.orderSeq = await WKIM.shared.messageManager
|
msg.orderSeq = await WKIM.shared.messageManager
|
||||||
|
@ -8,6 +8,7 @@ class PacketHeader {
|
|||||||
bool noPersist = false; // 是否不存储
|
bool noPersist = false; // 是否不存储
|
||||||
bool syncOnce = false; // 是否只同步一次
|
bool syncOnce = false; // 是否只同步一次
|
||||||
int remainingLength = 0;
|
int remainingLength = 0;
|
||||||
|
bool hasServerVersion = false; // 是否有服务端版本
|
||||||
}
|
}
|
||||||
|
|
||||||
class Packet {
|
class Packet {
|
||||||
@ -60,6 +61,7 @@ class SendPacket extends Packet {
|
|||||||
int channelType;
|
int channelType;
|
||||||
String? topic;
|
String? topic;
|
||||||
String payload = '';
|
String payload = '';
|
||||||
|
int expire = 0;
|
||||||
SendPacket({
|
SendPacket({
|
||||||
this.clientSeq = 0,
|
this.clientSeq = 0,
|
||||||
this.clientMsgNO = "",
|
this.clientMsgNO = "",
|
||||||
@ -122,6 +124,7 @@ class RecvPacket extends Packet {
|
|||||||
int messageTime = 0;
|
int messageTime = 0;
|
||||||
String topic = "";
|
String topic = "";
|
||||||
String payload = "";
|
String payload = "";
|
||||||
|
int expire = 0;
|
||||||
@override
|
@override
|
||||||
String toString() {
|
String toString() {
|
||||||
return "msgkey:$msgKey,chanenlID:$channelID,channelType:$channelType,fromUID:$fromUID,clientMsgNO:$clientMsgNO,messageID:$messageID,messageSeq:$messageSeq,messageTime:$messageTime,payload:$payload";
|
return "msgkey:$msgKey,chanenlID:$channelID,channelType:$channelType,fromUID:$fromUID,clientMsgNO:$clientMsgNO,messageID:$messageID,messageSeq:$messageSeq,messageTime:$messageTime,payload:$payload";
|
||||||
|
@ -1,5 +1,8 @@
|
|||||||
|
import 'dart:math';
|
||||||
import 'dart:typed_data';
|
import 'dart:typed_data';
|
||||||
|
|
||||||
|
import 'package:wukongimfluttersdk/wkim.dart';
|
||||||
|
|
||||||
import '../common/logs.dart';
|
import '../common/logs.dart';
|
||||||
import 'packet.dart';
|
import 'packet.dart';
|
||||||
import 'write_read.dart';
|
import 'write_read.dart';
|
||||||
@ -94,6 +97,12 @@ Uint8List encodeConnect(ConnectPacket packet) {
|
|||||||
decodeConnack(PacketHeader header, ReadData reader) {
|
decodeConnack(PacketHeader header, ReadData reader) {
|
||||||
var p = ConnackPacket();
|
var p = ConnackPacket();
|
||||||
p.header = header;
|
p.header = header;
|
||||||
|
if (header.hasServerVersion) {
|
||||||
|
var version = reader.readByte();
|
||||||
|
Logs.debug("server protocol version: $version");
|
||||||
|
WKIM.shared.options.protoVersion =
|
||||||
|
min(version, WKIM.shared.options.protoVersion);
|
||||||
|
}
|
||||||
p.timeDiff = reader.readUint64().toInt();
|
p.timeDiff = reader.readUint64().toInt();
|
||||||
p.reasonCode = reader.readUint8();
|
p.reasonCode = reader.readUint8();
|
||||||
p.serverKey = reader.readString();
|
p.serverKey = reader.readString();
|
||||||
@ -102,7 +111,7 @@ decodeConnack(PacketHeader header, ReadData reader) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
PacketHeader decodeHeader(ReadData reader) {
|
PacketHeader decodeHeader(ReadData reader) {
|
||||||
var b = reader.readUint8();
|
var b = reader.readByte();
|
||||||
var header = PacketHeader();
|
var header = PacketHeader();
|
||||||
header.noPersist = (b & 0x01) > 0;
|
header.noPersist = (b & 0x01) > 0;
|
||||||
header.showUnread = ((b >> 1) & 0x01) > 0;
|
header.showUnread = ((b >> 1) & 0x01) > 0;
|
||||||
@ -112,6 +121,9 @@ PacketHeader decodeHeader(ReadData reader) {
|
|||||||
header.packetType != PacketType.pong) {
|
header.packetType != PacketType.pong) {
|
||||||
header.remainingLength = reader.readVariableLength();
|
header.remainingLength = reader.readVariableLength();
|
||||||
}
|
}
|
||||||
|
if (header.packetType == PacketType.connack) {
|
||||||
|
header.hasServerVersion = (b & 0x01) > 0;
|
||||||
|
}
|
||||||
return header;
|
return header;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -161,6 +173,9 @@ Uint8List encodeSend(SendPacket packet) {
|
|||||||
}
|
}
|
||||||
write.writeString(packet.channelID);
|
write.writeString(packet.channelID);
|
||||||
write.writeUint8(packet.channelType);
|
write.writeUint8(packet.channelType);
|
||||||
|
if (WKIM.shared.options.protoVersion >= 3) {
|
||||||
|
write.writeUint32(packet.expire);
|
||||||
|
}
|
||||||
write.writeString(packet.encodeMsgKey());
|
write.writeString(packet.encodeMsgKey());
|
||||||
if (packet.setting.topic == 1) {
|
if (packet.setting.topic == 1) {
|
||||||
write.writeString(packet.topic == null ? "" : packet.topic!);
|
write.writeString(packet.topic == null ? "" : packet.topic!);
|
||||||
@ -194,6 +209,9 @@ RecvPacket decodeRecv(PacketHeader header, ReadData reader) {
|
|||||||
recv.fromUID = reader.readString();
|
recv.fromUID = reader.readString();
|
||||||
recv.channelID = reader.readString();
|
recv.channelID = reader.readString();
|
||||||
recv.channelType = reader.readUint8().toInt();
|
recv.channelType = reader.readUint8().toInt();
|
||||||
|
if (WKIM.shared.options.protoVersion >= 3) {
|
||||||
|
recv.expire = reader.readUint32().toInt();
|
||||||
|
}
|
||||||
recv.clientMsgNO = reader.readString();
|
recv.clientMsgNO = reader.readString();
|
||||||
if (recv.setting.stream == 1) {
|
if (recv.setting.stream == 1) {
|
||||||
recv.streamNo = reader.readString();
|
recv.streamNo = reader.readString();
|
||||||
|
@ -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.6
|
version: 1.4.7
|
||||||
homepage: https://github.com/WuKongIM/WuKongIMFlutterSDK
|
homepage: https://github.com/WuKongIM/WuKongIMFlutterSDK
|
||||||
|
|
||||||
environment:
|
environment:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user