From 59a17bdf5626895b96b0cd79496dea18127e2411 Mon Sep 17 00:00:00 2001 From: SL Date: Wed, 27 Nov 2024 18:08:52 +0800 Subject: [PATCH] fix:Add query total unread quantity and query followed channels --- CHANGELOG.md | 4 +++- example/lib/ui_chat.dart | 4 ++++ lib/db/channel.dart | 27 +++++++++++++++++++++++++++ lib/db/conversation.dart | 26 ++++++++++++++++++++++++++ lib/manager/channel_manager.dart | 6 ++++++ lib/manager/conversation_manager.dart | 4 ++++ pubspec.yaml | 2 +- 7 files changed, 71 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 42f702b..bc86b4e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -113,4 +113,6 @@ ### 1.5.6 * fix: Optimize reconnection and resend messages ### 1.5.7 - * fix: Optimize channel fields in cmd messages \ No newline at end of file + * fix: Optimize channel fields in cmd messages + ### 1.5.8 + * fix: Add query total unread quantity and query followed channels \ No newline at end of file diff --git a/example/lib/ui_chat.dart b/example/lib/ui_chat.dart index 4e2be5f..a7d4179 100644 --- a/example/lib/ui_chat.dart +++ b/example/lib/ui_chat.dart @@ -89,8 +89,12 @@ class ChatListDataState extends State { // 监听新消息 WKIM.shared.messageManager.addOnNewMsgListener('chat', (msgs) { + print('收到${msgs.length}条新消息'); setState(() { for (var i = 0; i < msgs.length; i++) { + if (msgs[i].channelID != channelID) { + continue; + } if (msgs[i].setting.receipt == 1) { // 消息需要回执 testReceipt(msgs[i]); diff --git a/lib/db/channel.dart b/lib/db/channel.dart index 12f2542..a0459bd 100644 --- a/lib/db/channel.dart +++ b/lib/db/channel.dart @@ -142,6 +142,33 @@ class ChannelDB { return list; } + Future> queryWithFollowAndStatus( + int channelType, int follow, int status) async { + List list = []; + var sql = + "select * from ${WKDBConst.tableChannel} where channel_type=? and follow=? and status=? and is_deleted=0"; + List> results = await WKDBHelper.shared + .getDB()! + .rawQuery(sql, [channelType, follow, status]); + for (Map data in results) { + var channel = WKDBConst.serializeChannel(data); + list.add(channel); + } + return list; + } + + Future> queryWithMuted() async { + List list = []; + var sql = "select * from ${WKDBConst.tableChannel} where mute=1"; + List> results = + await WKDBHelper.shared.getDB()!.rawQuery(sql); + for (Map data in results) { + var channel = WKDBConst.serializeChannel(data); + list.add(channel); + } + return list; + } + Future> searchWithChannelTypeAndFollow( String keyword, int channelType, int follow) async { List list = []; diff --git a/lib/db/conversation.dart b/lib/db/conversation.dart index c29a828..8197432 100644 --- a/lib/db/conversation.dart +++ b/lib/db/conversation.dart @@ -2,6 +2,7 @@ import 'dart:collection'; import 'dart:convert'; import 'package:sqflite/sqflite.dart'; +import 'package:wukongimfluttersdk/db/channel.dart'; import 'package:wukongimfluttersdk/db/const.dart'; import 'package:wukongimfluttersdk/entity/channel.dart'; @@ -94,6 +95,31 @@ class ConversationDB { return msg; } + Future queryAllUnreadCount() async { + int count = 0; + var channels = await ChannelDB.shared.queryWithMuted(); + var channelIds = []; + var sql = ""; + List> list; + if (channels.isNotEmpty) { + for (var channel in channels) { + channelIds.add(channel.channelID); + } + sql = + "select COUNT(unread_count) count from ${WKDBConst.tableConversation} where channel_id not in (${WKDBConst.getPlaceholders(channelIds.length)})"; + list = await WKDBHelper.shared.getDB()!.rawQuery(sql, channelIds); + } else { + sql = + "select COUNT(unread_count) count from ${WKDBConst.tableConversation}"; + list = await WKDBHelper.shared.getDB()!.rawQuery(sql); + } + if (list.isNotEmpty) { + dynamic data = list[0]; + count = WKDBConst.readInt(data, 'count'); + } + return count; + } + Future getMaxVersion() async { int maxVersion = 0; if (WKDBHelper.shared.getDB() == null) { diff --git a/lib/manager/channel_manager.dart b/lib/manager/channel_manager.dart index b76f0c8..d5608d2 100644 --- a/lib/manager/channel_manager.dart +++ b/lib/manager/channel_manager.dart @@ -22,6 +22,12 @@ class WKChannelManager { } } + Future> getWithFollowAndStatus( + int channelType, int follow, int status) async { + return ChannelDB.shared + .queryWithFollowAndStatus(channelType, follow, status); + } + Future getChannel(String channelID, int channelType) async { WKChannel? channel; if (_list.isNotEmpty) { diff --git a/lib/manager/conversation_manager.dart b/lib/manager/conversation_manager.dart index 249eee7..1a7c337 100644 --- a/lib/manager/conversation_manager.dart +++ b/lib/manager/conversation_manager.dart @@ -58,6 +58,10 @@ class WKConversationManager { return uiMsg; } + Future getAllUnreadCount() async { + return ConversationDB.shared.queryAllUnreadCount(); + } + Future getExtraMaxVersion() async { return ConversationDB.shared.queryExtraMaxVersion(); } diff --git a/pubspec.yaml b/pubspec.yaml index 751b908..b480ff1 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -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.5.7 +version: 1.5.8 homepage: https://github.com/WuKongIM/WuKongIMFlutterSDK environment: