From 18f099c437f341efd6dfbe6134e0bbb687ae8fcf Mon Sep 17 00:00:00 2001 From: hrxiang Date: Fri, 22 Jul 2022 12:12:55 +0800 Subject: [PATCH] [Super Group] --- CHANGELOG.md | 3 ++ android/build.gradle | 2 +- .../manager/MessageManager.java | 9 +++++ lib/src/manager/im_message_manager.dart | 31 +++++++++++++++ lib/src/models/group_info.dart | 12 ++++++ lib/src/models/message.dart | 38 +++++++++++++++++++ lib/src/utils.dart | 8 ++-- 7 files changed, 98 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 81dfd87..033d8d1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,9 @@ - Add joinSource field for joinGroup method - Add advanced revoke type - Add recvMessageRevokedV2 callback for OnAdvancedMsgListener +- Add joinSource field for GroupApplicationInfo +- Add inviterUserID field for GroupApplicationInfo +- Add getAdvancedHistoryMessageList method for MessageManager ## 2.2.0 diff --git a/android/build.gradle b/android/build.gradle index 87a73de..ec63e72 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -41,5 +41,5 @@ android { } } dependencies { - implementation 'io.openim:core-sdk:2.3.0@aar' + implementation 'io.openim:core-sdk:2.3.0-rc1@aar' } \ No newline at end of file diff --git a/android/src/main/java/io/openim/flutter_openim_sdk/manager/MessageManager.java b/android/src/main/java/io/openim/flutter_openim_sdk/manager/MessageManager.java index 9bb42de..241b141 100644 --- a/android/src/main/java/io/openim/flutter_openim_sdk/manager/MessageManager.java +++ b/android/src/main/java/io/openim/flutter_openim_sdk/manager/MessageManager.java @@ -397,4 +397,13 @@ public class MessageManager extends BaseManager { jsonValue(methodCall) ); } + + public void getAdvancedHistoryMessageList(MethodCall methodCall, MethodChannel.Result result) { + Open_im_sdk.getAdvancedHistoryMessageList( + new OnBaseListener(result, methodCall), + value(methodCall, "operationID"), + jsonValue(methodCall) + ); + } + } diff --git a/lib/src/manager/im_message_manager.dart b/lib/src/manager/im_message_manager.dart index af96cf2..5943549 100644 --- a/lib/src/manager/im_message_manager.dart +++ b/lib/src/manager/im_message_manager.dart @@ -700,6 +700,37 @@ class MessageManager { "operationID": Utils.checkOperationID(operationID), }))); + /// 获取聊天记录(以startMsg为节点,以前的聊天记录) + /// [userID] 接收消息的用户id + /// [conversationID] 会话id,查询通知时可用 + /// [groupID] 接收消息的组id + /// [startMsg] 从这条消息开始查询[count]条,获取的列表index==length-1为最新消息,所以获取下一页历史记录startMsg=list.first + /// [count] 一次拉取的总数 + /// [lastMinSeq] 第一页消息不用传,获取第二页开始必传 跟[startMsg]一样 + Future getAdvancedHistoryMessageList({ + String? userID, + String? groupID, + String? conversationID, + int? lastMinSeq, + Message? startMsg, + int? count, + String? operationID, + }) => + _channel + .invokeMethod( + 'getAdvancedHistoryMessageList', + _buildParam({ + 'userID': userID ?? '', + 'groupID': groupID ?? '', + 'conversationID': conversationID ?? '', + 'startClientMsgID': startMsg?.clientMsgID ?? '', + 'count': count ?? 40, + 'lastMinSeq': lastMinSeq ?? 0, + 'operationID': Utils.checkOperationID(operationID), + })) + .then((value) => + Utils.toObj(value, (map) => AdvancedMessage.fromJson(map))); + static Map _buildParam(Map param) { param["ManagerName"] = "messageManager"; return param; diff --git a/lib/src/models/group_info.dart b/lib/src/models/group_info.dart index a19fa34..b387987 100644 --- a/lib/src/models/group_info.dart +++ b/lib/src/models/group_info.dart @@ -298,6 +298,12 @@ class GroupApplicationInfo { /// 扩展信息 String? ex; + /// 2:通过邀请 3:通过搜索 4:通过二维码 + int? joinSource; + + /// 邀请进群用户ID + String? inviterUserID; + GroupApplicationInfo({ this.groupID, this.groupName, @@ -321,6 +327,8 @@ class GroupApplicationInfo { this.handleUserID, this.handledTime, this.ex, + this.inviterUserID, + this.joinSource, }); GroupApplicationInfo.fromJson(Map json) { @@ -346,6 +354,8 @@ class GroupApplicationInfo { handleUserID = json['handleUserID']; handledTime = json['handledTime']; ex = json['ex']; + inviterUserID = json['inviterUserID']; + joinSource = json['joinSource']; } Map toJson() { @@ -372,6 +382,8 @@ class GroupApplicationInfo { data['handleUserID'] = this.handleUserID; data['handledTime'] = this.handledTime; data['ex'] = this.ex; + data['inviterUserID'] = this.inviterUserID; + data['joinSource'] = this.joinSource; return data; } } diff --git a/lib/src/models/message.dart b/lib/src/models/message.dart index 89e4e23..4316694 100644 --- a/lib/src/models/message.dart +++ b/lib/src/models/message.dart @@ -1034,3 +1034,41 @@ class RevokedInfo { return data; } } + +class AdvancedMessage { + List? messageList; + bool? isEnd; + int? errCode; + String? errMsg; + int? lastMinSeq; + + AdvancedMessage({ + this.messageList, + this.isEnd, + this.errCode, + this.errMsg, + this.lastMinSeq, + }); + + AdvancedMessage.fromJson(Map json) { + messageList = json['messageList'] == null + ? null + : (json['messageList'] as List) + .map((e) => Message.fromJson(e)) + .toList(); + isEnd = json['isEnd']; + errCode = json['errCode']; + errMsg = json['errMsg']; + lastMinSeq = json['lastMinSeq']; + } + + Map toJson() { + final data = Map(); + data['messageList'] = this.messageList?.map((e) => e.toJson()).toList(); + data['isEnd'] = this.isEnd; + data['errCode'] = this.errCode; + data['errMsg'] = this.errMsg; + data['lastMinSeq'] = this.lastMinSeq; + return data; + } +} diff --git a/lib/src/utils.dart b/lib/src/utils.dart index 2e64be2..7c6975a 100644 --- a/lib/src/utils.dart +++ b/lib/src/utils.dart @@ -2,14 +2,14 @@ import 'dart:convert'; class Utils { static List toList(String value, T f(Map map)) => - (_formatJson(value) as List).map((e) => f(e)).toList(); + (formatJson(value) as List).map((e) => f(e)).toList(); static T toObj(String value, T f(Map map)) => - f(_formatJson(value)); + f(formatJson(value)); - static List toListMap(String value) => _formatJson(value); + static List toListMap(String value) => formatJson(value); - static dynamic _formatJson(String value) => jsonDecode(value); + static dynamic formatJson(String value) => jsonDecode(value); static String checkOperationID(String? obj) => obj ?? DateTime.now().millisecondsSinceEpoch.toString();