Compare commits
11 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
9ba6c2a92f | ||
|
|
7b577ec8b8 | ||
|
|
bd76c29f15 | ||
|
|
9998f9b99c | ||
|
|
50bf41df51 | ||
|
|
7af14f995c | ||
|
|
3c28242303 | ||
|
|
b443caabc5 | ||
|
|
50dcfcf495 | ||
|
|
e13c4c6658 | ||
|
|
58fa80a2f8 |
@@ -57,5 +57,5 @@ android {
|
||||
}
|
||||
|
||||
dependencies {
|
||||
implementation 'com.openim:sdkcore:1.0.3'
|
||||
implementation 'com.openim:sdkcore:1.0.8'
|
||||
}
|
||||
@@ -29,6 +29,14 @@ public class OnAdvancedMsgListener implements open_im_sdk_callback.OnAdvancedMsg
|
||||
CommonUtil.emitEvent("advancedMsgListener", "onNewRecvMessageRevoked", values);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onNewRecvMessageEdited(String s) {
|
||||
final Map<String, String> values = new ArrayMap<>();
|
||||
values.put("id", id);
|
||||
values.put("messageEdited", s);
|
||||
CommonUtil.emitEvent("advancedMsgListener", "onNewRecvMessageEdited", values);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRecvC2CReadReceipt(String s) {
|
||||
final Map<String, String> values = new ArrayMap<>();
|
||||
|
||||
@@ -42,6 +42,16 @@ public class MessageManager extends BaseManager {
|
||||
);
|
||||
}
|
||||
|
||||
public void editMessage(MethodCall methodCall, MethodChannel.Result result) {
|
||||
Open_im_sdk.editMessage(
|
||||
new OnBaseListener(result, methodCall),
|
||||
value(methodCall, "operationID"),
|
||||
value(methodCall, "conversationID"),
|
||||
value(methodCall, "clientMsgID"),
|
||||
jsonValue(methodCall, "message")
|
||||
);
|
||||
}
|
||||
|
||||
public void deleteMessageFromLocalStorage(MethodCall methodCall, MethodChannel.Result result) {
|
||||
Open_im_sdk.deleteMessageFromLocalStorage(
|
||||
new OnBaseListener(result, methodCall),
|
||||
@@ -378,6 +388,16 @@ public class MessageManager extends BaseManager {
|
||||
jsonValue(methodCall, "fileElem")));
|
||||
}
|
||||
|
||||
public void fetchSurroundingMessages(MethodCall methodCall, MethodChannel.Result result) {
|
||||
Open_im_sdk.fetchSurroundingMessages(
|
||||
new OnBaseListener(result, methodCall),
|
||||
value(methodCall, "operationID"),
|
||||
jsonValue(methodCall, "message"),
|
||||
int2long(methodCall, "before"),
|
||||
int2long(methodCall, "after"));
|
||||
}
|
||||
|
||||
|
||||
public void setCustomBusinessListener(MethodCall methodCall, MethodChannel.Result result) {
|
||||
Open_im_sdk.setCustomBusinessListener(new OnCustomBusinessListener());
|
||||
|
||||
|
||||
@@ -9,6 +9,7 @@ public class MessageManager: BaseServiceManager {
|
||||
self["setAdvancedMsgListener"] = setAdvancedMsgListener
|
||||
self["sendMessage"] = sendMessage
|
||||
self["revokeMessage"] = revokeMessage
|
||||
self["editMessage"] = editMessage
|
||||
self["deleteMessageFromLocalStorage"] = deleteMessageFromLocalStorage
|
||||
self["deleteMessageFromLocalAndSvr"] = deleteMessageFromLocalAndSvr
|
||||
self["deleteAllMsgFromLocal"] = deleteAllMsgFromLocal
|
||||
@@ -47,6 +48,10 @@ public class MessageManager: BaseServiceManager {
|
||||
self["setMessageLocalEx"] = setMessageLocalEx
|
||||
self["setAppBadge"] = setAppBadge
|
||||
|
||||
self["fetchSurroundingMessages"] = fetchSurroundingMessages
|
||||
|
||||
|
||||
|
||||
self["sendMessageNotOss"] = sendMessageNotOss
|
||||
self["createImageMessageByURL"] = createImageMessageByURL
|
||||
self["createSoundMessageByURL"] = createSoundMessageByURL
|
||||
@@ -71,7 +76,11 @@ public class MessageManager: BaseServiceManager {
|
||||
func revokeMessage(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
|
||||
Open_im_sdkRevokeMessage(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[string: "conversationID"],methodCall[string: "clientMsgID"])
|
||||
}
|
||||
|
||||
|
||||
func editMessage(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
|
||||
Open_im_sdkEditMessage(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[string: "conversationID"],methodCall[string: "clientMsgID"],methodCall[jsonString: "message"])
|
||||
}
|
||||
|
||||
func deleteMessageFromLocalStorage(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
|
||||
Open_im_sdkDeleteMessageFromLocalStorage(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[string: "conversationID"],methodCall[string: "clientMsgID"])
|
||||
}
|
||||
@@ -250,6 +259,13 @@ public class MessageManager: BaseServiceManager {
|
||||
Open_im_sdkSetCustomBusinessListener(CustomBusinessListener(channel: channel))
|
||||
callBack(result)
|
||||
}
|
||||
|
||||
func fetchSurroundingMessages(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
|
||||
Open_im_sdkFetchSurroundingMessages(BaseCallback(result: result),methodCall[string: "operationID"], methodCall[jsonString: "message"], methodCall[int: "before"], methodCall[int: "after"])
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
public class SendMsgProgressListener: NSObject, Open_im_sdk_callbackSendMsgCallBackProtocol {
|
||||
@@ -303,7 +319,14 @@ public class AdvancedMsgListener: NSObject, Open_im_sdk_callbackOnAdvancedMsgLis
|
||||
values["messageRevoked"] = messageRevoked
|
||||
CommonUtil.emitEvent(channel: channel, method: "advancedMsgListener", type: "onNewRecvMessageRevoked", errCode: nil, errMsg: nil, data: values)
|
||||
}
|
||||
|
||||
|
||||
public func onNewRecvMessageEdited(_ messageEdited: String?) {
|
||||
var values: [String: Any] = [:]
|
||||
values["id"] = id
|
||||
values["messageEdited"] = messageEdited
|
||||
CommonUtil.emitEvent(channel: channel, method: "advancedMsgListener", type: "onNewRecvMessageEdited", errCode: nil, errMsg: nil, data: values)
|
||||
}
|
||||
|
||||
public func onRecvC2CReadReceipt(_ msgReceiptList: String?) {
|
||||
var values: [String: Any] = [:]
|
||||
values["id"] = id
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
#
|
||||
Pod::Spec.new do |s|
|
||||
s.name = 'flutter_openim_sdk'
|
||||
s.version = '0.0.4'
|
||||
s.version = '0.0.7'
|
||||
s.summary = 'A new Flutter project.'
|
||||
s.description = <<-DESC
|
||||
A new Flutter project.
|
||||
@@ -19,7 +19,7 @@ A new Flutter project.
|
||||
|
||||
#s.ios.vendored_frameworks = 'frameworks/*.xcframework'
|
||||
#s.vendored_frameworks = 'frameworks/*.xcframework'
|
||||
s.dependency 'openim_sdk_core_ios','0.3.0'
|
||||
s.dependency 'openim_sdk_core_ios','0.6.0'
|
||||
s.static_framework = true
|
||||
s.library = 'resolv'
|
||||
|
||||
|
||||
@@ -168,6 +168,9 @@ class MessageType {
|
||||
/// Recall Message
|
||||
static const revokeMessageNotification = 2101;
|
||||
|
||||
/// Edit Message
|
||||
static const editMessageNotification = 2108;
|
||||
|
||||
/// Single Chat Has Read Receipt
|
||||
static const signalHasReadReceiptNotification = 2150;
|
||||
|
||||
|
||||
@@ -4,6 +4,7 @@ import 'package:flutter_openim_sdk/flutter_openim_sdk.dart';
|
||||
class OnAdvancedMsgListener {
|
||||
Function(Message msg)? onMsgDeleted;
|
||||
Function(RevokedInfo info)? onNewRecvMessageRevoked;
|
||||
Function(EditedInfo info)? onNewRecvMessageEdited;
|
||||
Function(List<ReadReceiptInfo> list)? onRecvC2CReadReceipt;
|
||||
Function(Message msg)? onRecvNewMessage;
|
||||
Function(Message msg)? onRecvOfflineNewMessage;
|
||||
@@ -15,6 +16,7 @@ class OnAdvancedMsgListener {
|
||||
OnAdvancedMsgListener({
|
||||
this.onMsgDeleted,
|
||||
this.onNewRecvMessageRevoked,
|
||||
this.onNewRecvMessageEdited,
|
||||
this.onRecvC2CReadReceipt,
|
||||
this.onRecvNewMessage,
|
||||
this.onRecvOfflineNewMessage,
|
||||
@@ -30,6 +32,12 @@ class OnAdvancedMsgListener {
|
||||
onNewRecvMessageRevoked?.call(info);
|
||||
}
|
||||
|
||||
/// Message has been edited
|
||||
void newRecvMessageEdited(EditedInfo info) {
|
||||
onNewRecvMessageEdited?.call(info);
|
||||
}
|
||||
|
||||
|
||||
/// C2C Message Read Receipt
|
||||
void recvC2CReadReceipt(List<ReadReceiptInfo> list) {
|
||||
onRecvC2CReadReceipt?.call(list);
|
||||
|
||||
@@ -179,6 +179,11 @@ class IMManager {
|
||||
var info = Utils.toObj(value, (map) => RevokedInfo.fromJson(map));
|
||||
messageManager.msgListener.newRecvMessageRevoked(info);
|
||||
break;
|
||||
case 'onNewRecvMessageEdited':
|
||||
var value = call.arguments['data']['messageEdited'];
|
||||
var info = Utils.toObj(value, (map) => EditedInfo.fromJson(map));
|
||||
messageManager.msgListener.newRecvMessageEdited(info);
|
||||
break;
|
||||
case 'onRecvC2CReadReceipt':
|
||||
var value = call.arguments['data']['msgReceiptList'];
|
||||
var list = Utils.toList(value, (map) => ReadReceiptInfo.fromJson(map));
|
||||
|
||||
@@ -151,7 +151,8 @@ class MessageManager {
|
||||
|
||||
/// Typing status update
|
||||
/// [msgTip] Custom content
|
||||
@Deprecated('Use [OpenIM.iMManager.conversationManager.changeInputStates(conversationID:focus:)] instead')
|
||||
@Deprecated(
|
||||
'Use [OpenIM.iMManager.conversationManager.changeInputStates(conversationID:focus:)] instead')
|
||||
Future typingStatusUpdate({
|
||||
required String userID,
|
||||
String? msgTip,
|
||||
@@ -531,7 +532,8 @@ class MessageManager {
|
||||
},
|
||||
'operationID': Utils.checkOperationID(operationID),
|
||||
}))
|
||||
.then((value) => Utils.toObj(value, (map) => SearchResult.fromJson(map)));
|
||||
.then((value) =>
|
||||
Utils.toObj(value, (map) => SearchResult.fromJson(map)));
|
||||
|
||||
/// Revoke a message
|
||||
/// [message] The message to be revoked
|
||||
@@ -548,6 +550,23 @@ class MessageManager {
|
||||
"operationID": Utils.checkOperationID(operationID),
|
||||
}));
|
||||
|
||||
/// Edit a message
|
||||
/// [message] The message to be edited
|
||||
Future editMessage({
|
||||
required String conversationID,
|
||||
required String clientMsgID,
|
||||
String? operationID,
|
||||
required Message message,
|
||||
}) =>
|
||||
_channel.invokeMethod(
|
||||
'editMessage',
|
||||
_buildParam({
|
||||
'conversationID': conversationID,
|
||||
'clientMsgID': clientMsgID,
|
||||
"operationID": Utils.checkOperationID(operationID),
|
||||
'message': message.toJson(),
|
||||
}));
|
||||
|
||||
/// Mark messages as read
|
||||
/// [conversationID] Conversation ID
|
||||
/// [messageIDList] List of clientMsgIDs of messages to be marked as read
|
||||
@@ -587,7 +606,8 @@ class MessageManager {
|
||||
'lastMinSeq': lastMinSeq ?? 0,
|
||||
'operationID': Utils.checkOperationID(operationID),
|
||||
}))
|
||||
.then((value) => Utils.toObj(value, (map) => AdvancedMessage.fromJson(map)));
|
||||
.then((value) =>
|
||||
Utils.toObj(value, (map) => AdvancedMessage.fromJson(map)));
|
||||
|
||||
/// Get chat history (newly received chat history after startMsg). Used for locating a specific message in global search and then fetching messages received after that message.
|
||||
/// [conversationID] Conversation ID, can be used for querying notifications
|
||||
@@ -610,7 +630,8 @@ class MessageManager {
|
||||
'lastMinSeq': lastMinSeq ?? 0,
|
||||
'operationID': Utils.checkOperationID(operationID),
|
||||
}))
|
||||
.then((value) => Utils.toObj(value, (map) => AdvancedMessage.fromJson(map)));
|
||||
.then((value) =>
|
||||
Utils.toObj(value, (map) => AdvancedMessage.fromJson(map)));
|
||||
|
||||
/// Find message details
|
||||
/// [conversationID] Conversation ID
|
||||
@@ -626,7 +647,8 @@ class MessageManager {
|
||||
'searchParams': searchParams.map((e) => e.toJson()).toList(),
|
||||
'operationID': Utils.checkOperationID(operationID),
|
||||
}))
|
||||
.then((value) => Utils.toObj(value, (map) => SearchResult.fromJson(map)));
|
||||
.then((value) =>
|
||||
Utils.toObj(value, (map) => SearchResult.fromJson(map)));
|
||||
|
||||
/// Rich text message
|
||||
/// [text] Input content
|
||||
@@ -794,6 +816,28 @@ class MessageManager {
|
||||
}));
|
||||
}
|
||||
|
||||
/// Fetch Surrounding Messages
|
||||
/// [message] Message content
|
||||
/// [before] message index - before
|
||||
/// [after] message index - after
|
||||
/// [operationID] Operation ID
|
||||
Future<List<Message>> FetchSurroundingMessages({
|
||||
required Message message,
|
||||
int? before,
|
||||
int? after,
|
||||
String? operationID,
|
||||
}) =>
|
||||
_channel
|
||||
.invokeMethod(
|
||||
'fetchSurroundingMessages',
|
||||
_buildParam({
|
||||
'message': message.toJson(),
|
||||
'before': before ?? 0,
|
||||
'after': after ?? 0,
|
||||
'operationID': Utils.checkOperationID(operationID),
|
||||
}))
|
||||
.then((value) => Utils.toList(value, (map) => Message.fromJson(map)));
|
||||
|
||||
static Map _buildParam(Map<String, dynamic> param) {
|
||||
param["ManagerName"] = "messageManager";
|
||||
param = Utils.cleanMap(param);
|
||||
|
||||
@@ -1123,6 +1123,82 @@ class RevokedInfo {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
/// Message revocation details
|
||||
class EditedInfo {
|
||||
/// Editer's ID
|
||||
String? editerID;
|
||||
|
||||
|
||||
/// Message ID
|
||||
String? clientMsgID;
|
||||
|
||||
/// Revocation time
|
||||
int? editTime;
|
||||
|
||||
/// Message sending time
|
||||
int? sourceMessageSendTime;
|
||||
|
||||
/// Message sender
|
||||
String? sourceMessageSendID;
|
||||
|
||||
/// Message sender's nickname
|
||||
String? sourceMessageSenderNickname;
|
||||
|
||||
/// Conversation type [ConversationType]
|
||||
int? sessionType;
|
||||
|
||||
/// Message contentType
|
||||
int? contentType;
|
||||
|
||||
/// Message content
|
||||
String? content;
|
||||
|
||||
|
||||
|
||||
EditedInfo({
|
||||
this.editerID,
|
||||
this.clientMsgID,
|
||||
this.editTime,
|
||||
this.sourceMessageSendTime,
|
||||
this.sourceMessageSendID,
|
||||
this.sourceMessageSenderNickname,
|
||||
this.sessionType,
|
||||
this.contentType,
|
||||
this.content,
|
||||
});
|
||||
|
||||
EditedInfo.fromJson(Map<String, dynamic> json) {
|
||||
editerID = json['editerID'];
|
||||
clientMsgID = json['clientMsgID'];
|
||||
editTime = json['editTime'];
|
||||
sourceMessageSendTime = json['sourceMessageSendTime'];
|
||||
sourceMessageSendID = json['sourceMessageSendID'];
|
||||
sourceMessageSenderNickname = json['sourceMessageSenderNickname'];
|
||||
sessionType = json['sessionType'];
|
||||
contentType = json['contentType'];
|
||||
content = json['content'];
|
||||
|
||||
}
|
||||
|
||||
Map<String, dynamic> toJson() {
|
||||
final data = Map<String, dynamic>();
|
||||
data['editerID'] = this.editerID;
|
||||
data['clientMsgID'] = this.clientMsgID;
|
||||
data['editTime'] = this.editTime;
|
||||
data['sourceMessageSendTime'] = this.sourceMessageSendTime;
|
||||
data['sourceMessageSendID'] = this.sourceMessageSendID;
|
||||
data['sourceMessageSenderNickname'] = this.sourceMessageSenderNickname;
|
||||
data['sessionType'] = this.sessionType;
|
||||
data['contentType'] = this.contentType;
|
||||
data['content'] = this.content;
|
||||
return data;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
class AdvancedMessage {
|
||||
List<Message>? messageList;
|
||||
bool? isEnd;
|
||||
|
||||
Reference in New Issue
Block a user