feat: add 'hideAllConversations', 'updateFcmToken'

main
Brett 1 year ago
parent 2cafa6bab8
commit cd506801cf
  1. 7
      android/src/main/java/io/openim/flutter_openim_sdk/manager/ConversationManager.java
  2. 3
      android/src/main/java/io/openim/flutter_openim_sdk/manager/IMManager.java
  3. 5
      ios/Classes/Module/ConversationManager.swift
  4. 3
      ios/Classes/Module/IMManager.swift
  5. 60
      lib/src/manager/im_conversation_manager.dart
  6. 91
      lib/src/manager/im_manager.dart
  7. 2
      lib/src/manager/im_message_manager.dart

@ -193,4 +193,11 @@ public class ConversationManager extends BaseManager {
int2long(methodCall, "duration") int2long(methodCall, "duration")
); );
} }
public void hideAllConversations(MethodCall methodCall, MethodChannel.Result result) {
Open_im_sdk.hideAllConversations(
new OnBaseListener(result, methodCall),
value(methodCall, "operationID")
);
}
} }

@ -57,7 +57,8 @@ public class IMManager extends BaseManager {
Open_im_sdk.updateFcmToken( Open_im_sdk.updateFcmToken(
new OnBaseListener(result, methodCall), new OnBaseListener(result, methodCall),
value(methodCall, "operationID"), value(methodCall, "operationID"),
value(methodCall, "fcmToken") value(methodCall, "fcmToken"),
value(methodCall, "expireTime")
); );
} }

@ -26,6 +26,7 @@ public class ConversationManager: BaseServiceManager {
self["getAtAllTag"] = getAtAllTag self["getAtAllTag"] = getAtAllTag
self["setGlobalRecvMessageOpt"] = setGlobalRecvMessageOpt self["setGlobalRecvMessageOpt"] = setGlobalRecvMessageOpt
self["setConversationBurnDuration"] = setConversationBurnDuration self["setConversationBurnDuration"] = setConversationBurnDuration
self["hideAllConversations"] = hideAllConversations
} }
func setConversationListener(methodCall: FlutterMethodCall, result: @escaping FlutterResult){ func setConversationListener(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
@ -113,6 +114,10 @@ public class ConversationManager: BaseServiceManager {
func setConversationBurnDuration(methodCall: FlutterMethodCall, result: @escaping FlutterResult){ func setConversationBurnDuration(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
Open_im_sdkSetConversationBurnDuration(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[string: "conversationID"], methodCall[int32: "burnDuration"]) Open_im_sdkSetConversationBurnDuration(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[string: "conversationID"], methodCall[int32: "burnDuration"])
} }
func hideAllConversations(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
Open_im_sdkHideAllConversations(BaseCallback(result: result), methodCall[string: "operationID"])
}
} }

@ -85,7 +85,8 @@ public class IMMananger: BaseServiceManager {
} }
func updateFcmToken(methodCall: FlutterMethodCall, result: @escaping FlutterResult) { func updateFcmToken(methodCall: FlutterMethodCall, result: @escaping FlutterResult) {
Open_im_sdkUpdateFcmToken(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[string: "fcmToken"]) Open_im_sdkUpdateFcmToken(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[string: "fcmToken"], methodCall[int64:
"expireTime"])
} }
func setAppBackgroundStatus(methodCall: FlutterMethodCall, result: @escaping FlutterResult) { func setAppBackgroundStatus(methodCall: FlutterMethodCall, result: @escaping FlutterResult) {

@ -16,16 +16,13 @@ class ConversationManager {
} }
/// Get All Conversations /// Get All Conversations
Future<List<ConversationInfo>> getAllConversationList( Future<List<ConversationInfo>> getAllConversationList({String? operationID}) => _channel
{String? operationID}) => .invokeMethod(
_channel 'getAllConversationList',
.invokeMethod( _buildParam({
'getAllConversationList', "operationID": Utils.checkOperationID(operationID),
_buildParam({ }))
"operationID": Utils.checkOperationID(operationID), .then((value) => Utils.toList(value, (map) => ConversationInfo.fromJson(map)));
}))
.then((value) =>
Utils.toList(value, (map) => ConversationInfo.fromJson(map)));
/// Paginate Through Conversations /// Paginate Through Conversations
/// [offset] Starting index /// [offset] Starting index
@ -43,8 +40,7 @@ class ConversationManager {
'count': count, 'count': count,
"operationID": Utils.checkOperationID(operationID), "operationID": Utils.checkOperationID(operationID),
})) }))
.then((value) => .then((value) => Utils.toList(value, (map) => ConversationInfo.fromJson(map)));
Utils.toList(value, (map) => ConversationInfo.fromJson(map)));
/// Query a Conversation; if it doesn't exist, it will be created /// Query a Conversation; if it doesn't exist, it will be created
/// [sourceID] UserID for one-on-one conversation, GroupID for group conversation /// [sourceID] UserID for one-on-one conversation, GroupID for group conversation
@ -62,8 +58,7 @@ class ConversationManager {
"sessionType": sessionType, "sessionType": sessionType,
"operationID": Utils.checkOperationID(operationID), "operationID": Utils.checkOperationID(operationID),
})) }))
.then((value) => .then((value) => Utils.toObj(value, (map) => ConversationInfo.fromJson(map)));
Utils.toObj(value, (map) => ConversationInfo.fromJson(map)));
/// Get Multiple Conversations by Conversation ID /// Get Multiple Conversations by Conversation ID
/// [conversationIDList] List of conversation IDs /// [conversationIDList] List of conversation IDs
@ -78,8 +73,7 @@ class ConversationManager {
"conversationIDList": conversationIDList, "conversationIDList": conversationIDList,
"operationID": Utils.checkOperationID(operationID), "operationID": Utils.checkOperationID(operationID),
})) }))
.then((value) => .then((value) => Utils.toList(value, (map) => ConversationInfo.fromJson(map)));
Utils.toList(value, (map) => ConversationInfo.fromJson(map)));
/// Set Conversation Draft /// Set Conversation Draft
/// [conversationID] Conversation ID /// [conversationID] Conversation ID
@ -126,26 +120,25 @@ class ConversationManager {
"operationID": Utils.checkOperationID(operationID), "operationID": Utils.checkOperationID(operationID),
})); }));
/// Get Total Unread Message Count /// Hide All Conversations
Future<dynamic> getTotalUnreadMsgCount({String? operationID}) => Future hideAllConversations({
String? operationID,
}) =>
_channel.invokeMethod( _channel.invokeMethod(
'getTotalUnreadMsgCount', 'hideAllConversations',
_buildParam({ _buildParam({
"operationID": Utils.checkOperationID(operationID), "operationID": Utils.checkOperationID(operationID),
})); }));
/// Query Conversation ID /// get total unread message count
/// [sourceID] UserID for one-on-one, GroupID for group /// int.tryParse(count) ?? 0;
/// [sessionType] Reference [ConversationType] Future<dynamic> getTotalUnreadMsgCount({
Future<dynamic> getConversationIDBySessionType({ String? operationID,
required String sourceID,
required int sessionType,
}) => }) =>
_channel.invokeMethod( _channel.invokeMethod(
'getConversationIDBySessionType', 'getTotalUnreadMsgCount',
_buildParam({ _buildParam({
"sourceID": sourceID, "operationID": Utils.checkOperationID(operationID),
"sessionType": sessionType,
})); }));
/// Message Do-Not-Disturb Setting /// Message Do-Not-Disturb Setting
@ -333,14 +326,9 @@ class ConversationManager {
/// Custom Sort for Conversation List /// Custom Sort for Conversation List
List<ConversationInfo> simpleSort(List<ConversationInfo> list) => list List<ConversationInfo> simpleSort(List<ConversationInfo> list) => list
..sort((a, b) { ..sort((a, b) {
if ((a.isPinned == true && b.isPinned == true) || if ((a.isPinned == true && b.isPinned == true) || (a.isPinned != true && b.isPinned != true)) {
(a.isPinned != true && b.isPinned != true)) { int aCompare = a.draftTextTime! > a.latestMsgSendTime! ? a.draftTextTime! : a.latestMsgSendTime!;
int aCompare = a.draftTextTime! > a.latestMsgSendTime! int bCompare = b.draftTextTime! > b.latestMsgSendTime! ? b.draftTextTime! : b.latestMsgSendTime!;
? a.draftTextTime!
: a.latestMsgSendTime!;
int bCompare = b.draftTextTime! > b.latestMsgSendTime!
? b.draftTextTime!
: b.latestMsgSendTime!;
if (aCompare > bCompare) { if (aCompare > bCompare) {
return -1; return -1;
} else if (aCompare < bCompare) { } else if (aCompare < bCompare) {

@ -64,8 +64,7 @@ class IMManager {
userManager.listener.selfInfoUpdated(userInfo); userManager.listener.selfInfoUpdated(userInfo);
break; break;
case 'onUserStatusChanged': case 'onUserStatusChanged':
final status = final status = Utils.toObj(data, (map) => UserStatusInfo.fromJson(map));
Utils.toObj(data, (map) => UserStatusInfo.fromJson(map));
userManager.listener.userStatusChanged(status); userManager.listener.userStatusChanged(status);
break; break;
} }
@ -74,23 +73,19 @@ class IMManager {
dynamic data = call.arguments['data']; dynamic data = call.arguments['data'];
switch (type) { switch (type) {
case 'onGroupApplicationAccepted': case 'onGroupApplicationAccepted':
final i = Utils.toObj( final i = Utils.toObj(data, (map) => GroupApplicationInfo.fromJson(map));
data, (map) => GroupApplicationInfo.fromJson(map));
groupManager.listener.groupApplicationAccepted(i); groupManager.listener.groupApplicationAccepted(i);
break; break;
case 'onGroupApplicationAdded': case 'onGroupApplicationAdded':
final i = Utils.toObj( final i = Utils.toObj(data, (map) => GroupApplicationInfo.fromJson(map));
data, (map) => GroupApplicationInfo.fromJson(map));
groupManager.listener.groupApplicationAdded(i); groupManager.listener.groupApplicationAdded(i);
break; break;
case 'onGroupApplicationDeleted': case 'onGroupApplicationDeleted':
final i = Utils.toObj( final i = Utils.toObj(data, (map) => GroupApplicationInfo.fromJson(map));
data, (map) => GroupApplicationInfo.fromJson(map));
groupManager.listener.groupApplicationDeleted(i); groupManager.listener.groupApplicationDeleted(i);
break; break;
case 'onGroupApplicationRejected': case 'onGroupApplicationRejected':
final i = Utils.toObj( final i = Utils.toObj(data, (map) => GroupApplicationInfo.fromJson(map));
data, (map) => GroupApplicationInfo.fromJson(map));
groupManager.listener.groupApplicationRejected(i); groupManager.listener.groupApplicationRejected(i);
break; break;
case 'onGroupDismissed': case 'onGroupDismissed':
@ -102,18 +97,15 @@ class IMManager {
groupManager.listener.groupInfoChanged(i); groupManager.listener.groupInfoChanged(i);
break; break;
case 'onGroupMemberAdded': case 'onGroupMemberAdded':
final i = final i = Utils.toObj(data, (map) => GroupMembersInfo.fromJson(map));
Utils.toObj(data, (map) => GroupMembersInfo.fromJson(map));
groupManager.listener.groupMemberAdded(i); groupManager.listener.groupMemberAdded(i);
break; break;
case 'onGroupMemberDeleted': case 'onGroupMemberDeleted':
final i = final i = Utils.toObj(data, (map) => GroupMembersInfo.fromJson(map));
Utils.toObj(data, (map) => GroupMembersInfo.fromJson(map));
groupManager.listener.groupMemberDeleted(i); groupManager.listener.groupMemberDeleted(i);
break; break;
case 'onGroupMemberInfoChanged': case 'onGroupMemberInfoChanged':
final i = final i = Utils.toObj(data, (map) => GroupMembersInfo.fromJson(map));
Utils.toObj(data, (map) => GroupMembersInfo.fromJson(map));
groupManager.listener.groupMemberInfoChanged(i); groupManager.listener.groupMemberInfoChanged(i);
break; break;
case 'onJoinedGroupAdded': case 'onJoinedGroupAdded':
@ -141,22 +133,19 @@ class IMManager {
break; break;
case 'onRecvC2CReadReceipt': case 'onRecvC2CReadReceipt':
var value = call.arguments['data']['msgReceiptList']; var value = call.arguments['data']['msgReceiptList'];
var list = var list = Utils.toList(value, (map) => ReadReceiptInfo.fromJson(map));
Utils.toList(value, (map) => ReadReceiptInfo.fromJson(map));
messageManager.msgListener.recvC2CReadReceipt(list); messageManager.msgListener.recvC2CReadReceipt(list);
break; break;
case 'onRecvGroupReadReceipt': case 'onRecvGroupReadReceipt':
var value = call.arguments['data']['groupMsgReceiptList']; var value = call.arguments['data']['groupMsgReceiptList'];
var list = var list = Utils.toList(value, (map) => ReadReceiptInfo.fromJson(map));
Utils.toList(value, (map) => ReadReceiptInfo.fromJson(map));
messageManager.msgListener.recvGroupReadReceipt(list); messageManager.msgListener.recvGroupReadReceipt(list);
break; break;
case 'onRecvMessageExtensionsDeleted': case 'onRecvMessageExtensionsDeleted':
var msgID = call.arguments['data']['msgID']; var msgID = call.arguments['data']['msgID'];
var value = call.arguments['data']['reactionExtensionKeyList']; var value = call.arguments['data']['reactionExtensionKeyList'];
var list = Utils.toList(value, (map) => '$map'); var list = Utils.toList(value, (map) => '$map');
messageManager.msgListener messageManager.msgListener.recvMessageExtensionsDeleted(msgID, list);
.recvMessageExtensionsDeleted(msgID, list);
break; break;
case 'onRecvNewMessage': case 'onRecvNewMessage':
@ -198,18 +187,15 @@ class IMManager {
conversationManager.listener.syncServerFailed(); conversationManager.listener.syncServerFailed();
break; break;
case 'onNewConversation': case 'onNewConversation':
var list = var list = Utils.toList(data, (map) => ConversationInfo.fromJson(map));
Utils.toList(data, (map) => ConversationInfo.fromJson(map));
conversationManager.listener.newConversation(list); conversationManager.listener.newConversation(list);
break; break;
case 'onConversationChanged': case 'onConversationChanged':
var list = var list = Utils.toList(data, (map) => ConversationInfo.fromJson(map));
Utils.toList(data, (map) => ConversationInfo.fromJson(map));
conversationManager.listener.conversationChanged(list); conversationManager.listener.conversationChanged(list);
break; break;
case 'onTotalUnreadMessageCountChanged': case 'onTotalUnreadMessageCountChanged':
conversationManager.listener conversationManager.listener.totalUnreadMessageCountChanged(data ?? 0);
.totalUnreadMessageCountChanged(data ?? 0);
break; break;
} }
} else if (call.method == ListenerType.friendListener) { } else if (call.method == ListenerType.friendListener) {
@ -230,23 +216,19 @@ class IMManager {
friendshipManager.listener.friendAdded(u); friendshipManager.listener.friendAdded(u);
break; break;
case 'onFriendApplicationAccepted': case 'onFriendApplicationAccepted':
final u = Utils.toObj( final u = Utils.toObj(data, (map) => FriendApplicationInfo.fromJson(map));
data, (map) => FriendApplicationInfo.fromJson(map));
friendshipManager.listener.friendApplicationAccepted(u); friendshipManager.listener.friendApplicationAccepted(u);
break; break;
case 'onFriendApplicationAdded': case 'onFriendApplicationAdded':
final u = Utils.toObj( final u = Utils.toObj(data, (map) => FriendApplicationInfo.fromJson(map));
data, (map) => FriendApplicationInfo.fromJson(map));
friendshipManager.listener.friendApplicationAdded(u); friendshipManager.listener.friendApplicationAdded(u);
break; break;
case 'onFriendApplicationDeleted': case 'onFriendApplicationDeleted':
final u = Utils.toObj( final u = Utils.toObj(data, (map) => FriendApplicationInfo.fromJson(map));
data, (map) => FriendApplicationInfo.fromJson(map));
friendshipManager.listener.friendApplicationDeleted(u); friendshipManager.listener.friendApplicationDeleted(u);
break; break;
case 'onFriendApplicationRejected': case 'onFriendApplicationRejected':
final u = Utils.toObj( final u = Utils.toObj(data, (map) => FriendApplicationInfo.fromJson(map));
data, (map) => FriendApplicationInfo.fromJson(map));
friendshipManager.listener.friendApplicationRejected(u); friendshipManager.listener.friendApplicationRejected(u);
break; break;
case 'onFriendDeleted': case 'onFriendDeleted':
@ -263,8 +245,7 @@ class IMManager {
String data = call.arguments['data']; String data = call.arguments['data'];
switch (type) { switch (type) {
case 'onRecvCustomBusinessMessage': case 'onRecvCustomBusinessMessage':
messageManager.customBusinessListener messageManager.customBusinessListener?.recvCustomBusinessMessage(data);
?.recvCustomBusinessMessage(data);
break; break;
} }
} else if (call.method == ListenerType.listenerForService) { } else if (call.method == ListenerType.listenerForService) {
@ -272,23 +253,19 @@ class IMManager {
String data = call.arguments['data']; String data = call.arguments['data'];
switch (type) { switch (type) {
case 'onFriendApplicationAccepted': case 'onFriendApplicationAccepted':
final u = Utils.toObj( final u = Utils.toObj(data, (map) => FriendApplicationInfo.fromJson(map));
data, (map) => FriendApplicationInfo.fromJson(map));
_listenerForService?.friendApplicationAccepted(u); _listenerForService?.friendApplicationAccepted(u);
break; break;
case 'onFriendApplicationAdded': case 'onFriendApplicationAdded':
final u = Utils.toObj( final u = Utils.toObj(data, (map) => FriendApplicationInfo.fromJson(map));
data, (map) => FriendApplicationInfo.fromJson(map));
_listenerForService?.friendApplicationAdded(u); _listenerForService?.friendApplicationAdded(u);
break; break;
case 'onGroupApplicationAccepted': case 'onGroupApplicationAccepted':
final i = Utils.toObj( final i = Utils.toObj(data, (map) => GroupApplicationInfo.fromJson(map));
data, (map) => GroupApplicationInfo.fromJson(map));
_listenerForService?.groupApplicationAccepted(i); _listenerForService?.groupApplicationAccepted(i);
break; break;
case 'onGroupApplicationAdded': case 'onGroupApplicationAdded':
final i = Utils.toObj( final i = Utils.toObj(data, (map) => GroupApplicationInfo.fromJson(map));
data, (map) => GroupApplicationInfo.fromJson(map));
_listenerForService?.groupApplicationAdded(i); _listenerForService?.groupApplicationAdded(i);
break; break;
case 'onRecvNewMessage': case 'onRecvNewMessage':
@ -336,8 +313,7 @@ class IMManager {
int fileSize = data['fileSize']; int fileSize = data['fileSize'];
int streamSize = data['streamSize']; int streamSize = data['streamSize'];
int storageSize = data['storageSize']; int storageSize = data['storageSize'];
_uploadFileListener?.uploadProgress( _uploadFileListener?.uploadProgress(id, fileSize, streamSize, storageSize);
id, fileSize, streamSize, storageSize);
break; break;
case 'uploadID': case 'uploadID':
String id = data['id']; String id = data['id'];
@ -349,14 +325,12 @@ class IMManager {
int index = data['index']; int index = data['index'];
int partSize = data['partSize']; int partSize = data['partSize'];
String partHash = data['partHash']; String partHash = data['partHash'];
_uploadFileListener?.uploadPartComplete( _uploadFileListener?.uploadPartComplete(id, index, partSize, partHash);
id, index, partSize, partHash);
break; break;
} }
} }
} catch (error, stackTrace) { } catch (error, stackTrace) {
Logger.print( Logger.print("回调失败了。${call.method} ${call.arguments['type']} ${call.arguments['data']} $error $stackTrace");
"回调失败了。${call.method} ${call.arguments['type']} ${call.arguments['data']} $error $stackTrace");
} }
return Future.value(null); return Future.value(null);
}); });
@ -526,15 +500,16 @@ class IMManager {
/// [fcmToken] Firebase token /// [fcmToken] Firebase token
Future updateFcmToken({ Future updateFcmToken({
required String fcmToken, required String fcmToken,
required int expireTime,
String? operationID, String? operationID,
}) => }) =>
_channel.invokeMethod( _channel.invokeMethod(
'updateFcmToken', 'updateFcmToken',
_buildParam({ _buildParam({
'fcmToken': fcmToken, 'fcmToken': fcmToken,
'operationID': Utils.checkOperationID(operationID), 'expireTime': expireTime,
}), 'operationID': Utils.checkOperationID(operationID),
); }));
void setUploadFileListener(OnUploadFileListener listener) { void setUploadFileListener(OnUploadFileListener listener) {
_uploadFileListener = listener; _uploadFileListener = listener;

@ -698,12 +698,14 @@ class MessageManager {
required PictureInfo sourcePicture, required PictureInfo sourcePicture,
required PictureInfo bigPicture, required PictureInfo bigPicture,
required PictureInfo snapshotPicture, required PictureInfo snapshotPicture,
String? sourcePath,
String? operationID, String? operationID,
}) => }) =>
_channel _channel
.invokeMethod( .invokeMethod(
'createImageMessageByURL', 'createImageMessageByURL',
_buildParam({ _buildParam({
'sourcePath': sourcePath,
'sourcePicture': sourcePicture.toJson(), 'sourcePicture': sourcePicture.toJson(),
'bigPicture': bigPicture.toJson(), 'bigPicture': bigPicture.toJson(),
'snapshotPicture': snapshotPicture.toJson(), 'snapshotPicture': snapshotPicture.toJson(),

Loading…
Cancel
Save