diff --git a/CHANGELOG.md b/CHANGELOG.md index 371c753..eafbc0b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,7 +2,8 @@ 1.New dismiss group
2.New search local message
-3.Upgrade client-sdk to 2.0.18 +3.New private chat
+4.New group mute ## 2.0.0+3 diff --git a/android/build.gradle b/android/build.gradle index a65726a..0104aca 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -41,5 +41,5 @@ android { } } dependencies { - implementation 'io.openim:client-sdk:2.0.19@aar' + implementation 'io.openim:client-sdk:2.0.22@aar' } \ No newline at end of file diff --git a/android/src/main/java/io/openim/flutter_openim_sdk/manager/ConversationManager.java b/android/src/main/java/io/openim/flutter_openim_sdk/manager/ConversationManager.java index 7f70c9e..f962564 100644 --- a/android/src/main/java/io/openim/flutter_openim_sdk/manager/ConversationManager.java +++ b/android/src/main/java/io/openim/flutter_openim_sdk/manager/ConversationManager.java @@ -118,4 +118,13 @@ public class ConversationManager extends BaseManager { jsonValue(methodCall, "conversationIDList") ); } + + public void setOneConversationPrivateChat(MethodCall methodCall, MethodChannel.Result result) { + Open_im_sdk.setOneConversationPrivateChat( + new OnBaseListener(result), + value(methodCall, "operationID"), + value(methodCall, "conversationID"), + value(methodCall, "isPrivate") + ); + } } diff --git a/android/src/main/java/io/openim/flutter_openim_sdk/manager/GroupManager.java b/android/src/main/java/io/openim/flutter_openim_sdk/manager/GroupManager.java index 30f443a..1132a02 100644 --- a/android/src/main/java/io/openim/flutter_openim_sdk/manager/GroupManager.java +++ b/android/src/main/java/io/openim/flutter_openim_sdk/manager/GroupManager.java @@ -154,6 +154,24 @@ public class GroupManager extends BaseManager { value(methodCall, "operationID"), value(methodCall, "gid") ); + } + + public void changeGroupMute(MethodCall methodCall, MethodChannel.Result result) { + Open_im_sdk.changeGroupMute( + new OnBaseListener(result), + value(methodCall, "operationID"), + value(methodCall, "gid"), + value(methodCall, "mute") + ); + } + public void changeGroupMemberMute(MethodCall methodCall, MethodChannel.Result result) { + Open_im_sdk.changeGroupMemberMute( + new OnBaseListener(result), + value(methodCall, "operationID"), + value(methodCall, "gid"), + value(methodCall, "uid"), + int2long(methodCall, "seconds") + ); } } \ No newline at end of file diff --git a/ios/Classes/Module/ConversationManager.swift b/ios/Classes/Module/ConversationManager.swift index 18263e8..87e69ad 100644 --- a/ios/Classes/Module/ConversationManager.swift +++ b/ios/Classes/Module/ConversationManager.swift @@ -19,6 +19,7 @@ public class ConversationManager: BaseServiceManager { self["getConversationIDBySessionType"] = getConversationIDBySessionType self["setConversationRecvMessageOpt"] = setConversationRecvMessageOpt self["getConversationRecvMessageOpt"] = getConversationRecvMessageOpt + self["setOneConversationPrivateChat"] = setOneConversationPrivateChat } func setConversationListener(methodCall: FlutterMethodCall, result: @escaping FlutterResult){ @@ -78,6 +79,10 @@ public class ConversationManager: BaseServiceManager { func getConversationRecvMessageOpt(methodCall: FlutterMethodCall, result: @escaping FlutterResult){ Open_im_sdkGetConversationRecvMessageOpt(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[jsonString: "conversationIDList"]) } + + func setOneConversationPrivateChat(methodCall: FlutterMethodCall, result: @escaping FlutterResult){ + Open_im_sdkSetOneConversationPrivateChat(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[string: "conversationID"],methodCall[bool: "isPrivate"]) + } } diff --git a/ios/Classes/Module/GroupManager.swift b/ios/Classes/Module/GroupManager.swift index 132e633..8ec19a8 100644 --- a/ios/Classes/Module/GroupManager.swift +++ b/ios/Classes/Module/GroupManager.swift @@ -22,6 +22,8 @@ public class GroupManager: BaseServiceManager { self["acceptGroupApplication"] = acceptGroupApplication self["refuseGroupApplication"] = refuseGroupApplication self["dismissGroup"] = dismissGroup + self["changeGroupMute"] = changeGroupMute + self["changeGroupMemberMute"] = changeGroupMemberMute } func setGroupListener(methodCall: FlutterMethodCall, result: @escaping FlutterResult){ @@ -95,6 +97,14 @@ public class GroupManager: BaseServiceManager { func dismissGroup(methodCall: FlutterMethodCall, result: @escaping FlutterResult){ Open_im_sdkDismissGroup(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[string: "gid"]) } + + func changeGroupMute(methodCall: FlutterMethodCall, result: @escaping FlutterResult){ + Open_im_sdkChangeGroupMute(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[string: "gid"], methodCall[bool: "mute"]) + } + + func changeGroupMemberMute(methodCall: FlutterMethodCall, result: @escaping FlutterResult){ + Open_im_sdkChangeGroupMemberMute(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[string: "gid"], methodCall[string:"uid"],methodCall[int:"seconds"]) + } } public class GroupListener: NSObject, Open_im_sdk_callbackOnGroupListenerProtocol { diff --git a/ios/Framework/OpenIMCore.framework/Headers/Open_im_sdk.objc.h b/ios/Framework/OpenIMCore.framework/Headers/Open_im_sdk.objc.h index 851dc0b..7528a47 100644 --- a/ios/Framework/OpenIMCore.framework/Headers/Open_im_sdk.objc.h +++ b/ios/Framework/OpenIMCore.framework/Headers/Open_im_sdk.objc.h @@ -27,6 +27,10 @@ FOUNDATION_EXPORT void Open_im_sdkAddBlack(id _Nullabl FOUNDATION_EXPORT void Open_im_sdkAddFriend(id _Nullable callback, NSString* _Nullable operationID, NSString* _Nullable userIDReqMsg); +FOUNDATION_EXPORT void Open_im_sdkChangeGroupMemberMute(id _Nullable callback, NSString* _Nullable operationID, NSString* _Nullable groupID, NSString* _Nullable userID, long mutedSeconds); + +FOUNDATION_EXPORT void Open_im_sdkChangeGroupMute(id _Nullable callback, NSString* _Nullable operationID, NSString* _Nullable groupID, BOOL isMute); + FOUNDATION_EXPORT void Open_im_sdkCheckFriend(id _Nullable callback, NSString* _Nullable operationID, NSString* _Nullable userIDList); // skipped function CheckResourceLoad with unsupported parameter or return types @@ -244,4 +248,6 @@ FOUNDATION_EXPORT void Open_im_sdkTypingStatusUpdate(id _Nullable callback, NSString* _Nullable operationID, NSString* _Nullable filePath, NSString* _Nullable token, NSString* _Nullable obj); +FOUNDATION_EXPORT void Open_im_sdkWakeUp(id _Nullable callback, NSString* _Nullable operationID); + #endif diff --git a/ios/Framework/OpenIMCore.framework/OpenIMCore b/ios/Framework/OpenIMCore.framework/OpenIMCore index c3f578d..1c5e875 100644 Binary files a/ios/Framework/OpenIMCore.framework/OpenIMCore and b/ios/Framework/OpenIMCore.framework/OpenIMCore differ diff --git a/lib/src/enum/message_type.dart b/lib/src/enum/message_type.dart index cf71f11..8c493c7 100644 --- a/lib/src/enum/message_type.dart +++ b/lib/src/enum/message_type.dart @@ -50,6 +50,11 @@ class MessageType { static const dismissGroupNotification = 1511; static const groupNotificationEnd = 1599; + static const groupMemberMutedNotification = 1512; + static const groupMemberCancelMutedNotification = 1513; + static const groupMutedNotification = 1514; + static const groupCancelMutedNotification = 1515; + static const signalingNotificationBegin = 1600; static const signalingNotification = 1601; static const signalingNotificationEnd = 1699; diff --git a/lib/src/manager/im_conversation_manager.dart b/lib/src/manager/im_conversation_manager.dart index f0533e8..4c527ea 100644 --- a/lib/src/manager/im_conversation_manager.dart +++ b/lib/src/manager/im_conversation_manager.dart @@ -204,6 +204,21 @@ class ConversationManager { })) .then((value) => Utils.toListMap(value)); + /// burn after reading + /// 阅后即焚 + Future setOneConversationPrivateChat({ + required String conversationID, + required bool isPrivate, + String? operationID, + }) => + _channel.invokeMethod( + 'setOneConversationPrivateChat', + _buildParam({ + "conversationID": conversationID, + "isPrivate": isPrivate, + "operationID": Utils.checkOperationID(operationID), + })); + /// Custom sort for conversation list /// 会话列表自定义排序规则。 List simpleSort(List list) => list diff --git a/lib/src/manager/im_group_manager.dart b/lib/src/manager/im_group_manager.dart index 80f3e8f..3b9ae08 100644 --- a/lib/src/manager/im_group_manager.dart +++ b/lib/src/manager/im_group_manager.dart @@ -333,6 +333,38 @@ class GroupManager { 'operationID': Utils.checkOperationID(operationID), })); + /// Enable group mute + /// 开启群禁言 + Future changeGroupMute({ + required String groupID, + required bool mute, + String? operationID, + }) => + _channel.invokeMethod( + 'changeGroupMute', + _buildParam({ + 'gid': groupID, + 'mute': mute, + 'operationID': Utils.checkOperationID(operationID), + })); + + /// Mute group members + /// 禁言群成员 + Future changeGroupMemberMute({ + required String groupID, + required String userID, + int seconds = 0, + String? operationID, + }) => + _channel.invokeMethod( + 'changeGroupMemberMute', + _buildParam({ + 'gid': groupID, + 'uid': userID, + 'seconds': seconds, + 'operationID': Utils.checkOperationID(operationID), + })); + static Map _buildParam(Map param) { param["ManagerName"] = "groupManager"; return param; diff --git a/lib/src/models/conversation_info.dart b/lib/src/models/conversation_info.dart index b2f0475..d7e4b1d 100644 --- a/lib/src/models/conversation_info.dart +++ b/lib/src/models/conversation_info.dart @@ -19,6 +19,7 @@ class ConversationInfo { String? draftText; int? draftTextTime; bool? isPinned; + bool? isPrivateChat; String? ext; ConversationInfo( @@ -34,6 +35,7 @@ class ConversationInfo { this.latestMsgSendTime, this.draftText, this.draftTextTime, + this.isPrivateChat, this.isPinned}); ConversationInfo.fromJson(Map json) @@ -56,6 +58,7 @@ class ConversationInfo { draftText = json['draftText']; draftTextTime = json['draftTextTime']; isPinned = json['isPinned']; + isPrivateChat = json['isPrivateChat']; } Map toJson() { @@ -73,6 +76,7 @@ class ConversationInfo { data['draftText'] = this.draftText; data['draftTextTime'] = this.draftTextTime; data['isPinned'] = this.isPinned; + data['isPrivateChat'] = this.isPrivateChat; return data; } diff --git a/lib/src/models/group_info.dart b/lib/src/models/group_info.dart index 428574c..eb68d29 100644 --- a/lib/src/models/group_info.dart +++ b/lib/src/models/group_info.dart @@ -7,6 +7,7 @@ class GroupInfo { String? ownerUserID; int? createTime; int? memberCount; + /// ok = 0 blocked = 1 Dismissed = 2 Muted = 3 int? status; String? creatorUserID; int? groupType; @@ -70,6 +71,7 @@ class GroupMembersInfo { int? joinSource; String? operatorUserID; String? ext; + int? muteEndTime; GroupMembersInfo({ this.groupID, @@ -81,6 +83,7 @@ class GroupMembersInfo { this.ext, this.joinSource, this.operatorUserID, + this.muteEndTime, }); GroupMembersInfo.fromJson(Map json) { @@ -93,6 +96,7 @@ class GroupMembersInfo { ext = json['ext']; joinSource = json['joinSource']; operatorUserID = json['operatorUserID']; + muteEndTime = json['muteEndTime']; } Map toJson() { @@ -106,6 +110,7 @@ class GroupMembersInfo { data['ext'] = this.ext; data['joinSource'] = this.joinSource; data['operatorUserID'] = this.operatorUserID; + data['muteEndTime'] = this.muteEndTime; return data; } } diff --git a/lib/src/models/message.dart b/lib/src/models/message.dart index 2b7775d..789cf51 100644 --- a/lib/src/models/message.dart +++ b/lib/src/models/message.dart @@ -581,18 +581,21 @@ class FaceElem { class AttachedInfoElem { GroupHasReadInfo? groupHasReadInfo; + bool? isPrivateChat; - AttachedInfoElem({this.groupHasReadInfo}); + AttachedInfoElem({this.groupHasReadInfo, this.isPrivateChat}); AttachedInfoElem.fromJson(Map json) { groupHasReadInfo = json['groupHasReadInfo'] == null ? null : GroupHasReadInfo.fromJson(json['groupHasReadInfo']); + isPrivateChat = json['isPrivateChat']; } Map toJson() { final data = Map(); data['groupHasReadInfo'] = this.groupHasReadInfo?.toJson(); + data['isPrivateChat'] = this.isPrivateChat; return data; } }