From 2e942541922e9689f95a34dce8c3c2b45f2460a1 Mon Sep 17 00:00:00 2001 From: Brett <> Date: Wed, 13 Dec 2023 16:28:25 +0800 Subject: [PATCH] feat: Add the log upload function of SDK. --- .../listener/OnUploadLogsListener.java | 26 +++++++++++++++++++ .../flutter_openim_sdk/manager/IMManager.java | 8 ++++++ ios/Classes/Module/IMManager.swift | 24 ++++++++++++++++- lib/src/enum/listener_type.dart | 1 + lib/src/listener/upload_file_listener.dart | 9 +++++++ lib/src/manager/im_manager.dart | 26 +++++++++++++++++++ 6 files changed, 93 insertions(+), 1 deletion(-) create mode 100644 android/src/main/java/io/openim/flutter_openim_sdk/listener/OnUploadLogsListener.java diff --git a/android/src/main/java/io/openim/flutter_openim_sdk/listener/OnUploadLogsListener.java b/android/src/main/java/io/openim/flutter_openim_sdk/listener/OnUploadLogsListener.java new file mode 100644 index 0000000..8c97d63 --- /dev/null +++ b/android/src/main/java/io/openim/flutter_openim_sdk/listener/OnUploadLogsListener.java @@ -0,0 +1,26 @@ +package io.openim.flutter_openim_sdk.listener; + +import android.util.ArrayMap; + +import java.util.Map; + +import io.flutter.plugin.common.MethodCall; +import io.flutter.plugin.common.MethodChannel; +import io.openim.flutter_openim_sdk.util.CommonUtil; +import open_im_sdk_callback.UploadLogProgress; + +public class OnUploadLogsListener implements UploadLogProgress { + final private MethodChannel.Result result; + + public OnUploadLogsListener(MethodChannel.Result result, MethodCall call) { + this.result = result; + } + + @Override + public void onProgress(long current, long size) { + final Map values = new ArrayMap<>(); + values.put("current", current); + values.put("size", size); + CommonUtil.emitEvent("uploadLogsListener", "onProgress", values); + } +} diff --git a/android/src/main/java/io/openim/flutter_openim_sdk/manager/IMManager.java b/android/src/main/java/io/openim/flutter_openim_sdk/manager/IMManager.java index b945ec8..9a1f742 100644 --- a/android/src/main/java/io/openim/flutter_openim_sdk/manager/IMManager.java +++ b/android/src/main/java/io/openim/flutter_openim_sdk/manager/IMManager.java @@ -6,6 +6,7 @@ import io.openim.flutter_openim_sdk.FlutterOpenimSdkPlugin; import io.openim.flutter_openim_sdk.listener.OnBaseListener; import io.openim.flutter_openim_sdk.listener.OnConnListener; import io.openim.flutter_openim_sdk.listener.OnUploadFileListener; +import io.openim.flutter_openim_sdk.listener.OnUploadLogsListener; import io.openim.flutter_openim_sdk.util.CommonUtil; import open_im_sdk.Open_im_sdk; @@ -62,6 +63,13 @@ public class IMManager extends BaseManager { ); } + public void uploadLogs(MethodCall methodCall, MethodChannel.Result result) { + Open_im_sdk.uploadLogs( + new OnBaseListener(result, methodCall), + value(methodCall, "operationID"), + new OnUploadLogsListener(result, methodCall) + ); + } public void setAppBackgroundStatus(MethodCall methodCall, MethodChannel.Result result) { Open_im_sdk.setAppBackgroundStatus( diff --git a/ios/Classes/Module/IMManager.swift b/ios/Classes/Module/IMManager.swift index 49b6d5e..ec4746a 100644 --- a/ios/Classes/Module/IMManager.swift +++ b/ios/Classes/Module/IMManager.swift @@ -13,6 +13,7 @@ public class IMMananger: BaseServiceManager { self["logout"] = logout self["getLoginStatus"] = getLoginStatus self["uploadFile"] = uploadFile + self["uploadLogs"] = uploadLogs self["updateFcmToken"] = updateFcmToken self["setAppBackgroundStatus"] = setAppBackgroundStatus self["networkStatusChanged"] = networkStatusChanged @@ -83,6 +84,10 @@ public class IMMananger: BaseServiceManager { func uploadFile(methodCall: FlutterMethodCall, result: @escaping FlutterResult) { Open_im_sdkUploadFile(BaseCallback(result: result), methodCall[string: "operationID"], methodCall.toJsonString(), UploadFileListener(channel: self.channel,id: methodCall[string: "id"])) } + + func uploadLogs(methodCall: FlutterMethodCall, result: @escaping FlutterResult) { + Open_im_sdkUploadLogs(BaseCallback(result: result), methodCall[string: "operationID"], UploadLogsListener(channel: self.channel)) + } func updateFcmToken(methodCall: FlutterMethodCall, result: @escaping FlutterResult) { Open_im_sdkUpdateFcmToken(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[string: "fcmToken"], methodCall[int64: @@ -126,11 +131,28 @@ public class ConnListener: NSObject, Open_im_sdk_callbackOnConnListenerProtocol } } + +public class UploadLogsListener: NSObject, Open_im_sdk_callbackUploadLogProgressProtocol { + + private let channel:FlutterMethodChannel + + init(channel:FlutterMethodChannel) { + self.channel = channel + } + + public func onProgress(_ current: Int64, size: Int64) { + var values: [String: Any] = [:] + values["current"] = current + values["size"] = size + CommonUtil.emitEvent(channel: channel, method: "uploadLogsListener", type: "onProgress", errCode: nil, errMsg: nil, data: values) + } + } + public class UploadFileListener: NSObject, Open_im_sdk_callbackUploadFileCallbackProtocol { private let channel:FlutterMethodChannel private let id: String - + init(channel:FlutterMethodChannel, id: String) { self.channel = channel self.id = id diff --git a/lib/src/enum/listener_type.dart b/lib/src/enum/listener_type.dart index d9c7ea7..294d7f1 100644 --- a/lib/src/enum/listener_type.dart +++ b/lib/src/enum/listener_type.dart @@ -15,4 +15,5 @@ class ListenerType { static const messageKvInfoListener = "messageKvInfoListener"; static const listenerForService = "listenerForService"; static const uploadFileListener = "uploadFileListener"; + static const uploadLogsListener = "uploadLogsListener"; } diff --git a/lib/src/listener/upload_file_listener.dart b/lib/src/listener/upload_file_listener.dart index ba1bf0d..8dea4f1 100644 --- a/lib/src/listener/upload_file_listener.dart +++ b/lib/src/listener/upload_file_listener.dart @@ -1,3 +1,12 @@ +class OnUploadLogsListener { + Function(int current, int size)? onUploadProgress; + OnUploadLogsListener({this.onUploadProgress}); + + void onProgress(int current, int size) { + onUploadProgress?.call(current, size); + } +} + class OnUploadFileListener { Function(String id, int size, String url, int type)? onComplete; Function(String id, String partHash, String fileHash)? onHashPartComplete; diff --git a/lib/src/manager/im_manager.dart b/lib/src/manager/im_manager.dart index 5d0a5dd..bec77d5 100644 --- a/lib/src/manager/im_manager.dart +++ b/lib/src/manager/im_manager.dart @@ -16,6 +16,8 @@ class IMManager { late OnConnectListener _connectListener; OnListenerForService? _listenerForService; OnUploadFileListener? _uploadFileListener; + OnUploadLogsListener? _uploadLogsListener; + late String userID; late UserInfo userInfo; bool isLogined = false; @@ -273,6 +275,15 @@ class IMManager { _listenerForService?.recvNewMessage(msg); break; } + } else if (call.method == ListenerType.uploadLogsListener) { + String type = call.arguments['type']; + dynamic data = call.arguments['data']; + switch (type) { + case 'onProgress': + int size = data['size']; + int current = data['current']; + _uploadLogsListener?.onProgress(current, size); + } } else if (call.method == ListenerType.uploadFileListener) { String type = call.arguments['type']; dynamic data = call.arguments['data']; @@ -511,6 +522,21 @@ class IMManager { 'operationID': Utils.checkOperationID(operationID), })); + /// 上传日志 + /// [uploadlogParams] system_type、ex + Future uploadLogs({ + String? operationID, + }) => + _channel.invokeMethod( + 'uploadLogs', + _buildParam({ + 'operationID': Utils.checkOperationID(operationID), + })); + + void setUploadLogsListener(OnUploadLogsListener listener) { + _uploadLogsListener = listener; + } + void setUploadFileListener(OnUploadFileListener listener) { _uploadFileListener = listener; }