mirror of
https://github.com/WuKongIM/WuKongIMFlutterSDK
synced 2025-05-28 22:52:20 +00:00
Update channel info refresh listener and optimize data insertion issues
This commit is contained in:
parent
a0b6bd0edf
commit
00af8b6a9f
@ -39,4 +39,6 @@
|
||||
### 1.1.9
|
||||
* Modify message reply to ack issue and Add protocol device flag field
|
||||
### 1.2.0
|
||||
* Modify query channel message error issue
|
||||
* Modify query channel message error issue
|
||||
### 1.2.1
|
||||
* Update channel info refresh listener and optimize data insertion issues
|
@ -9,7 +9,7 @@
|
||||
#### 安装
|
||||
```
|
||||
dependencies:
|
||||
wukongimfluttersdk: ^1.2.0
|
||||
wukongimfluttersdk: ^1.2.1
|
||||
```
|
||||
#### 引入
|
||||
```dart
|
||||
|
BIN
example/assets/ic_default_avatar.png
Normal file
BIN
example/assets/ic_default_avatar.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 5.9 KiB |
@ -59,7 +59,7 @@ class ChatListDataState extends State<ChatList> {
|
||||
void initState() {
|
||||
super.initState();
|
||||
initListener();
|
||||
getMsgList(50000, 0, true);
|
||||
getMsgList(0, 0, true);
|
||||
}
|
||||
|
||||
initListener() {
|
||||
|
@ -49,11 +49,13 @@ class ListViewShowDataState extends State<ListViewShowData> {
|
||||
if (status == WKConnectStatus.connecting) {
|
||||
_connectionStatusStr = '连接中...';
|
||||
} else if (status == WKConnectStatus.success) {
|
||||
_connectionStatusStr = '最近会话';
|
||||
_connectionStatusStr = '最近会话【连接成功】';
|
||||
} else if (status == WKConnectStatus.noNetwork) {
|
||||
_connectionStatusStr = '网络异常';
|
||||
} else if (status == WKConnectStatus.syncMsg) {
|
||||
_connectionStatusStr = '同步消息中...';
|
||||
} else if (status == WKConnectStatus.kicked) {
|
||||
_connectionStatusStr = '未连接,在其他设备登录';
|
||||
}
|
||||
setState(() {});
|
||||
});
|
||||
@ -163,6 +165,10 @@ class ListViewShowDataState extends State<ListViewShowData> {
|
||||
height: 200,
|
||||
width: 200,
|
||||
fit: BoxFit.cover,
|
||||
errorBuilder: (BuildContext context, Object exception,
|
||||
StackTrace? stackTrace) {
|
||||
return Image.asset('assets/ic_default_avatar.png');
|
||||
},
|
||||
),
|
||||
),
|
||||
Expanded(
|
||||
|
@ -40,7 +40,7 @@ class HttpUtils {
|
||||
lastSsgSeqs, // 客户端所有频道会话的最后一条消息序列号拼接出来的同步串 格式: channelID:channelType:last_msg_seq|channelID:channelType:last_msg_seq (此字段非必填,如果不填就获取全量数据,填写了获取增量数据,看你自己的需求。)
|
||||
"msg_count": 10 // 每个会话获取最大的消息数量,一般为app点进去第一屏的数据
|
||||
});
|
||||
print(response.data);
|
||||
// print(response.data);
|
||||
WKSyncConversation conversation = WKSyncConversation();
|
||||
conversation.conversations = [];
|
||||
if (response.statusCode == HttpStatus.ok) {
|
||||
|
@ -32,7 +32,14 @@ class IMUtils {
|
||||
"https://lmg.jj20.com/up/allimg/tx30/10121138219844229.jpg",
|
||||
"https://lmg.jj20.com/up/allimg/tx30/10121138219844229.jpg",
|
||||
"https://lmg.jj20.com/up/allimg/tx28/430423183653303.jpg",
|
||||
"https://lmg.jj20.com/up/allimg/tx23/520420024834916.jpg"
|
||||
"https://lmg.jj20.com/up/allimg/tx23/520420024834916.jpg",
|
||||
"https://himg.bdimg.com/sys/portraitn/item/public.1.a535a65d.tJe8MgWmP8zJ456B73Kzfg",
|
||||
"https://images.liqucn.com/img/h23/h07/img_localize_cb7b78b88d5b33e2ce8921221bf3deae_400x400.png",
|
||||
"https://img1.baidu.com/it/u=3916753633,2634890492&fm=253&fmt=auto&app=138&f=JPEG?w=400&h=400",
|
||||
"https://img0.baidu.com/it/u=4210586523,443489101&fm=253&fmt=auto&app=138&f=JPEG?w=304&h=304",
|
||||
"https://img2.baidu.com/it/u=2559320899,1546883787&fm=253&fmt=auto&app=138&f=JPEG?w=441&h=499",
|
||||
"https://img0.baidu.com/it/u=2952429745,3806929819&fm=253&fmt=auto&app=138&f=JPEG?w=380&h=380",
|
||||
"https://img2.baidu.com/it/u=3783923022,668713258&fm=253&fmt=auto&app=138&f=JPEG?w=500&h=500",
|
||||
];
|
||||
|
||||
WKIM.shared.messageManager.addOnSyncChannelMsgListener((channelID,
|
||||
@ -44,6 +51,7 @@ class IMUtils {
|
||||
// 获取channel资料
|
||||
WKIM.shared.channelManager
|
||||
.addOnGetChannelListener((channelId, channelType, back) {
|
||||
print('获取channel资料');
|
||||
if (channelType == WKChannelType.personal) {
|
||||
// 获取个人资料
|
||||
// 这里直接返回了。实际情况可通过API请求后返回
|
||||
|
@ -1,6 +1,7 @@
|
||||
import 'dart:collection';
|
||||
import 'dart:convert';
|
||||
|
||||
import 'package:sqflite/sqflite.dart';
|
||||
import 'package:wukongimfluttersdk/db/const.dart';
|
||||
import 'package:wukongimfluttersdk/entity/channel.dart';
|
||||
|
||||
@ -12,11 +13,11 @@ class ChannelDB {
|
||||
static ChannelDB get shared => _instance;
|
||||
|
||||
Future<WKChannel?> query(String channelID, int channelType) async {
|
||||
String sql =
|
||||
"select * from ${WKDBConst.tableChannel} where channel_id='$channelID' and channel_type=$channelType";
|
||||
WKChannel? channel;
|
||||
List<Map<String, Object?>> list =
|
||||
await WKDBHelper.shared.getDB().rawQuery(sql);
|
||||
List<Map<String, Object?>> list = await WKDBHelper.shared.getDB().query(
|
||||
WKDBConst.tableChannel,
|
||||
where: "channel_id=? and channel_type=?",
|
||||
whereArgs: [channelID, channelType]);
|
||||
if (list.isNotEmpty) {
|
||||
channel = WKDBConst.serializeChannel(list[0]);
|
||||
}
|
||||
@ -44,8 +45,8 @@ class ChannelDB {
|
||||
if (updateList.isNotEmpty) {
|
||||
for (Map<String, dynamic> value in updateList) {
|
||||
txn.update(WKDBConst.tableChannel, value,
|
||||
where:
|
||||
"channel_id='${value['channel_id']}' and channel_type=${value['channel_type']}");
|
||||
where: "channel_id=? and channel_type=?",
|
||||
whereArgs: [value['channel_id'], value['channel_type']]);
|
||||
}
|
||||
}
|
||||
});
|
||||
@ -62,26 +63,27 @@ class ChannelDB {
|
||||
}
|
||||
|
||||
insert(WKChannel channel) {
|
||||
WKDBHelper.shared.getDB().insert(WKDBConst.tableChannel, getMap(channel));
|
||||
WKDBHelper.shared.getDB().insert(WKDBConst.tableChannel, getMap(channel),
|
||||
conflictAlgorithm: ConflictAlgorithm.replace);
|
||||
}
|
||||
|
||||
update(WKChannel channel) {
|
||||
WKDBHelper.shared.getDB().update(WKDBConst.tableChannel, getMap(channel),
|
||||
where:
|
||||
"channel_id='${channel.channelID}' and channel_type=${channel.channelType}");
|
||||
where: "channel_id=? and channel_type=?",
|
||||
whereArgs: [channel.channelID, channel.channelType]);
|
||||
}
|
||||
|
||||
Future<bool> isExist(String channelID, int channelType) async {
|
||||
bool isExit = false;
|
||||
String sql =
|
||||
"select * from ${WKDBConst.tableChannel} where channel_id='$channelID' and channel_type=$channelType";
|
||||
List<Map<String, Object?>> list =
|
||||
await WKDBHelper.shared.getDB().rawQuery(sql);
|
||||
List<Map<String, Object?>> list = await WKDBHelper.shared.getDB().query(
|
||||
WKDBConst.tableChannel,
|
||||
where: "channel_id=? and channel_type=?",
|
||||
whereArgs: [channelID, channelType]);
|
||||
if (list.isNotEmpty) {
|
||||
dynamic data = list[0];
|
||||
if (data != null) {
|
||||
String channelID = WKDBConst.readString(data, 'channel_id');
|
||||
if (channelID != '' && channelID.isNotEmpty) {
|
||||
if (channelID != '') {
|
||||
isExit = true;
|
||||
}
|
||||
}
|
||||
@ -104,11 +106,11 @@ class ChannelDB {
|
||||
sb.write("'");
|
||||
}
|
||||
String channelIds = sb.toString();
|
||||
String sql =
|
||||
"select * from ${WKDBConst.tableChannel} where channel_id in ($channelIds) and channel_type=$channelType";
|
||||
List<WKChannel> list = [];
|
||||
List<Map<String, Object?>> results =
|
||||
await WKDBHelper.shared.getDB().rawQuery(sql);
|
||||
List<Map<String, Object?>> results = await WKDBHelper.shared.getDB().query(
|
||||
WKDBConst.tableChannel,
|
||||
where: "channel_id in (?) and channel_type=?",
|
||||
whereArgs: [channelIds, channelType]);
|
||||
if (results.isNotEmpty) {
|
||||
for (Map<String, Object?> data in results) {
|
||||
list.add(WKDBConst.serializeChannel(data));
|
||||
|
@ -1,3 +1,5 @@
|
||||
import 'package:sqflite/sqflite.dart';
|
||||
|
||||
import '../entity/channel_member.dart';
|
||||
import 'const.dart';
|
||||
import 'wk_db_helper.dart';
|
||||
@ -21,11 +23,11 @@ class ChannelMemberDB {
|
||||
sb.write(uidList[i]);
|
||||
sb.write("'");
|
||||
}
|
||||
String sql =
|
||||
"select * from ${WKDBConst.tableChannelMember} where channel_id='$channelID' and channel_type=$channelType and member_uid in (${sb.toString()})";
|
||||
List<WKChannelMember> list = [];
|
||||
List<Map<String, Object?>> results =
|
||||
await WKDBHelper.shared.getDB().rawQuery(sql);
|
||||
List<Map<String, Object?>> results = await WKDBHelper.shared.getDB().query(
|
||||
WKDBConst.tableChannelMember,
|
||||
where: "channel_id=? and channel_type=? and member_uid in (?)",
|
||||
whereArgs: [channelID, channelType, sb.toString()]);
|
||||
if (results.isNotEmpty) {
|
||||
for (Map<String, Object?> data in results) {
|
||||
list.add(WKDBConst.serializeChannelMember(data));
|
||||
@ -36,11 +38,11 @@ class ChannelMemberDB {
|
||||
|
||||
Future<int> getMaxVersion(String channelID, int channelType) async {
|
||||
String sql =
|
||||
"select max(version) version from ${WKDBConst.tableChannelMember} where channel_id ='$channelID' and channel_type=$channelType limit 0, 1";
|
||||
"select max(version) version from ${WKDBConst.tableChannelMember} where channel_id =? and channel_type=? limit 0, 1";
|
||||
int version = 0;
|
||||
|
||||
List<Map<String, Object?>> results =
|
||||
await WKDBHelper.shared.getDB().rawQuery(sql);
|
||||
await WKDBHelper.shared.getDB().rawQuery(sql, [channelID, channelType]);
|
||||
if (results.isNotEmpty) {
|
||||
dynamic data = results[0];
|
||||
version = WKDBConst.readInt(data, 'version');
|
||||
@ -51,10 +53,11 @@ class ChannelMemberDB {
|
||||
Future<WKChannelMember?> queryWithUID(
|
||||
String channelId, int channelType, String memberUID) async {
|
||||
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='$channelId' and ${WKDBConst.tableChannelMember}.channel_type=$channelType and ${WKDBConst.tableChannelMember}.member_uid='$memberUID')";
|
||||
"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;
|
||||
List<Map<String, Object?>> list =
|
||||
await WKDBHelper.shared.getDB().rawQuery(sql);
|
||||
List<Map<String, Object?>> list = await WKDBHelper.shared
|
||||
.getDB()
|
||||
.rawQuery(sql, [channelId, channelType, memberUID]);
|
||||
if (list.isNotEmpty) {
|
||||
channelMember = WKDBConst.serializeChannelMember(list[0]);
|
||||
}
|
||||
@ -64,10 +67,10 @@ class ChannelMemberDB {
|
||||
Future<List<WKChannelMember>?> queryWithChannel(
|
||||
String channelId, int channelType) async {
|
||||
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='$channelId' and ${WKDBConst.tableChannelMember}.channel_type=$channelType 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<Map<String, Object?>> results =
|
||||
await WKDBHelper.shared.getDB().rawQuery(sql);
|
||||
await WKDBHelper.shared.getDB().rawQuery(sql, [channelId, channelType]);
|
||||
if (results.isNotEmpty) {
|
||||
for (Map<String, Object?> data in results) {
|
||||
list.add(WKDBConst.serializeChannelMember(data));
|
||||
@ -88,11 +91,11 @@ class ChannelMemberDB {
|
||||
sb.write("'");
|
||||
}
|
||||
|
||||
String sql =
|
||||
"select * from ${WKDBConst.tableChannelMember} where channel_id ='$channelID' and channel_type=$channelType and member_uid in (${sb.toString()})";
|
||||
List<WKChannelMember> list = [];
|
||||
List<Map<String, Object?>> results =
|
||||
await WKDBHelper.shared.getDB().rawQuery(sql);
|
||||
List<Map<String, Object?>> results = await WKDBHelper.shared.getDB().query(
|
||||
WKDBConst.tableChannelMember,
|
||||
where: "channel_id=? and channel_type=? and member_uid in (?) ",
|
||||
whereArgs: [channelID, channelType, sb.toString()]);
|
||||
if (results.isNotEmpty) {
|
||||
for (Map<String, Object?> data in results) {
|
||||
list.add(WKDBConst.serializeChannelMember(data));
|
||||
@ -122,15 +125,20 @@ class ChannelMemberDB {
|
||||
WKDBHelper.shared.getDB().transaction((txn) async {
|
||||
if (insertCVList.isNotEmpty) {
|
||||
for (Map<String, dynamic> value in insertCVList) {
|
||||
txn.insert(WKDBConst.tableChannelMember, value);
|
||||
txn.insert(WKDBConst.tableChannelMember, value,
|
||||
conflictAlgorithm: ConflictAlgorithm.replace);
|
||||
}
|
||||
}
|
||||
|
||||
if (updateCVList.isNotEmpty) {
|
||||
for (Map<String, dynamic> value in updateCVList) {
|
||||
txn.update(WKDBConst.tableChannelMember, value,
|
||||
where:
|
||||
"channel_id='${value['channel_id']}' and channel_type=${value['channel_type']} and member_uid='${value['member_uid']}'");
|
||||
where: "channel_id=? and channel_type=? and member_uid=?",
|
||||
whereArgs: [
|
||||
value['channel_id'],
|
||||
value['channel_type'],
|
||||
value['member_uid']
|
||||
]);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
@ -1,7 +1,9 @@
|
||||
import 'dart:collection';
|
||||
import 'dart:convert';
|
||||
|
||||
import 'package:sqflite/sqflite.dart';
|
||||
import 'package:wukongimfluttersdk/db/const.dart';
|
||||
import 'package:wukongimfluttersdk/entity/channel.dart';
|
||||
|
||||
import '../entity/conversation.dart';
|
||||
import 'wk_db_helper.dart';
|
||||
@ -24,7 +26,10 @@ class ConversationDB {
|
||||
if (results.isNotEmpty) {
|
||||
for (Map<String, Object?> data in results) {
|
||||
WKConversationMsg msg = WKDBConst.serializeCoversation(data);
|
||||
list.add(getUIMsg(msg));
|
||||
WKChannel wkChannel = WKDBConst.serializeChannel(data);
|
||||
WKUIConversationMsg uiMsg = getUIMsg(msg);
|
||||
uiMsg.setWkChannel(wkChannel);
|
||||
list.add(uiMsg);
|
||||
}
|
||||
}
|
||||
return list;
|
||||
@ -35,7 +40,8 @@ class ConversationDB {
|
||||
data['is_deleted'] = 1;
|
||||
int row = await WKDBHelper.shared.getDB().update(
|
||||
WKDBConst.tableConversation, data,
|
||||
where: "channel_id='$channelID' and channel_type=$channelType");
|
||||
where: "channel_id=? and channel_type=?",
|
||||
whereArgs: [channelID, channelType]);
|
||||
return row > 0;
|
||||
}
|
||||
|
||||
@ -46,9 +52,9 @@ class ConversationDB {
|
||||
conversationMsg.channelID, conversationMsg.channelType);
|
||||
|
||||
if (lastMsg == null || lastMsg.channelID.isEmpty) {
|
||||
row = await WKDBHelper.shared
|
||||
.getDB()
|
||||
.insert(WKDBConst.tableConversation, getMap(conversationMsg, false));
|
||||
row = await WKDBHelper.shared.getDB().insert(
|
||||
WKDBConst.tableConversation, getMap(conversationMsg, false),
|
||||
conflictAlgorithm: ConflictAlgorithm.replace);
|
||||
} else {
|
||||
conversationMsg.unreadCount =
|
||||
lastMsg.unreadCount + conversationMsg.unreadCount;
|
||||
@ -66,11 +72,11 @@ class ConversationDB {
|
||||
Future<WKConversationMsg?> queryMsgByMsgChannelId(
|
||||
String channelId, int channelType) async {
|
||||
WKConversationMsg? msg;
|
||||
String sql =
|
||||
"select * from ${WKDBConst.tableConversation} where channel_id='$channelId' and channel_type=$channelType";
|
||||
|
||||
List<Map<String, Object?>> list =
|
||||
await WKDBHelper.shared.getDB().rawQuery(sql);
|
||||
List<Map<String, Object?>> list = await WKDBHelper.shared.getDB().query(
|
||||
WKDBConst.tableConversation,
|
||||
where: "channel_id=? and channel_type=?",
|
||||
whereArgs: [channelId, channelType]);
|
||||
if (list.isNotEmpty) {
|
||||
msg = WKDBConst.serializeCoversation(list[0]);
|
||||
}
|
||||
@ -116,11 +122,11 @@ class ConversationDB {
|
||||
sb.write(channelIds[i]);
|
||||
sb.write("'");
|
||||
}
|
||||
String sql =
|
||||
"select * from '${WKDBConst.tableConversation}' where channel_id in (${sb.toString()})";
|
||||
List<WKConversationMsg> list = [];
|
||||
List<Map<String, Object?>> results =
|
||||
await WKDBHelper.shared.getDB().rawQuery(sql);
|
||||
List<Map<String, Object?>> results = await WKDBHelper.shared.getDB().query(
|
||||
WKDBConst.tableConversation,
|
||||
where: "channel_id in (?)",
|
||||
whereArgs: [sb.toString()]);
|
||||
if (results.isNotEmpty) {
|
||||
for (Map<String, Object?> data in results) {
|
||||
list.add(WKDBConst.serializeCoversation(data));
|
||||
@ -160,14 +166,15 @@ class ConversationDB {
|
||||
WKDBHelper.shared.getDB().transaction((txn) async {
|
||||
if (insertList.isNotEmpty) {
|
||||
for (int i = 0; i < insertList.length; i++) {
|
||||
txn.insert(WKDBConst.tableConversation, insertList[i]);
|
||||
txn.insert(WKDBConst.tableConversation, insertList[i],
|
||||
conflictAlgorithm: ConflictAlgorithm.replace);
|
||||
}
|
||||
}
|
||||
if (updateList.isNotEmpty) {
|
||||
for (Map<String, dynamic> value in updateList) {
|
||||
txn.update(WKDBConst.tableConversation, value,
|
||||
where:
|
||||
"channel_id='${value['channel_id']}' and channel_type=${value['channel_type']}");
|
||||
where: "channel_id=? and channel_type=?",
|
||||
whereArgs: [value['channel_id'], value['channel_type']]);
|
||||
}
|
||||
}
|
||||
});
|
||||
@ -196,7 +203,8 @@ class ConversationDB {
|
||||
dynamic map, String channelID, int channelType) async {
|
||||
return await WKDBHelper.shared.getDB().update(
|
||||
WKDBConst.tableConversation, map,
|
||||
where: "channel_id='$channelID' and channel_type=$channelType");
|
||||
where: "channel_id=? and channel_type=?",
|
||||
whereArgs: [channelID, channelType]);
|
||||
}
|
||||
|
||||
WKUIConversationMsg getUIMsg(WKConversationMsg conversationMsg) {
|
||||
|
@ -1,5 +1,6 @@
|
||||
import 'dart:convert';
|
||||
|
||||
import 'package:sqflite/sqflite.dart';
|
||||
import 'package:wukongimfluttersdk/db/channel.dart';
|
||||
import 'package:wukongimfluttersdk/db/const.dart';
|
||||
import 'package:wukongimfluttersdk/db/reaction.dart';
|
||||
@ -23,10 +24,10 @@ class MessageDB {
|
||||
|
||||
Future<bool> isExist(String clientMsgNo) async {
|
||||
bool isExist = false;
|
||||
String sql =
|
||||
"select * from ${WKDBConst.tableMessage} where client_msg_no='$clientMsgNo'";
|
||||
List<Map<String, Object?>> list =
|
||||
await WKDBHelper.shared.getDB().rawQuery(sql);
|
||||
List<Map<String, Object?>> list = await WKDBHelper.shared.getDB().query(
|
||||
WKDBConst.tableMessage,
|
||||
where: "client_msg_no=?",
|
||||
whereArgs: [clientMsgNo]);
|
||||
if (list.isNotEmpty) {
|
||||
isExist = true;
|
||||
}
|
||||
@ -45,36 +46,35 @@ class MessageDB {
|
||||
msg.clientMsgNO = WKIM.shared.messageManager.generateClientMsgNo();
|
||||
}
|
||||
}
|
||||
return await WKDBHelper.shared
|
||||
.getDB()
|
||||
.insert(WKDBConst.tableMessage, getMap(msg));
|
||||
return await WKDBHelper.shared.getDB().insert(
|
||||
WKDBConst.tableMessage, getMap(msg),
|
||||
conflictAlgorithm: ConflictAlgorithm.replace);
|
||||
}
|
||||
|
||||
Future<int> updateMsg(WKMsg msg) async {
|
||||
return await WKDBHelper.shared.getDB().update(
|
||||
WKDBConst.tableMessage, getMap(msg),
|
||||
where: "client_seq=${msg.clientSeq}");
|
||||
where: "client_seq=?", whereArgs: [msg.clientSeq]);
|
||||
}
|
||||
|
||||
Future<int> updateMsgWithField(dynamic map, int clientSeq) async {
|
||||
return await WKDBHelper.shared
|
||||
.getDB()
|
||||
.update(WKDBConst.tableMessage, map, where: "client_seq=$clientSeq");
|
||||
return await WKDBHelper.shared.getDB().update(WKDBConst.tableMessage, map,
|
||||
where: "client_seq=?", whereArgs: [clientSeq]);
|
||||
}
|
||||
|
||||
Future<int> updateMsgWithFieldAndClientMsgNo(
|
||||
dynamic map, String clientMsgNO) async {
|
||||
return await WKDBHelper.shared.getDB().update(WKDBConst.tableMessage, map,
|
||||
where: "client_msg_no='$clientMsgNO'");
|
||||
where: "client_msg_no=?", whereArgs: [clientMsgNO]);
|
||||
}
|
||||
|
||||
Future<WKMsg?> queryWithClientMsgNo(String clientMsgNo) async {
|
||||
WKMsg? wkMsg;
|
||||
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='$clientMsgNo'";
|
||||
"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=?";
|
||||
|
||||
List<Map<String, Object?>> list =
|
||||
await WKDBHelper.shared.getDB().rawQuery(sql);
|
||||
await WKDBHelper.shared.getDB().rawQuery(sql, [clientMsgNo]);
|
||||
if (list.isNotEmpty) {
|
||||
wkMsg = WKDBConst.serializeWKMsg(list[0]);
|
||||
}
|
||||
@ -88,10 +88,10 @@ class MessageDB {
|
||||
Future<WKMsg?> queryWithClientSeq(int clientSeq) async {
|
||||
WKMsg? wkMsg;
|
||||
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=$clientSeq";
|
||||
"select $messageCols,$extraCols from ${WKDBConst.tableMessage} LEFT JOIN ${WKDBConst.tableMessageExtra} ON ${WKDBConst.tableMessage}.message_id=${WKDBConst.tableMessageExtra}.message_id WHERE ${WKDBConst.tableMessage}.client_seq=?";
|
||||
|
||||
List<Map<String, Object?>> list =
|
||||
await WKDBHelper.shared.getDB().rawQuery(sql);
|
||||
await WKDBHelper.shared.getDB().rawQuery(sql, [clientSeq]);
|
||||
if (list.isNotEmpty) {
|
||||
wkMsg = WKDBConst.serializeWKMsg(list[0]);
|
||||
}
|
||||
@ -114,10 +114,10 @@ class MessageDB {
|
||||
}
|
||||
|
||||
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 (${sb.toString()})";
|
||||
"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 (?)";
|
||||
List<WKMsg> list = [];
|
||||
List<Map<String, Object?>> results =
|
||||
await WKDBHelper.shared.getDB().rawQuery(sql);
|
||||
await WKDBHelper.shared.getDB().rawQuery(sql, [sb.toString()]);
|
||||
if (results.isNotEmpty) {
|
||||
for (Map<String, Object?> data in results) {
|
||||
list.add(WKDBConst.serializeWKMsg(data));
|
||||
@ -129,9 +129,9 @@ class MessageDB {
|
||||
Future<int> queryMaxOrderSeq(String channelID, int channelType) async {
|
||||
int maxOrderSeq = 0;
|
||||
String sql =
|
||||
"select max(order_seq) order_seq from ${WKDBConst.tableMessage} where channel_id ='$channelID' and channel_type=$channelType 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 =
|
||||
await WKDBHelper.shared.getDB().rawQuery(sql);
|
||||
await WKDBHelper.shared.getDB().rawQuery(sql, [channelID, channelType]);
|
||||
if (list.isNotEmpty) {
|
||||
dynamic data = list[0];
|
||||
maxOrderSeq = WKDBConst.readInt(data, 'order_seq');
|
||||
@ -141,10 +141,10 @@ class MessageDB {
|
||||
|
||||
Future<int> getMaxMessageSeq(String channelID, int channelType) async {
|
||||
String sql =
|
||||
"SELECT max(message_seq) message_seq FROM ${WKDBConst.tableMessage} WHERE channel_id='$channelID' AND channel_type=$channelType";
|
||||
"SELECT max(message_seq) message_seq FROM ${WKDBConst.tableMessage} WHERE channel_id=? AND channel_type=?";
|
||||
int messageSeq = 0;
|
||||
List<Map<String, Object?>> list =
|
||||
await WKDBHelper.shared.getDB().rawQuery(sql);
|
||||
await WKDBHelper.shared.getDB().rawQuery(sql, [channelID, channelType]);
|
||||
if (list.isNotEmpty) {
|
||||
dynamic data = list[0];
|
||||
messageSeq = WKDBConst.readInt(data, 'message_seq');
|
||||
@ -156,9 +156,10 @@ class MessageDB {
|
||||
String channelID, int channelType, int maxOrderSeq, int limit) async {
|
||||
int minOrderSeq = 0;
|
||||
String sql =
|
||||
"select order_seq from ${WKDBConst.tableMessage} where channel_id='$channelID' and channel_type='$channelType' and type<>99 and order_seq <= $maxOrderSeq order by order_seq desc limit $limit";
|
||||
List<Map<String, Object?>> list =
|
||||
await WKDBHelper.shared.getDB().rawQuery(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 ?";
|
||||
List<Map<String, Object?>> list = await WKDBHelper.shared
|
||||
.getDB()
|
||||
.rawQuery(sql, [channelID, channelType, maxOrderSeq, limit]);
|
||||
if (list.isNotEmpty) {
|
||||
dynamic data = list[0];
|
||||
minOrderSeq = WKDBConst.readInt(data, 'order_seq');
|
||||
@ -170,34 +171,41 @@ class MessageDB {
|
||||
int oldestOrderSeq, bool contain, int pullMode, int limit) async {
|
||||
List<WKMsg> msgList = [];
|
||||
String sql;
|
||||
|
||||
var args = [];
|
||||
if (oldestOrderSeq <= 0) {
|
||||
sql =
|
||||
"SELECT * FROM (SELECT $messageCols,$extraCols FROM ${WKDBConst.tableMessage} LEFT JOIN ${WKDBConst.tableMessageExtra} on ${WKDBConst.tableMessage}.message_id=${WKDBConst.tableMessageExtra}.message_id WHERE ${WKDBConst.tableMessage}.channel_id='$channelId' and ${WKDBConst.tableMessage}.channel_type=$channelType and ${WKDBConst.tableMessage}.type<>0 and ${WKDBConst.tableMessage}.type<>99) where is_deleted=0 and is_mutual_deleted=0 order by order_seq desc limit 0,$limit";
|
||||
"SELECT * FROM (SELECT $messageCols,$extraCols FROM ${WKDBConst.tableMessage} LEFT JOIN ${WKDBConst.tableMessageExtra} on ${WKDBConst.tableMessage}.message_id=${WKDBConst.tableMessageExtra}.message_id WHERE ${WKDBConst.tableMessage}.channel_id=? and ${WKDBConst.tableMessage}.channel_type=? and ${WKDBConst.tableMessage}.type<>0 and ${WKDBConst.tableMessage}.type<>99) where is_deleted=0 and is_mutual_deleted=0 order by order_seq desc limit 0,?";
|
||||
args.add(channelId);
|
||||
args.add(channelType);
|
||||
args.add(limit);
|
||||
} else {
|
||||
if (pullMode == 0) {
|
||||
if (contain) {
|
||||
sql =
|
||||
"SELECT * FROM (SELECT $messageCols,$extraCols FROM ${WKDBConst.tableMessage} LEFT JOIN ${WKDBConst.tableMessageExtra} on ${WKDBConst.tableMessage}.message_id=${WKDBConst.tableMessageExtra}.message_id WHERE ${WKDBConst.tableMessage}.channel_id='$channelId' and ${WKDBConst.tableMessage}.channel_type=$channelType and ${WKDBConst.tableMessage}.type<>0 and ${WKDBConst.tableMessage}.type<>99 AND ${WKDBConst.tableMessage}.order_seq<=$oldestOrderSeq) where is_deleted=0 and is_mutual_deleted=0 order by order_seq desc limit 0,$limit";
|
||||
"SELECT * FROM (SELECT $messageCols,$extraCols FROM ${WKDBConst.tableMessage} LEFT JOIN ${WKDBConst.tableMessageExtra} on ${WKDBConst.tableMessage}.message_id=${WKDBConst.tableMessageExtra}.message_id WHERE ${WKDBConst.tableMessage}.channel_id=? and ${WKDBConst.tableMessage}.channel_type=? and ${WKDBConst.tableMessage}.type<>0 and ${WKDBConst.tableMessage}.type<>99 AND ${WKDBConst.tableMessage}.order_seq<=?) where is_deleted=0 and is_mutual_deleted=0 order by order_seq desc limit 0,?";
|
||||
} else {
|
||||
sql =
|
||||
"SELECT * FROM (SELECT $messageCols,$extraCols FROM ${WKDBConst.tableMessage} LEFT JOIN ${WKDBConst.tableMessageExtra} on ${WKDBConst.tableMessage}.message_id=${WKDBConst.tableMessageExtra}.message_id WHERE ${WKDBConst.tableMessage}.channel_id='$channelId' and ${WKDBConst.tableMessage}.channel_type=$channelType and ${WKDBConst.tableMessage}.type<>0 and ${WKDBConst.tableMessage}.type<>99 AND ${WKDBConst.tableMessage}.order_seq<$oldestOrderSeq) where is_deleted=0 and is_mutual_deleted=0 order by order_seq desc limit 0,$limit";
|
||||
"SELECT * FROM (SELECT $messageCols,$extraCols FROM ${WKDBConst.tableMessage} LEFT JOIN ${WKDBConst.tableMessageExtra} on ${WKDBConst.tableMessage}.message_id=${WKDBConst.tableMessageExtra}.message_id WHERE ${WKDBConst.tableMessage}.channel_id=? and ${WKDBConst.tableMessage}.channel_type=? and ${WKDBConst.tableMessage}.type<>0 and ${WKDBConst.tableMessage}.type<>99 AND ${WKDBConst.tableMessage}.order_seq<?) where is_deleted=0 and is_mutual_deleted=0 order by order_seq desc limit 0,?";
|
||||
}
|
||||
} else {
|
||||
if (contain) {
|
||||
sql =
|
||||
"SELECT * FROM (SELECT $messageCols,$extraCols FROM ${WKDBConst.tableMessage} LEFT JOIN ${WKDBConst.tableMessageExtra} on ${WKDBConst.tableMessage}.message_id=${WKDBConst.tableMessageExtra}.message_id WHERE ${WKDBConst.tableMessage}.channel_id='$channelId' and ${WKDBConst.tableMessage}.channel_type=$channelType and ${WKDBConst.tableMessage}.type<>0 and ${WKDBConst.tableMessage}.type<>99 AND ${WKDBConst.tableMessage}.order_seq>=$oldestOrderSeq) where is_deleted=0 and is_mutual_deleted=0 order by order_seq asc limit 0,$limit";
|
||||
"SELECT * FROM (SELECT $messageCols,$extraCols FROM ${WKDBConst.tableMessage} LEFT JOIN ${WKDBConst.tableMessageExtra} on ${WKDBConst.tableMessage}.message_id=${WKDBConst.tableMessageExtra}.message_id WHERE ${WKDBConst.tableMessage}.channel_id=? and ${WKDBConst.tableMessage}.channel_type=? and ${WKDBConst.tableMessage}.type<>0 and ${WKDBConst.tableMessage}.type<>99 AND ${WKDBConst.tableMessage}.order_seq>=?) where is_deleted=0 and is_mutual_deleted=0 order by order_seq asc limit 0,?";
|
||||
} else {
|
||||
sql =
|
||||
"SELECT * FROM (SELECT $messageCols,$extraCols FROM ${WKDBConst.tableMessage} LEFT JOIN ${WKDBConst.tableMessageExtra} on ${WKDBConst.tableMessage}.message_id=${WKDBConst.tableMessageExtra}.message_id WHERE ${WKDBConst.tableMessage}.channel_id='$channelId' and ${WKDBConst.tableMessage}.channel_type=$channelType and ${WKDBConst.tableMessage}.type<>0 and ${WKDBConst.tableMessage}.type<>99 AND ${WKDBConst.tableMessage}.order_seq>$oldestOrderSeq) where is_deleted=0 and is_mutual_deleted=0 order by order_seq asc limit 0,$limit";
|
||||
"SELECT * FROM (SELECT $messageCols,$extraCols FROM ${WKDBConst.tableMessage} LEFT JOIN ${WKDBConst.tableMessageExtra} on ${WKDBConst.tableMessage}.message_id=${WKDBConst.tableMessageExtra}.message_id WHERE ${WKDBConst.tableMessage}.channel_id=? and ${WKDBConst.tableMessage}.channel_type=? and ${WKDBConst.tableMessage}.type<>0 and ${WKDBConst.tableMessage}.type<>99 AND ${WKDBConst.tableMessage}.order_seq>?) where is_deleted=0 and is_mutual_deleted=0 order by order_seq asc limit 0,?";
|
||||
}
|
||||
}
|
||||
args.add(channelId);
|
||||
args.add(channelType);
|
||||
args.add(oldestOrderSeq);
|
||||
args.add(limit);
|
||||
}
|
||||
List<String> messageIds = [];
|
||||
List<String> replyMsgIds = [];
|
||||
List<String> fromUIDs = [];
|
||||
List<Map<String, Object?>> results =
|
||||
await WKDBHelper.shared.getDB().rawQuery(sql);
|
||||
await WKDBHelper.shared.getDB().rawQuery(sql, args);
|
||||
|
||||
if (results.isNotEmpty) {
|
||||
WKChannel? wkChannel =
|
||||
@ -468,10 +476,11 @@ class MessageDB {
|
||||
Future<int> getDeletedCount(int minMessageSeq, int maxMessageSeq,
|
||||
String channelID, int channelType) async {
|
||||
String sql =
|
||||
"select count(*) num from ${WKDBConst.tableMessage} where channel_id='$channelID' and channel_type=$channelType and message_seq>$minMessageSeq and message_seq<$maxMessageSeq 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;
|
||||
List<Map<String, Object?>> list =
|
||||
await WKDBHelper.shared.getDB().rawQuery(sql);
|
||||
List<Map<String, Object?>> list = await WKDBHelper.shared
|
||||
.getDB()
|
||||
.rawQuery(sql, [channelID, channelType, minMessageSeq, maxMessageSeq]);
|
||||
if (list.isNotEmpty) {
|
||||
dynamic data = list[0];
|
||||
num = WKDBConst.readInt(data, 'num');
|
||||
@ -485,14 +494,15 @@ class MessageDB {
|
||||
int messageSeq = 0;
|
||||
if (pullMode == 1) {
|
||||
sql =
|
||||
"select message_seq from ${WKDBConst.tableMessage} where channel_id='$channelID' and channel_type=$channelType and order_seq>$oldestOrderSeq and message_seq<>0 order by message_seq desc 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 desc limit 1";
|
||||
} else {
|
||||
sql =
|
||||
"select message_seq from ${WKDBConst.tableMessage} where channel_id='$channelID' and channel_type=$channelType and order_seq<$oldestOrderSeq 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";
|
||||
}
|
||||
|
||||
List<Map<String, Object?>> list =
|
||||
await WKDBHelper.shared.getDB().rawQuery(sql);
|
||||
List<Map<String, Object?>> list = await WKDBHelper.shared
|
||||
.getDB()
|
||||
.rawQuery(sql, [channelID, channelType, oldestOrderSeq]);
|
||||
if (list.isNotEmpty) {
|
||||
dynamic data = list[0];
|
||||
messageSeq = WKDBConst.readInt(data, 'message_seq');
|
||||
@ -563,7 +573,8 @@ class MessageDB {
|
||||
if (cvList.isNotEmpty) {
|
||||
WKDBHelper.shared.getDB().transaction((txn) async {
|
||||
for (int i = 0; i < cvList.length; i++) {
|
||||
txn.insert(WKDBConst.tableMessage, cvList[i]);
|
||||
txn.insert(WKDBConst.tableMessage, cvList[i],
|
||||
conflictAlgorithm: ConflictAlgorithm.replace);
|
||||
}
|
||||
});
|
||||
}
|
||||
@ -572,8 +583,7 @@ class MessageDB {
|
||||
Future<List<WKMsg>> queryWithClientMsgNos(List<String> clientMsgNos) async {
|
||||
List<WKMsg> msgs = [];
|
||||
StringBuffer sb = StringBuffer();
|
||||
sb.write(
|
||||
"select * from ${WKDBConst.tableMessage} where client_msg_no in (");
|
||||
|
||||
for (int i = 0, size = clientMsgNos.length; i < size; i++) {
|
||||
if (i != 0) {
|
||||
sb.write(",");
|
||||
@ -582,10 +592,11 @@ class MessageDB {
|
||||
sb.write(clientMsgNos[i]);
|
||||
sb.write("'");
|
||||
}
|
||||
sb.write(")");
|
||||
|
||||
List<Map<String, Object?>> results =
|
||||
await WKDBHelper.shared.getDB().rawQuery(sb.toString());
|
||||
List<Map<String, Object?>> results = await WKDBHelper.shared.getDB().query(
|
||||
WKDBConst.tableMessage,
|
||||
where: "client_msg_no in (?)",
|
||||
whereArgs: [sb.toString()]);
|
||||
if (results.isNotEmpty) {
|
||||
for (Map<String, Object?> data in results) {
|
||||
msgs.add(WKDBConst.serializeWKMsg(data));
|
||||
@ -621,12 +632,14 @@ class MessageDB {
|
||||
WKDBHelper.shared.getDB().transaction((txn) async {
|
||||
if (insertCVList.isNotEmpty) {
|
||||
for (int i = 0; i < insertCVList.length; i++) {
|
||||
txn.insert(WKDBConst.tableMessageExtra, insertCVList[0]);
|
||||
txn.insert(WKDBConst.tableMessageExtra, insertCVList[0],
|
||||
conflictAlgorithm: ConflictAlgorithm.replace);
|
||||
}
|
||||
if (updateCVList.isNotEmpty) {
|
||||
for (int i = 0; i < updateCVList.length; i++) {
|
||||
txn.update(WKDBConst.tableMessageExtra, updateCVList[0],
|
||||
where: "message_id='${updateCVList[i]['message_id']}'");
|
||||
where: "message_id=?",
|
||||
whereArgs: [updateCVList[i]['message_id']]);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -639,9 +652,9 @@ class MessageDB {
|
||||
String channelID, int channelType) async {
|
||||
int extraVersion = 0;
|
||||
String sql =
|
||||
"select max(extra_version) extra_version from ${WKDBConst.tableMessageExtra} where channel_id ='$channelID' and channel_type=$channelType";
|
||||
"select max(extra_version) extra_version from ${WKDBConst.tableMessageExtra} where channel_id =? and channel_type=?";
|
||||
List<Map<String, Object?>> list =
|
||||
await WKDBHelper.shared.getDB().rawQuery(sql);
|
||||
await WKDBHelper.shared.getDB().rawQuery(sql, [channelID, channelType]);
|
||||
if (list.isNotEmpty) {
|
||||
dynamic data = list[0];
|
||||
extraVersion = WKDBConst.readInt(data, 'extra_version');
|
||||
@ -651,10 +664,10 @@ class MessageDB {
|
||||
|
||||
Future<List<WKMsgExtra>> queryMsgExtraWithNeedUpload(int needUpload) async {
|
||||
String sql =
|
||||
"select * from ${WKDBConst.tableMessageExtra} where needUpload=$needUpload";
|
||||
"select * from ${WKDBConst.tableMessageExtra} where need_upload=?";
|
||||
List<WKMsgExtra> list = [];
|
||||
List<Map<String, Object?>> results =
|
||||
await WKDBHelper.shared.getDB().rawQuery(sql);
|
||||
await WKDBHelper.shared.getDB().rawQuery(sql, [needUpload]);
|
||||
if (results.isNotEmpty) {
|
||||
for (Map<String, Object?> data in results) {
|
||||
list.add(WKDBConst.serializeMsgExtra(data));
|
||||
@ -666,10 +679,10 @@ class MessageDB {
|
||||
|
||||
Future<WKMsgExtra?> queryMsgExtraWithMsgID(String messageID) async {
|
||||
WKMsgExtra? msgExtra;
|
||||
String sql =
|
||||
"select * from ${WKDBConst.tableMessageExtra} where message_id='$messageID'";
|
||||
List<Map<String, Object?>> list =
|
||||
await WKDBHelper.shared.getDB().rawQuery(sql);
|
||||
List<Map<String, Object?>> list = await WKDBHelper.shared.getDB().query(
|
||||
WKDBConst.tableMessageExtra,
|
||||
where: "message_id=?",
|
||||
whereArgs: [messageID]);
|
||||
if (list.isNotEmpty) {
|
||||
msgExtra = WKDBConst.serializeMsgExtra(list[0]);
|
||||
}
|
||||
@ -678,8 +691,6 @@ class MessageDB {
|
||||
|
||||
Future<List<WKMsgExtra>> queryMsgExtrasWithMsgIds(List<String> msgIds) async {
|
||||
StringBuffer sb = StringBuffer();
|
||||
sb.write(
|
||||
"select * from ${WKDBConst.tableMessageExtra} where message_id in (");
|
||||
for (int i = 0, size = msgIds.length; i < size; i++) {
|
||||
if (i != 0) {
|
||||
sb.write(",");
|
||||
@ -688,10 +699,11 @@ class MessageDB {
|
||||
sb.write(msgIds[i]);
|
||||
sb.write("'");
|
||||
}
|
||||
sb.write(")");
|
||||
List<WKMsgExtra> list = [];
|
||||
List<Map<String, Object?>> results =
|
||||
await WKDBHelper.shared.getDB().rawQuery(sb.toString());
|
||||
List<Map<String, Object?>> results = await WKDBHelper.shared.getDB().query(
|
||||
WKDBConst.tableMessageExtra,
|
||||
where: "message_id in (?)",
|
||||
whereArgs: [sb.toString()]);
|
||||
if (results.isNotEmpty) {
|
||||
for (Map<String, Object?> data in results) {
|
||||
list.add(WKDBConst.serializeMsgExtra(data));
|
||||
@ -713,9 +725,9 @@ class MessageDB {
|
||||
String channelID, int channelType) async {
|
||||
WKMsg? wkMsg;
|
||||
String sql =
|
||||
"select * from ${WKDBConst.tableMessage} where channel_id='$channelID' and channel_type=$channelType 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 =
|
||||
await WKDBHelper.shared.getDB().rawQuery(sql);
|
||||
await WKDBHelper.shared.getDB().rawQuery(sql, [channelID, channelType]);
|
||||
if (list.isNotEmpty) {
|
||||
dynamic data = list[0];
|
||||
if (data != null) {
|
||||
|
@ -1,3 +1,4 @@
|
||||
import 'package:sqflite/sqflite.dart';
|
||||
import 'package:wukongimfluttersdk/entity/msg.dart';
|
||||
|
||||
import 'const.dart';
|
||||
@ -10,11 +11,11 @@ class ReactionDB {
|
||||
|
||||
Future<int> queryMaxSeqWithChannel(String channelID, int channelType) async {
|
||||
String sql =
|
||||
"select max(seq) seq from ${WKDBConst.tableMessageReaction} where channel_id='$channelID' and channel_type=$channelType limit 0, 1";
|
||||
"select max(seq) seq from ${WKDBConst.tableMessageReaction} where channel_id=? and channel_type=? limit 0, 1";
|
||||
int version = 0;
|
||||
|
||||
List<Map<String, Object?>> list =
|
||||
await WKDBHelper.shared.getDB().rawQuery(sql);
|
||||
await WKDBHelper.shared.getDB().rawQuery(sql, [channelID, channelType]);
|
||||
if (list.isNotEmpty) {
|
||||
dynamic data = list[0];
|
||||
if (data != null) {
|
||||
@ -25,12 +26,12 @@ class ReactionDB {
|
||||
}
|
||||
|
||||
Future<List<WKMsgReaction>> queryWithMessageId(String messageId) async {
|
||||
String sql =
|
||||
"select * from ${WKDBConst.tableMessageReaction} where message_id='$messageId' and is_deleted=0 ORDER BY created_at desc";
|
||||
List<WKMsgReaction> list = [];
|
||||
|
||||
List<Map<String, Object?>> results =
|
||||
await WKDBHelper.shared.getDB().rawQuery(sql);
|
||||
List<Map<String, Object?>> results = await WKDBHelper.shared.getDB().query(
|
||||
WKDBConst.tableMessageReaction,
|
||||
where: "message_id=? and is_deleted=0",
|
||||
whereArgs: [messageId],
|
||||
orderBy: "created_at desc");
|
||||
if (results.isNotEmpty) {
|
||||
for (Map<String, Object?> data in results) {
|
||||
list.add(WKDBConst.serializeMsgReation(data));
|
||||
@ -51,11 +52,12 @@ class ReactionDB {
|
||||
sb.write("'");
|
||||
}
|
||||
|
||||
String sql =
|
||||
"select * from ${WKDBConst.tableMessageReaction} where message_id in (${sb.toString()}) and is_deleted=0 ORDER BY created_at desc";
|
||||
List<WKMsgReaction> list = [];
|
||||
List<Map<String, Object?>> results =
|
||||
await WKDBHelper.shared.getDB().rawQuery(sql);
|
||||
List<Map<String, Object?>> results = await WKDBHelper.shared.getDB().query(
|
||||
WKDBConst.tableMessageReaction,
|
||||
where: "message_id in (?) and is_deleted=0",
|
||||
whereArgs: [sb.toString()],
|
||||
orderBy: "created_at desc");
|
||||
if (results.isNotEmpty) {
|
||||
for (Map<String, Object?> data in results) {
|
||||
list.add(WKDBConst.serializeMsgReation(data));
|
||||
@ -86,22 +88,22 @@ class ReactionDB {
|
||||
map['seq'] = reaction.seq;
|
||||
map['emoji'] = reaction.emoji;
|
||||
WKDBHelper.shared.getDB().update(WKDBConst.tableMessageReaction, map,
|
||||
where: "message_id='${reaction.messageID}' and uid='${reaction.uid}'");
|
||||
where: "message_id=? and uid=?",
|
||||
whereArgs: [reaction.messageID, reaction.uid]);
|
||||
}
|
||||
|
||||
insertReaction(WKMsgReaction reaction) {
|
||||
WKDBHelper.shared
|
||||
.getDB()
|
||||
.insert(WKDBConst.tableMessageReaction, getReactionMap(reaction));
|
||||
WKDBHelper.shared.getDB().insert(
|
||||
WKDBConst.tableMessageReaction, getReactionMap(reaction),
|
||||
conflictAlgorithm: ConflictAlgorithm.replace);
|
||||
}
|
||||
|
||||
Future<bool> isExistReaction(String uid, String messageID) async {
|
||||
bool isExist = false;
|
||||
String sql =
|
||||
"select * from ${WKDBConst.tableMessageReaction} where message_id='$messageID' and uid='$uid' ";
|
||||
|
||||
List<Map<String, Object?>> list =
|
||||
await WKDBHelper.shared.getDB().rawQuery(sql);
|
||||
List<Map<String, Object?>> list = await WKDBHelper.shared.getDB().query(
|
||||
WKDBConst.tableMessageReaction,
|
||||
where: "message_id=? and uid=?",
|
||||
whereArgs: [messageID, uid]);
|
||||
if (list.isNotEmpty) {
|
||||
isExist = true;
|
||||
}
|
||||
|
@ -1,6 +1,7 @@
|
||||
import 'dart:collection';
|
||||
import 'dart:convert';
|
||||
|
||||
import 'package:sqflite/sqflite.dart';
|
||||
import 'package:wukongimfluttersdk/db/const.dart';
|
||||
import 'package:wukongimfluttersdk/db/conversation.dart';
|
||||
import 'package:wukongimfluttersdk/db/wk_db_helper.dart';
|
||||
@ -32,12 +33,12 @@ class ReminderDB {
|
||||
|
||||
Future<List<WKReminder>> queryWithChannel(
|
||||
String channelID, int channelType, int done) async {
|
||||
String sql =
|
||||
"select * from ${WKDBConst.tableReminders} where channel_id='$channelID' and channel_type=$channelType and done=$done order by message_seq desc";
|
||||
List<WKReminder> list = [];
|
||||
|
||||
List<Map<String, Object?>> results =
|
||||
await WKDBHelper.shared.getDB().rawQuery(sql);
|
||||
List<Map<String, Object?>> results = await WKDBHelper.shared.getDB().query(
|
||||
WKDBConst.tableReminders,
|
||||
where: "channel_id=? and channel_type=? and done=?",
|
||||
whereArgs: [channelID, channelType, done],
|
||||
orderBy: "message_seq desc");
|
||||
if (results.isNotEmpty) {
|
||||
for (Map<String, Object?> data in results) {
|
||||
list.add(WKDBConst.serializeReminder(data));
|
||||
@ -84,7 +85,8 @@ class ReminderDB {
|
||||
WKDBHelper.shared.getDB().transaction((txn) async {
|
||||
if (addList.isNotEmpty) {
|
||||
for (Map<String, dynamic> value in addList) {
|
||||
txn.insert(WKDBConst.tableReminders, value);
|
||||
txn.insert(WKDBConst.tableReminders, value,
|
||||
conflictAlgorithm: ConflictAlgorithm.replace);
|
||||
}
|
||||
}
|
||||
if (updateList.isNotEmpty) {
|
||||
@ -119,16 +121,17 @@ class ReminderDB {
|
||||
StringBuffer sb = StringBuffer();
|
||||
for (int i = 0, size = channelIds.length; i < size; i++) {
|
||||
if (i != 0) {
|
||||
sb.write("'");
|
||||
sb.write(",");
|
||||
}
|
||||
sb.write("'");
|
||||
sb.write(channelIds[i]);
|
||||
sb.write("'");
|
||||
}
|
||||
String sql =
|
||||
"select * from ${WKDBConst.tableReminders} where channel_id in (${sb.toString()})";
|
||||
List<WKReminder> list = [];
|
||||
List<Map<String, Object?>> results =
|
||||
await WKDBHelper.shared.getDB().rawQuery(sql);
|
||||
List<Map<String, Object?>> results = await WKDBHelper.shared.getDB().query(
|
||||
WKDBConst.tableReminders,
|
||||
where: "channel_id in (?)",
|
||||
whereArgs: [sb.toString()]);
|
||||
if (results.isNotEmpty) {
|
||||
for (Map<String, Object?> data in results) {
|
||||
list.add(WKDBConst.serializeReminder(data));
|
||||
@ -145,11 +148,11 @@ class ReminderDB {
|
||||
}
|
||||
sb.write(ids[i]);
|
||||
}
|
||||
String sql =
|
||||
"select * from ${WKDBConst.tableReminders} where reminder_id in (${sb.toString()})";
|
||||
List<WKReminder> list = [];
|
||||
List<Map<String, Object?>> results =
|
||||
await WKDBHelper.shared.getDB().rawQuery(sql);
|
||||
List<Map<String, Object?>> results = await WKDBHelper.shared.getDB().query(
|
||||
WKDBConst.tableReminders,
|
||||
where: "reminder_id in (?)",
|
||||
whereArgs: [sb.toString()]);
|
||||
if (results.isNotEmpty) {
|
||||
for (Map<String, Object?> data in results) {
|
||||
list.add(WKDBConst.serializeReminder(data));
|
||||
|
@ -16,9 +16,8 @@ class WKChannelManager {
|
||||
|
||||
fetchChannelInfo(String channelID, int channelType) {
|
||||
if (_getChannelInfoBack != null) {
|
||||
_getChannelInfoBack!(channelID, channelType, (liMChannel) {
|
||||
addOrUpdateChannel(liMChannel);
|
||||
ChannelDB.shared.saveOrUpdate(liMChannel);
|
||||
_getChannelInfoBack!(channelID, channelType, (wkChannel) {
|
||||
addOrUpdateChannel(wkChannel);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
@ -233,6 +233,7 @@ class WKConnectionManager {
|
||||
_decodePacket(Uint8List data) {
|
||||
var packet = WKIM.shared.options.proto.decode(data);
|
||||
Logs.debug('解码出包->$packet');
|
||||
Logs.debug('解码出包类型->${packet.header.packetType}');
|
||||
if (packet.header.packetType == PacketType.connack) {
|
||||
var connackPacket = packet as ConnackPacket;
|
||||
if (connackPacket.reasonCode == 1) {
|
||||
@ -276,6 +277,7 @@ class WKConnectionManager {
|
||||
}
|
||||
|
||||
_closeAll() {
|
||||
_isLogout = true;
|
||||
WKIM.shared.options.uid = '';
|
||||
WKIM.shared.options.token = '';
|
||||
WKIM.shared.messageManager.updateSendingMsgFail();
|
||||
|
@ -131,6 +131,9 @@ class RecvPacket extends Packet {
|
||||
class DisconnectPacket extends Packet {
|
||||
int reasonCode = 0;
|
||||
String reason = "";
|
||||
DisconnectPacket() {
|
||||
header.packetType = PacketType.disconnect;
|
||||
}
|
||||
}
|
||||
|
||||
class PingPacket extends Packet {
|
||||
|
@ -171,7 +171,6 @@ Uint8List encodeSend(SendPacket packet) {
|
||||
|
||||
Uint8List encodeRecvAck(RecvAckPacket packet) {
|
||||
WriteData write = WriteData();
|
||||
print("发送ack ${packet.messageID}");
|
||||
write.writeUint64(packet.messageID);
|
||||
write.writeUint32(packet.messageSeq);
|
||||
return write.toUint8List();
|
||||
|
@ -15,7 +15,7 @@ description: wukong IM flutter sdk
|
||||
# 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
|
||||
# of the product and file versions while build-number is used as the build suffix.
|
||||
version: 1.2.0
|
||||
version: 1.2.1
|
||||
homepage: https://github.com/WuKongIM/WuKongIMFlutterSDK
|
||||
|
||||
environment:
|
||||
|
Loading…
x
Reference in New Issue
Block a user