diff --git a/android/src/main/java/io/openim/flutter_openim_sdk/manager/ChannelManager.java b/android/src/main/java/io/openim/flutter_openim_sdk/manager/ChannelManager.java index 96ba9c8..58de63c 100644 --- a/android/src/main/java/io/openim/flutter_openim_sdk/manager/ChannelManager.java +++ b/android/src/main/java/io/openim/flutter_openim_sdk/manager/ChannelManager.java @@ -1,103 +1,113 @@ -package io.openim.flutter_openim_sdk.manager; - -import io.flutter.plugin.common.MethodCall; -import io.flutter.plugin.common.MethodChannel; -import io.openim.flutter_openim_sdk.listener.OnBaseListener; -import io.openim.flutter_openim_sdk.listener.OnChannelListener; -import open_im_sdk.Open_im_sdk; - -public class ChannelManager extends BaseManager { - - public void setChannelListener(MethodCall methodCall, MethodChannel.Result result) { - Open_im_sdk.setChannelListener(new OnChannelListener()); - - result.success(null); - } - - - public void getChannelMembersInfo(MethodCall methodCall, MethodChannel.Result result) { - Open_im_sdk.getSpecifiedChannelMembersInfo( - new OnBaseListener(result, methodCall), - value(methodCall, "operationID"), - value(methodCall, "channelID"), - jsonValue(methodCall, "userIDList") - ); - } - - public void getChannelMemberList(MethodCall methodCall, MethodChannel.Result result) { - Open_im_sdk.getChannelMemberList( - new OnBaseListener(result, methodCall), - value(methodCall, "operationID"), - value(methodCall, "channelID"), - value(methodCall, "filter"), - value(methodCall, "offset"), - value(methodCall, "count") - ); - } - - - public void getChannelsInfo(MethodCall methodCall, MethodChannel.Result result) { - Open_im_sdk.getSpecifiedChannelsInfo( - new OnBaseListener(result, methodCall), - value(methodCall, "operationID"), - jsonValue(methodCall, "channelIDList") - ); - } - - public void joinChannel(MethodCall methodCall, MethodChannel.Result result) { - Open_im_sdk.joinChannel( - new OnBaseListener(result, methodCall), - value(methodCall, "operationID"), - value(methodCall, "channelID"), - value(methodCall, "reason"), - value(methodCall, "joinSource"), - value(methodCall, "ex") - ); - } - - public void quitChannel(MethodCall methodCall, MethodChannel.Result result) { - Open_im_sdk.quitChannel( - new OnBaseListener(result, methodCall), - value(methodCall, "operationID"), - value(methodCall, "channelID") - ); - } - - - - public void changeChannelMute(MethodCall methodCall, MethodChannel.Result result) { - Open_im_sdk.changeChannelMute( - new OnBaseListener(result, methodCall), - value(methodCall, "operationID"), - value(methodCall, "channelID"), - value(methodCall, "mute") - ); - } - - public void changeChannelMemberMute(MethodCall methodCall, MethodChannel.Result result) { - Open_im_sdk.changeChannelMemberMute( - new OnBaseListener(result, methodCall), - value(methodCall, "operationID"), - value(methodCall, "channelID"), - value(methodCall, "userID"), - int2long(methodCall, "seconds") - ); - } - - - - public void isJoinChannel(MethodCall methodCall, MethodChannel.Result result) { - Open_im_sdk.isJoinChannel(new OnBaseListener(result, methodCall), - value(methodCall, "operationID"), - value(methodCall, "channelID") - ); - } - - public void getUsersInChannel(MethodCall methodCall, MethodChannel.Result result) { - Open_im_sdk.getUsersInChannel(new OnBaseListener(result, methodCall), - value(methodCall, "operationID"), - value(methodCall, "channelID"), - jsonValue(methodCall, "userIDs") - ); - } +package io.openim.flutter_openim_sdk.manager; + +import io.flutter.plugin.common.MethodCall; +import io.flutter.plugin.common.MethodChannel; +import io.openim.flutter_openim_sdk.listener.OnBaseListener; +import io.openim.flutter_openim_sdk.listener.OnChannelListener; +import open_im_sdk.Open_im_sdk; + +public class ChannelManager extends BaseManager { + + public void setChannelListener(MethodCall methodCall, MethodChannel.Result result) { + Open_im_sdk.setChannelListener(new OnChannelListener()); + + result.success(null); + } + + + public void getChannelMembersInfo(MethodCall methodCall, MethodChannel.Result result) { + Open_im_sdk.getSpecifiedChannelMembersInfo( + new OnBaseListener(result, methodCall), + value(methodCall, "operationID"), + value(methodCall, "channelID"), + jsonValue(methodCall, "userIDList") + ); + } + + public void getChannelMemberList(MethodCall methodCall, MethodChannel.Result result) { + Open_im_sdk.getChannelMemberList( + new OnBaseListener(result, methodCall), + value(methodCall, "operationID"), + value(methodCall, "channelID"), + value(methodCall, "filter"), + value(methodCall, "offset"), + value(methodCall, "count") + ); + } + + + public void getChannelsInfo(MethodCall methodCall, MethodChannel.Result result) { + Open_im_sdk.getSpecifiedChannelsInfo( + new OnBaseListener(result, methodCall), + value(methodCall, "operationID"), + jsonValue(methodCall, "channelIDList") + ); + } + + public void joinChannel(MethodCall methodCall, MethodChannel.Result result) { + Open_im_sdk.joinChannel( + new OnBaseListener(result, methodCall), + value(methodCall, "operationID"), + value(methodCall, "channelID"), + value(methodCall, "reason"), + value(methodCall, "joinSource"), + value(methodCall, "ex") + ); + } + + public void quitChannel(MethodCall methodCall, MethodChannel.Result result) { + Open_im_sdk.quitChannel( + new OnBaseListener(result, methodCall), + value(methodCall, "operationID"), + value(methodCall, "channelID") + ); + } + + + + public void changeChannelMute(MethodCall methodCall, MethodChannel.Result result) { + Open_im_sdk.changeChannelMute( + new OnBaseListener(result, methodCall), + value(methodCall, "operationID"), + value(methodCall, "channelID"), + value(methodCall, "mute") + ); + } + + public void changeChannelMemberMute(MethodCall methodCall, MethodChannel.Result result) { + Open_im_sdk.changeChannelMemberMute( + new OnBaseListener(result, methodCall), + value(methodCall, "operationID"), + value(methodCall, "channelID"), + value(methodCall, "userID"), + int2long(methodCall, "seconds") + ); + } + + + + public void isJoinChannel(MethodCall methodCall, MethodChannel.Result result) { + Open_im_sdk.isJoinChannel(new OnBaseListener(result, methodCall), + value(methodCall, "operationID"), + value(methodCall, "channelID") + ); + } + + public void getUsersInChannel(MethodCall methodCall, MethodChannel.Result result) { + Open_im_sdk.getUsersInChannel(new OnBaseListener(result, methodCall), + value(methodCall, "operationID"), + value(methodCall, "channelID"), + jsonValue(methodCall, "userIDs") + ); + } + + public void getChannelHistoryMessages(MethodCall methodCall, MethodChannel.Result result) { + Open_im_sdk.getChannelHistoryMessages( + new OnBaseListener(result, methodCall), + value(methodCall, "operationID"), + value(methodCall, "channelID"), + value(methodCall, "count"), + int2long(methodCall, "sinceSeq") + ); + } } \ No newline at end of file diff --git a/ios/Classes/Module/ChannelManager.swift b/ios/Classes/Module/ChannelManager.swift index 7130d37..801543a 100644 --- a/ios/Classes/Module/ChannelManager.swift +++ b/ios/Classes/Module/ChannelManager.swift @@ -1,101 +1,106 @@ -import Foundation -import OpenIMCore - -public class ChannelManager: BaseServiceManager { - - public override func registerHandlers() { - super.registerHandlers() - - // self["changeChannelMemberMute"] = changeChannelMemberMute - // self["changeChannelMute"] = changeChannelMute - - // self["getChannelMemberList"] = getChannelMemberList - - - self["getChannelMembersInfo"] = getChannelMembersInfo - self["getChannelsInfo"] = getChannelsInfo - - - self["getUsersInChannel"] = getUsersInChannel - self["isJoinChannel"] = isJoinChannel - self["joinChannel"] = joinChannel - self["quitChannel"] = quitChannel - self["setChannelListener"] = setChannelListener - - } - -// func changeChannelMemberMute(methodCall: FlutterMethodCall, result: @escaping FlutterResult) { -// Open_im_sdkChangeChannelMemberMute(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[string: "channelID"], methodCall[string:"userID"], methodCall[int:"seconds"]) -// } -// -// func changeChannelMute(methodCall: FlutterMethodCall, result: @escaping FlutterResult) { -// Open_im_sdkChangeChannelMute(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[string: "channelID"], methodCall[bool: "mute"]) -// } -// -// func getChannelMemberList(methodCall: FlutterMethodCall, result: @escaping FlutterResult) { -// Open_im_sdkGetChannelMemberList(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[string: "channelID"], methodCall[int32: "filter"], -// methodCall[int32: "offset"], methodCall[int32: "count"]) -// } - - func getChannelMembersInfo(methodCall: FlutterMethodCall, result: @escaping FlutterResult) { - Open_im_sdkGetSpecifiedChannelMembersInfo(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[string: "channelID"], methodCall[jsonString: "userIDList"]) - } - - func getChannelsInfo(methodCall: FlutterMethodCall, result: @escaping FlutterResult) { - Open_im_sdkGetSpecifiedChannelsInfo(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[jsonString: "channelIDList"]) - } - - func getUsersInChannel(methodCall: FlutterMethodCall, result: @escaping FlutterResult) { - Open_im_sdkGetUsersInChannel(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[string: "channelID"], - methodCall[jsonString: "userIDs"]) - } - - func isJoinChannel(methodCall: FlutterMethodCall, result: @escaping FlutterResult) { - Open_im_sdkIsJoinChannel(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[string: "channelID"]) - } - - func joinChannel(methodCall: FlutterMethodCall, result: @escaping FlutterResult) { - Open_im_sdkJoinChannel(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[string: "channelID"], methodCall[string: - "reason"], methodCall[int32: "joinSource"], methodCall[jsonString: "ex"]) - } - - - func quitChannel(methodCall: FlutterMethodCall, result: @escaping FlutterResult) { - Open_im_sdkQuitChannel(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[string: "channelID"]) - } - - func setChannelListener(methodCall: FlutterMethodCall, result: @escaping FlutterResult) { - Open_im_sdkSetChannelListener(ChannelListener(channel: channel)) - callBack(result) - } -} - -public class ChannelListener: NSObject, Open_im_sdk_callbackOnChannelListenerProtocol { - - private let channel: FlutterMethodChannel - - init(channel: FlutterMethodChannel) { - self.channel = channel - } - - public func onChannelDismissed(_ s: String?) { - CommonUtil.emitEvent(channel: channel, method: "channelListener", type: "onChannelDismissed", errCode: nil, errMsg: nil, data: s) - } - - public func onChannelInfoChanged(_ s: String?) { - CommonUtil.emitEvent(channel: channel, method: "channelListener", type: "onChannelInfoChanged", errCode: nil, errMsg: nil, data: s) - } - - public func onChannelMemberAdded(_ s: String?) { - CommonUtil.emitEvent(channel: channel, method: "channelListener", type: "onChannelMemberAdded", errCode: nil, errMsg: nil, data: s) - } - - public func onChannelMemberDeleted(_ s: String?) { - CommonUtil.emitEvent(channel: channel, method: "channelListener", type: "onChannelMemberDeleted", errCode: nil, errMsg: nil, data: s) - } - - public func onChannelMemberInfoChanged(_ s: String?) { - CommonUtil.emitEvent(channel: channel, method: "channelListener", type: "onChannelMemberInfoChanged", errCode: nil, errMsg: nil, data: s) - } - -} +import Foundation +import OpenIMCore + +public class ChannelManager: BaseServiceManager { + + public override func registerHandlers() { + super.registerHandlers() + + // self["changeChannelMemberMute"] = changeChannelMemberMute + // self["changeChannelMute"] = changeChannelMute + + // self["getChannelMemberList"] = getChannelMemberList + + + self["getChannelMembersInfo"] = getChannelMembersInfo + self["getChannelsInfo"] = getChannelsInfo + + + self["getUsersInChannel"] = getUsersInChannel + self["getChannelHistoryMessages"] = getChannelHistoryMessages + self["isJoinChannel"] = isJoinChannel + self["joinChannel"] = joinChannel + self["quitChannel"] = quitChannel + self["setChannelListener"] = setChannelListener + + } + +// func changeChannelMemberMute(methodCall: FlutterMethodCall, result: @escaping FlutterResult) { +// Open_im_sdkChangeChannelMemberMute(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[string: "channelID"], methodCall[string:"userID"], methodCall[int:"seconds"]) +// } +// +// func changeChannelMute(methodCall: FlutterMethodCall, result: @escaping FlutterResult) { +// Open_im_sdkChangeChannelMute(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[string: "channelID"], methodCall[bool: "mute"]) +// } +// +// func getChannelMemberList(methodCall: FlutterMethodCall, result: @escaping FlutterResult) { +// Open_im_sdkGetChannelMemberList(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[string: "channelID"], methodCall[int32: "filter"], +// methodCall[int32: "offset"], methodCall[int32: "count"]) +// } + + func getChannelMembersInfo(methodCall: FlutterMethodCall, result: @escaping FlutterResult) { + Open_im_sdkGetSpecifiedChannelMembersInfo(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[string: "channelID"], methodCall[jsonString: "userIDList"]) + } + + func getChannelsInfo(methodCall: FlutterMethodCall, result: @escaping FlutterResult) { + Open_im_sdkGetSpecifiedChannelsInfo(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[jsonString: "channelIDList"]) + } + + func getUsersInChannel(methodCall: FlutterMethodCall, result: @escaping FlutterResult) { + Open_im_sdkGetUsersInChannel(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[string: "channelID"], + methodCall[jsonString: "userIDs"]) + } + + func getChannelHistoryMessages(methodCall: FlutterMethodCall, result: @escaping FlutterResult) { + Open_im_sdkGetChannelHistoryMessages(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[string: "channelID"], methodCall[int: "count"], methodCall[int64: "sinceSeq"]) + } + + func isJoinChannel(methodCall: FlutterMethodCall, result: @escaping FlutterResult) { + Open_im_sdkIsJoinChannel(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[string: "channelID"]) + } + + func joinChannel(methodCall: FlutterMethodCall, result: @escaping FlutterResult) { + Open_im_sdkJoinChannel(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[string: "channelID"], methodCall[string: + "reason"], methodCall[int32: "joinSource"], methodCall[jsonString: "ex"]) + } + + + func quitChannel(methodCall: FlutterMethodCall, result: @escaping FlutterResult) { + Open_im_sdkQuitChannel(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[string: "channelID"]) + } + + func setChannelListener(methodCall: FlutterMethodCall, result: @escaping FlutterResult) { + Open_im_sdkSetChannelListener(ChannelListener(channel: channel)) + callBack(result) + } +} + +public class ChannelListener: NSObject, Open_im_sdk_callbackOnChannelListenerProtocol { + + private let channel: FlutterMethodChannel + + init(channel: FlutterMethodChannel) { + self.channel = channel + } + + public func onChannelDismissed(_ s: String?) { + CommonUtil.emitEvent(channel: channel, method: "channelListener", type: "onChannelDismissed", errCode: nil, errMsg: nil, data: s) + } + + public func onChannelInfoChanged(_ s: String?) { + CommonUtil.emitEvent(channel: channel, method: "channelListener", type: "onChannelInfoChanged", errCode: nil, errMsg: nil, data: s) + } + + public func onChannelMemberAdded(_ s: String?) { + CommonUtil.emitEvent(channel: channel, method: "channelListener", type: "onChannelMemberAdded", errCode: nil, errMsg: nil, data: s) + } + + public func onChannelMemberDeleted(_ s: String?) { + CommonUtil.emitEvent(channel: channel, method: "channelListener", type: "onChannelMemberDeleted", errCode: nil, errMsg: nil, data: s) + } + + public func onChannelMemberInfoChanged(_ s: String?) { + CommonUtil.emitEvent(channel: channel, method: "channelListener", type: "onChannelMemberInfoChanged", errCode: nil, errMsg: nil, data: s) + } + +} diff --git a/lib/src/manager/im_channel_manager.dart b/lib/src/manager/im_channel_manager.dart index a3e4f61..84d00d6 100644 --- a/lib/src/manager/im_channel_manager.dart +++ b/lib/src/manager/im_channel_manager.dart @@ -1,319 +1,338 @@ -import 'dart:developer'; - -import 'package:flutter/services.dart'; -import 'package:flutter_openim_sdk/flutter_openim_sdk.dart'; - -class ChannelManager { - MethodChannel _channel; - late OnChannelListener listener; - - ChannelManager(this._channel); - - /// Channel relationship listener - Future setChannelListener(OnChannelListener listener) { - this.listener = listener; - return _channel.invokeMethod('setChannelListener', _buildParam({})); - } - - /// Query channel member information - /// [channelID] Channel ID - /// [userIDList] List of user IDs - Future> getChannelMembersInfo({ - required String channelID, - required List userIDList, - String? operationID, - }) => - _channel - .invokeMethod( - 'getChannelMembersInfo', - _buildParam({ - 'channelID': channelID, - 'userIDList': userIDList, - "operationID": Utils.checkOperationID(operationID), - })) - .then((value) => - Utils.toList(value, (map) => ChannelMembersInfo.fromJson(map))); - - /// Paginate and retrieve the channel member list - /// [channelID] Channel ID - /// [filter] Member filter (0: All, 1: Channel owner, 2: Administrator, 3: Regular member, 4: Admin + Regular member, 5: Channel owner + Admin) - /// [offset] Starting index - /// [count] Total count - Future> getChannelMemberList({ - required String channelID, - int filter = 0, - int offset = 0, - int count = 0, - String? operationID, - }) => - _channel - .invokeMethod( - 'getChannelMemberList', - _buildParam({ - 'channelID': channelID, - 'filter': filter, - 'offset': offset, - 'count': count, - 'operationID': Utils.checkOperationID(operationID), - })) - .then((value) => - Utils.toList(value, (map) => ChannelMembersInfo.fromJson(map))); - - // /// Paginate and retrieve the channel member list as a map - // /// [channelID] Channel ID - // /// [filter] Member filter (0: All, 1: Channel owner, 2: Administrator, 3: Regular member, 4: Admin + Regular member, 5: Channel owner + Admin) - // /// [offset] Starting index - // /// [count] Total count - // Future> getChannelMemberListMap({ - // required String channelID, - // int filter = 0, - // int offset = 0, - // int count = 0, - // String? operationID, - // }) => - // _channel - // .invokeMethod( - // 'getChannelMemberList', - // _buildParam({ - // 'channelID': channelID, - // 'filter': filter, - // 'offset': offset, - // 'count': count, - // 'operationID': Utils.checkOperationID(operationID), - // })) - // .then((value) => Utils.toListMap(value)); - - // /// Query the list of joined channels - // Future> getJoinedChannelList({String? operationID}) => _channel - // .invokeMethod( - // 'getJoinedChannelList', - // _buildParam({ - // 'operationID': Utils.checkOperationID(operationID), - // })) - // .then((value) => Utils.toList(value, (map) => ChannelInfo.fromJson(map))); - // - // Future> getJoinedChannelListPage({String? operationID, int offset = 0, int count = 40}) => _channel - // .invokeMethod( - // 'getJoinedChannelListPage', - // _buildParam({ - // 'offset': offset, - // 'count': count, - // 'operationID': Utils.checkOperationID(operationID), - // })) - // .then((value) => Utils.toList(value, (map) => ChannelInfo.fromJson(map))); - - // /// Query the list of joined channels - // Future> getJoinedChannelListMap({String? operationID}) => - // _channel - // .invokeMethod( - // 'getJoinedChannelList', - // _buildParam({ - // 'operationID': Utils.checkOperationID(operationID), - // })) - // .then((value) => Utils.toListMap(value)); - - /// Check if the user has joined a channel - /// [channelID] Channel ID - Future isJoinedChannel({ - required String channelID, - String? operationID, - }) => - _channel - .invokeMethod( - 'isJoinChannel', - _buildParam({ - 'channelID': channelID, - 'operationID': Utils.checkOperationID(operationID), - })) - .then((value) => value == 'true' ? true : false); - - /// Query channel information - Future> getChannelsInfo({ - required List channelIDList, - String? operationID, - }) => - _channel - .invokeMethod( - 'getChannelsInfo', - _buildParam({ - 'channelIDList': channelIDList, - 'operationID': Utils.checkOperationID(operationID), - })) - .then((value) => - Utils.toList(value, (map) => ChannelInfo.fromJson(map))); - - /// Apply to join a channel, requiring approval from an administrator or the channel. - /// [joinSource] 2: Invited, 3: Searched, 4: Using a QR code - Future joinChannel( - {required String channelID, - String? reason, - String? operationID, - int joinSource = 3, - String? ex}) => - _channel.invokeMethod( - 'joinChannel', - _buildParam({ - 'channelID': channelID, - 'reason': reason, - 'joinSource': joinSource, - 'ex': ex, - 'operationID': Utils.checkOperationID(operationID), - })); - - /// Exit a channel - Future quitChannel({ - required String channelID, - String? operationID, - }) => - _channel.invokeMethod( - 'quitChannel', - _buildParam({ - 'channelID': channelID, - 'operationID': Utils.checkOperationID(operationID), - })); - - // - // /// Query a channel - // /// [keywordList] Search keywords; currently, only one keyword is supported, and it cannot be empty. - // /// [isSearchChannelID] Whether to search by channel ID (Note: cannot set both to false at the same time); defaults to false if not set. - // /// [isSearchChannelName] Whether to search by channel name; defaults to false if not set. - // Future> searchChannels({ - // List keywordList = const [], - // bool isSearchChannelID = false, - // bool isSearchChannelName = false, - // String? operationID, - // }) => - // _channel - // .invokeMethod( - // 'searchChannels', - // _buildParam({ - // 'searchParam': { - // 'keywordList': keywordList, - // 'isSearchChannelID': isSearchChannelID, - // 'isSearchChannelName': isSearchChannelName, - // }, - // 'operationID': Utils.checkOperationID(operationID), - // })) - // .then((value) => Utils.toList(value, (map) => ChannelInfo.fromJson(map))); - - // /// Get a channel member list based on join time - // Future> getChannelMemberListByJoinTime({ - // required String channelID, - // int offset = 0, - // int count = 0, - // int joinTimeBegin = 0, - // int joinTimeEnd = 0, - // List filterUserIDList = const [], - // String? operationID, - // }) => - // _channel - // .invokeMethod( - // 'getChannelMemberListByJoinTimeFilter', - // _buildParam({ - // 'channelID': channelID, - // 'offset': offset, - // 'count': count, - // 'joinTimeBegin': joinTimeBegin, - // 'joinTimeEnd': joinTimeEnd, - // 'excludeUserIDList': filterUserIDList, - // 'operationID': Utils.checkOperationID(operationID), - // })) - // .then((value) => Utils.toList(value, (map) => ChannelMembersInfo.fromJson(map))); - - // /// Search for channel members - // /// [channelID] Channel ID - // /// [keywordList] Search keywords; currently, only one keyword is supported, and it cannot be empty. - // /// [isSearchUserID] Whether to search by member ID - // /// [isSearchMemberNickname] Whether to search by member nickname - // /// [offset] Start index - // /// [count] Total count to retrieve - // Future> searchChannelMembers({ - // required String channelID, - // List keywordList = const [], - // bool isSearchUserID = false, - // bool isSearchMemberNickname = false, - // int offset = 0, - // int count = 40, - // String? operationID, - // }) => - // _channel - // .invokeMethod( - // 'searchChannelMembers', - // _buildParam({ - // 'searchParam': { - // 'channelID': channelID, - // 'keywordList': keywordList, - // 'isSearchUserID': isSearchUserID, - // 'isSearchMemberNickname': isSearchMemberNickname, - // 'offset': offset, - // 'count': count, - // }, - // 'operationID': Utils.checkOperationID(operationID), - // })) - // .then((value) => Utils.toList(value, (map) => ChannelMembersInfo.fromJson(map))); - - // /// Query a channel - // /// [channelID] Channel ID - // /// [keywordList] Search keyword, currently only supports searching with one keyword, and it cannot be empty - // /// [isSearchUserID] Whether to search member IDs with the keyword - // /// [isSearchMemberNickname] Whether to search member nicknames with the keyword - // /// [offset] Starting index - // /// [count] Total number to retrieve each time - // Future> searchChannelMembersListMap({ - // required String channelID, - // List keywordList = const [], - // bool isSearchUserID = false, - // bool isSearchMemberNickname = false, - // int offset = 0, - // int count = 40, - // String? operationID, - // }) => - // _channel - // .invokeMethod( - // 'searchChannelMembers', - // _buildParam({ - // 'searchParam': { - // 'channelID': channelID, - // 'keywordList': keywordList, - // 'isSearchUserID': isSearchUserID, - // 'isSearchMemberNickname': isSearchMemberNickname, - // 'offset': offset, - // 'count': count, - // }, - // 'operationID': Utils.checkOperationID(operationID), - // })) - // .then((value) => Utils.toListMap(value)); - // - // /// Modify the ChannelMemberInfo ex field - // Future setChannelMemberInfo({ - // required SetChannelMemberInfo channelMembersInfo, - // String? operationID, - // }) => - // _channel.invokeMethod( - // 'setChannelMemberInfo', - // _buildParam({ - // 'info': channelMembersInfo.toJson(), - // 'operationID': Utils.checkOperationID(operationID), - // })); - - Future getUsersInChannel( - String channelID, - List userIDs, { - String? operationID, - }) => - _channel.invokeMethod( - 'getUsersInChannel', - _buildParam({ - 'channelID': channelID, - 'userIDs': userIDs, - 'operationID': Utils.checkOperationID(operationID), - })); - - static Map _buildParam(Map param) { - param["ManagerName"] = "channelManager"; - param = Utils.cleanMap(param); - log('param: $param'); - - return param; - } -} +import 'dart:developer'; + +import 'package:flutter/services.dart'; +import 'package:flutter_openim_sdk/flutter_openim_sdk.dart'; + +class ChannelManager { + MethodChannel _channel; + late OnChannelListener listener; + + ChannelManager(this._channel); + + /// Channel relationship listener + Future setChannelListener(OnChannelListener listener) { + this.listener = listener; + return _channel.invokeMethod('setChannelListener', _buildParam({})); + } + + /// Query channel member information + /// [channelID] Channel ID + /// [userIDList] List of user IDs + Future> getChannelMembersInfo({ + required String channelID, + required List userIDList, + String? operationID, + }) => + _channel + .invokeMethod( + 'getChannelMembersInfo', + _buildParam({ + 'channelID': channelID, + 'userIDList': userIDList, + "operationID": Utils.checkOperationID(operationID), + })) + .then((value) => + Utils.toList(value, (map) => ChannelMembersInfo.fromJson(map))); + + /// Paginate and retrieve the channel member list + /// [channelID] Channel ID + /// [filter] Member filter (0: All, 1: Channel owner, 2: Administrator, 3: Regular member, 4: Admin + Regular member, 5: Channel owner + Admin) + /// [offset] Starting index + /// [count] Total count + Future> getChannelMemberList({ + required String channelID, + int filter = 0, + int offset = 0, + int count = 0, + String? operationID, + }) => + _channel + .invokeMethod( + 'getChannelMemberList', + _buildParam({ + 'channelID': channelID, + 'filter': filter, + 'offset': offset, + 'count': count, + 'operationID': Utils.checkOperationID(operationID), + })) + .then((value) => + Utils.toList(value, (map) => ChannelMembersInfo.fromJson(map))); + + // /// Paginate and retrieve the channel member list as a map + // /// [channelID] Channel ID + // /// [filter] Member filter (0: All, 1: Channel owner, 2: Administrator, 3: Regular member, 4: Admin + Regular member, 5: Channel owner + Admin) + // /// [offset] Starting index + // /// [count] Total count + // Future> getChannelMemberListMap({ + // required String channelID, + // int filter = 0, + // int offset = 0, + // int count = 0, + // String? operationID, + // }) => + // _channel + // .invokeMethod( + // 'getChannelMemberList', + // _buildParam({ + // 'channelID': channelID, + // 'filter': filter, + // 'offset': offset, + // 'count': count, + // 'operationID': Utils.checkOperationID(operationID), + // })) + // .then((value) => Utils.toListMap(value)); + + // /// Query the list of joined channels + // Future> getJoinedChannelList({String? operationID}) => _channel + // .invokeMethod( + // 'getJoinedChannelList', + // _buildParam({ + // 'operationID': Utils.checkOperationID(operationID), + // })) + // .then((value) => Utils.toList(value, (map) => ChannelInfo.fromJson(map))); + // + // Future> getJoinedChannelListPage({String? operationID, int offset = 0, int count = 40}) => _channel + // .invokeMethod( + // 'getJoinedChannelListPage', + // _buildParam({ + // 'offset': offset, + // 'count': count, + // 'operationID': Utils.checkOperationID(operationID), + // })) + // .then((value) => Utils.toList(value, (map) => ChannelInfo.fromJson(map))); + + // /// Query the list of joined channels + // Future> getJoinedChannelListMap({String? operationID}) => + // _channel + // .invokeMethod( + // 'getJoinedChannelList', + // _buildParam({ + // 'operationID': Utils.checkOperationID(operationID), + // })) + // .then((value) => Utils.toListMap(value)); + + /// Check if the user has joined a channel + /// [channelID] Channel ID + Future isJoinedChannel({ + required String channelID, + String? operationID, + }) => + _channel + .invokeMethod( + 'isJoinChannel', + _buildParam({ + 'channelID': channelID, + 'operationID': Utils.checkOperationID(operationID), + })) + .then((value) => value == 'true' ? true : false); + + /// Query channel information + Future> getChannelsInfo({ + required List channelIDList, + String? operationID, + }) => + _channel + .invokeMethod( + 'getChannelsInfo', + _buildParam({ + 'channelIDList': channelIDList, + 'operationID': Utils.checkOperationID(operationID), + })) + .then((value) => + Utils.toList(value, (map) => ChannelInfo.fromJson(map))); + + /// Apply to join a channel, requiring approval from an administrator or the channel. + /// [joinSource] 2: Invited, 3: Searched, 4: Using a QR code + Future joinChannel( + {required String channelID, + String? reason, + String? operationID, + int joinSource = 3, + String? ex}) => + _channel.invokeMethod( + 'joinChannel', + _buildParam({ + 'channelID': channelID, + 'reason': reason, + 'joinSource': joinSource, + 'ex': ex, + 'operationID': Utils.checkOperationID(operationID), + })); + + /// Exit a channel + Future quitChannel({ + required String channelID, + String? operationID, + }) => + _channel.invokeMethod( + 'quitChannel', + _buildParam({ + 'channelID': channelID, + 'operationID': Utils.checkOperationID(operationID), + })); + + // + // /// Query a channel + // /// [keywordList] Search keywords; currently, only one keyword is supported, and it cannot be empty. + // /// [isSearchChannelID] Whether to search by channel ID (Note: cannot set both to false at the same time); defaults to false if not set. + // /// [isSearchChannelName] Whether to search by channel name; defaults to false if not set. + // Future> searchChannels({ + // List keywordList = const [], + // bool isSearchChannelID = false, + // bool isSearchChannelName = false, + // String? operationID, + // }) => + // _channel + // .invokeMethod( + // 'searchChannels', + // _buildParam({ + // 'searchParam': { + // 'keywordList': keywordList, + // 'isSearchChannelID': isSearchChannelID, + // 'isSearchChannelName': isSearchChannelName, + // }, + // 'operationID': Utils.checkOperationID(operationID), + // })) + // .then((value) => Utils.toList(value, (map) => ChannelInfo.fromJson(map))); + + // /// Get a channel member list based on join time + // Future> getChannelMemberListByJoinTime({ + // required String channelID, + // int offset = 0, + // int count = 0, + // int joinTimeBegin = 0, + // int joinTimeEnd = 0, + // List filterUserIDList = const [], + // String? operationID, + // }) => + // _channel + // .invokeMethod( + // 'getChannelMemberListByJoinTimeFilter', + // _buildParam({ + // 'channelID': channelID, + // 'offset': offset, + // 'count': count, + // 'joinTimeBegin': joinTimeBegin, + // 'joinTimeEnd': joinTimeEnd, + // 'excludeUserIDList': filterUserIDList, + // 'operationID': Utils.checkOperationID(operationID), + // })) + // .then((value) => Utils.toList(value, (map) => ChannelMembersInfo.fromJson(map))); + + // /// Search for channel members + // /// [channelID] Channel ID + // /// [keywordList] Search keywords; currently, only one keyword is supported, and it cannot be empty. + // /// [isSearchUserID] Whether to search by member ID + // /// [isSearchMemberNickname] Whether to search by member nickname + // /// [offset] Start index + // /// [count] Total count to retrieve + // Future> searchChannelMembers({ + // required String channelID, + // List keywordList = const [], + // bool isSearchUserID = false, + // bool isSearchMemberNickname = false, + // int offset = 0, + // int count = 40, + // String? operationID, + // }) => + // _channel + // .invokeMethod( + // 'searchChannelMembers', + // _buildParam({ + // 'searchParam': { + // 'channelID': channelID, + // 'keywordList': keywordList, + // 'isSearchUserID': isSearchUserID, + // 'isSearchMemberNickname': isSearchMemberNickname, + // 'offset': offset, + // 'count': count, + // }, + // 'operationID': Utils.checkOperationID(operationID), + // })) + // .then((value) => Utils.toList(value, (map) => ChannelMembersInfo.fromJson(map))); + + // /// Query a channel + // /// [channelID] Channel ID + // /// [keywordList] Search keyword, currently only supports searching with one keyword, and it cannot be empty + // /// [isSearchUserID] Whether to search member IDs with the keyword + // /// [isSearchMemberNickname] Whether to search member nicknames with the keyword + // /// [offset] Starting index + // /// [count] Total number to retrieve each time + // Future> searchChannelMembersListMap({ + // required String channelID, + // List keywordList = const [], + // bool isSearchUserID = false, + // bool isSearchMemberNickname = false, + // int offset = 0, + // int count = 40, + // String? operationID, + // }) => + // _channel + // .invokeMethod( + // 'searchChannelMembers', + // _buildParam({ + // 'searchParam': { + // 'channelID': channelID, + // 'keywordList': keywordList, + // 'isSearchUserID': isSearchUserID, + // 'isSearchMemberNickname': isSearchMemberNickname, + // 'offset': offset, + // 'count': count, + // }, + // 'operationID': Utils.checkOperationID(operationID), + // })) + // .then((value) => Utils.toListMap(value)); + // + // /// Modify the ChannelMemberInfo ex field + // Future setChannelMemberInfo({ + // required SetChannelMemberInfo channelMembersInfo, + // String? operationID, + // }) => + // _channel.invokeMethod( + // 'setChannelMemberInfo', + // _buildParam({ + // 'info': channelMembersInfo.toJson(), + // 'operationID': Utils.checkOperationID(operationID), + // })); + + Future getUsersInChannel( + String channelID, + List userIDs, { + String? operationID, + }) => + _channel.invokeMethod( + 'getUsersInChannel', + _buildParam({ + 'channelID': channelID, + 'userIDs': userIDs, + 'operationID': Utils.checkOperationID(operationID), + })); + + /// Get channel short-term history messages + /// [channelID] Channel ID + /// [count] Number of messages to retrieve + /// [sinceSeq] Internal sequence cursor for pagination (0 for first page) + Future getChannelHistoryMessages({ + required String channelID, + int count = 20, + int sinceSeq = 0, + String? operationID, + }) => + _channel.invokeMethod( + 'getChannelHistoryMessages', + _buildParam({ + 'channelID': channelID, + 'count': count, + 'sinceSeq': sinceSeq, + 'operationID': Utils.checkOperationID(operationID), + })); + + static Map _buildParam(Map param) { + param["ManagerName"] = "channelManager"; + param = Utils.cleanMap(param); + log('param: $param'); + + return param; + } +}