Compare commits

..

3 Commits

Author SHA1 Message Date
Brett
95889be7a2 feat: update SDK to 3.8.3+hotfix.12, add message upload progress, and adjust group application parameters 2026-03-06 18:42:17 +08:00
Brett
6c4ca2fb56 Add issue translator workflow
This workflow translates issue comments and bodies automatically when they are created or opened, using a specified GitHub Action.
2025-10-27 14:17:23 +08:00
Brett
0a175bb8b1 feat: https://github.com/openimsdk/openim-sdk-core/releases/tag/v3.8.3-patch.10 2025-10-24 11:01:38 +08:00
15 changed files with 121 additions and 44 deletions

19
.github/workflows/issue-translator.yml vendored Normal file
View File

@@ -0,0 +1,19 @@
name: 'issue-translator'
on:
issue_comment:
types: [created]
issues:
types: [opened]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: usthe/issues-translate-action@v2.7
with:
BOT_GITHUB_TOKEN: ${{ secrets.BOT_TOKEN }}
IS_MODIFY_TITLE: true
# not require, default false, . Decide whether to modify the issue title
# if true, the robot account @Issues-translate-bot must have modification permissions, invite @Issues-translate-bot to your project or use your custom bot.
CUSTOM_BOT_NOTE: Bot detected the issue body's language is not English, translate it automatically. 👯👭🏻🧑‍🤝‍🧑👫🧑🏿‍🤝‍🧑🏻👩🏾‍🤝‍👨🏿👬🏿
# not require. Customize the translation robot prefix message.

View File

@@ -1,3 +1,11 @@
## 3.8.3+hotfix.12
- [Bug fixes and performance enhancements.](https://github.com/openimsdk/openim-sdk-core/releases/tag/v3.8.3-patch.12)
## 3.8.3+hotfix.10.1
- [Bug fixes and performance enhancements.](https://github.com/openimsdk/openim-sdk-core/releases/tag/v3.8.3-patch.10)
## 3.8.3+hotfix.10
- [Bug fixes and performance enhancements.](https://github.com/openimsdk/openim-sdk-core/releases/tag/v3.8.3-patch.10)

View File

@@ -36,7 +36,7 @@ android {
}
dependencies {
implementation 'io.openim:core-sdk:3.8.3-patch10@aar'
implementation 'io.openim:core-sdk:3.8.3-patch12@aar'
testImplementation("junit:junit:4.13.2")
testImplementation("org.mockito:mockito-core:5.0.0")
}

View File

@@ -1 +1,2 @@
rootProject.name = 'flutter_openim_sdk'

View File

@@ -13,19 +13,4 @@ public class OnUserListener implements open_im_sdk_callback.OnUserListener {
public void onUserStatusChanged(String s) {
CommonUtil.emitEvent("userListener", "onUserStatusChanged", s);
}
@Override
public void onUserCommandAdd(String s) {
CommonUtil.emitEvent("userListener", "onUserCommandAdd", s);
}
@Override
public void onUserCommandDelete(String s) {
CommonUtil.emitEvent("userListener", "onUserCommandDelete", s);
}
@Override
public void onUserCommandUpdate(String s) {
CommonUtil.emitEvent("userListener", "onUserCommandUpdate", s);
}
}

View File

@@ -650,7 +650,7 @@ code + .copy-button {
<script type="text/javascript">
function configurationCacheProblems() { return (
// begin-report-data
{"diagnostics":[{"problem":[{"text":"Disabling Gradle user home cache cleanup with the 'org.gradle.cache.cleanup' property has been deprecated."}],"severity":"WARNING","problemDetails":[{"text":"This is scheduled to be removed in Gradle 9.0."}],"contextualLabel":"Disabling Gradle user home cache cleanup with the 'org.gradle.cache.cleanup' property has been deprecated.","documentationLink":"https://docs.gradle.org/8.12/userguide/upgrading_version_8.html#disabling_user_home_cache_cleanup","problemId":[{"name":"deprecation","displayName":"Deprecation"},{"name":"disabling-gradle-user-home-cache-cleanup-with-the-org-gradle-cache-cleanup-property","displayName":"Disabling Gradle user home cache cleanup with the 'org.gradle.cache.cleanup' property has been deprecated."}]},{"problem":[{"text":"Disabling Gradle user home cache cleanup with the 'org.gradle.cache.cleanup' property has been deprecated."}],"severity":"WARNING","problemDetails":[{"text":"This is scheduled to be removed in Gradle 9.0."}],"contextualLabel":"Disabling Gradle user home cache cleanup with the 'org.gradle.cache.cleanup' property has been deprecated.","documentationLink":"https://docs.gradle.org/8.12/userguide/upgrading_version_8.html#disabling_user_home_cache_cleanup","problemId":[{"name":"deprecation","displayName":"Deprecation"},{"name":"disabling-gradle-user-home-cache-cleanup-with-the-org-gradle-cache-cleanup-property","displayName":"Disabling Gradle user home cache cleanup with the 'org.gradle.cache.cleanup' property has been deprecated."}]}],"problemsReport":{"totalProblemCount":2,"buildName":"android","requestedTasks":"assembleDebug","documentationLink":"https://docs.gradle.org/8.12/userguide/problems-report.html","documentationLinkCaption":"Problem report","summaries":[]}}
{"diagnostics":[{"locations":[{"pluginId":"dev.flutter.flutter-gradle-plugin"}],"problem":[{"text":"Space-assignment syntax in Groovy DSL has been deprecated."}],"severity":"WARNING","problemDetails":[{"text":"This is scheduled to be removed in Gradle 10.0."}],"contextualLabel":"Space-assignment syntax in Groovy DSL has been deprecated.","documentationLink":"https://docs.gradle.org/8.12/userguide/upgrading_version_8.html#groovy_space_assignment_syntax","problemId":[{"name":"deprecation","displayName":"Deprecation"},{"name":"space-assignment-syntax-in-groovy-dsl","displayName":"Space-assignment syntax in Groovy DSL has been deprecated."}],"solutions":[[{"text":"Use assignment ('url = <value>') instead."}]]},{"locations":[{"pluginId":"dev.flutter.flutter-gradle-plugin"}],"problem":[{"text":"Space-assignment syntax in Groovy DSL has been deprecated."}],"severity":"WARNING","problemDetails":[{"text":"This is scheduled to be removed in Gradle 10.0."}],"contextualLabel":"Space-assignment syntax in Groovy DSL has been deprecated.","documentationLink":"https://docs.gradle.org/8.12/userguide/upgrading_version_8.html#groovy_space_assignment_syntax","problemId":[{"name":"deprecation","displayName":"Deprecation"},{"name":"space-assignment-syntax-in-groovy-dsl","displayName":"Space-assignment syntax in Groovy DSL has been deprecated."}],"solutions":[[{"text":"Use assignment ('url = <value>') instead."}]]},{"locations":[{"pluginId":"dev.flutter.flutter-gradle-plugin"}],"problem":[{"text":"Space-assignment syntax in Groovy DSL has been deprecated."}],"severity":"WARNING","problemDetails":[{"text":"This is scheduled to be removed in Gradle 10.0."}],"contextualLabel":"Space-assignment syntax in Groovy DSL has been deprecated.","documentationLink":"https://docs.gradle.org/8.12/userguide/upgrading_version_8.html#groovy_space_assignment_syntax","problemId":[{"name":"deprecation","displayName":"Deprecation"},{"name":"space-assignment-syntax-in-groovy-dsl","displayName":"Space-assignment syntax in Groovy DSL has been deprecated."}],"solutions":[[{"text":"Use assignment ('shrinkResources = <value>') instead."}]]}],"problemsReport":{"totalProblemCount":3,"buildName":"android","requestedTasks":"","documentationLink":"https://docs.gradle.org/8.12/userguide/problems-report.html","documentationLinkCaption":"Problem report","summaries":[]}}
// end-report-data
);}
</script>

View File

@@ -2,8 +2,8 @@ PODS:
- Flutter (1.0.0)
- flutter_openim_sdk (0.0.1):
- Flutter
- OpenIMSDKCore (= 3.8.3-hotfix.10)
- OpenIMSDKCore (3.8.3-hotfix.10)
- OpenIMSDKCore (= 3.8.3-hotfix.12)
- OpenIMSDKCore (3.8.3-hotfix.12)
DEPENDENCIES:
- Flutter (from `Flutter`)
@@ -21,9 +21,9 @@ EXTERNAL SOURCES:
SPEC CHECKSUMS:
Flutter: e0871f40cf51350855a761d2e70bf5af5b9b5de7
flutter_openim_sdk: 59aa0c08eb7499a1790168e10539e4dd915ced6e
OpenIMSDKCore: bc9a6e5de2aabed76e4f69fe06a7c9df1d945afc
flutter_openim_sdk: bb2a5af4aeda4b44362ca6c223c1515e2fee795d
OpenIMSDKCore: 02383b2a3f989a1fff29ad5f83c1dac1ee5bfb36
PODFILE CHECKSUM: 819463e6a0290f5a72f145ba7cde16e8b6ef0796
PODFILE CHECKSUM: 7be2f5f74864d463a8ad433546ed1de7e0f29aef
COCOAPODS: 1.16.2

View File

@@ -76,7 +76,7 @@ packages:
path: ".."
relative: true
source: path
version: "3.8.3+hotfix.10"
version: "3.8.3+hotfix.10.1"
flutter_test:
dependency: "direct dev"
description: flutter

View File

@@ -17,13 +17,13 @@ A new Flutter project.
s.dependency 'Flutter'
s.platform = :ios, '11.0'
s.dependency 'OpenIMSDKCore','3.8.3-hotfix.10'
s.dependency 'OpenIMSDKCore','3.8.3-hotfix.12'
s.static_framework = true
s.library = 'resolv'
# s.vendored_frameworks = 'Framework/*.xcframework'
# Flutter.framework does not contain a i386 slice.
s.pod_target_xcconfig = { 'DEFINES_MODULE' => 'YES', 'EXCLUDED_ARCHS[sdk=iphonesimulator*]' => 'i386 arm64' }
s.pod_target_xcconfig = { 'DEFINES_MODULE' => 'YES', 'EXCLUDED_ARCHS[sdk=iphonesimulator*]' => 'i386' }
s.swift_version = '5.0'
s.resource_bundles = {'flutter_openim_sdk_privacy' => ['Resources/PrivacyInfo.xcprivacy']}

View File

@@ -299,6 +299,17 @@ class FriendshipManager {
.then((value) => value);
}
Future<int> getFriendApplicationUnhandledCount(GetFriendApplicationUnhandledCountReq req,
{String? operationID}) =>
_channel
.invokeMethod(
'getFriendApplicationUnhandledCount',
_buildParam({
'req': req.toJson(),
'operationID': Utils.checkOperationID(operationID),
}))
.then((value) => int.parse(value));
static Map _buildParam(Map<String, dynamic> param) {
param["ManagerName"] = "friendshipManager";
param = Utils.cleanMap(param);

View File

@@ -127,15 +127,17 @@ class GroupManager {
}))
.then((value) => Utils.toList(value, (map) => GroupInfo.fromJson(map)));
Future<List<GroupInfo>> getJoinedGroupListPage({String? operationID, int offset = 0, int count = 40}) => _channel
.invokeMethod(
'getJoinedGroupListPage',
_buildParam({
'offset': offset,
'count': count,
'operationID': Utils.checkOperationID(operationID),
}))
.then((value) => Utils.toList(value, (map) => GroupInfo.fromJson(map)));
Future<List<GroupInfo>> getJoinedGroupListPage(
{String? operationID, int offset = 0, int count = 40}) =>
_channel
.invokeMethod(
'getJoinedGroupListPage',
_buildParam({
'offset': offset,
'count': count,
'operationID': Utils.checkOperationID(operationID),
}))
.then((value) => Utils.toList(value, (map) => GroupInfo.fromJson(map)));
/// Query the list of joined groups
Future<List<dynamic>> getJoinedGroupListMap({String? operationID}) => _channel
@@ -214,7 +216,11 @@ class GroupManager {
/// Apply to join a group, requiring approval from an administrator or the group.
/// [joinSource] 2: Invited, 3: Searched, 4: Using a QR code
Future<dynamic> joinGroup(
{required String groupID, String? reason, String? operationID, int joinSource = 3, String? ex}) =>
{required String groupID,
String? reason,
String? operationID,
int joinSource = 3,
String? ex}) =>
_channel.invokeMethod(
'joinGroup',
_buildParam({
@@ -599,6 +605,17 @@ class GroupManager {
'operationID': Utils.checkOperationID(operationID),
}));
Future<int> getGroupApplicationUnhandledCount(GetGroupApplicationUnhandledCountReq req,
{String? operationID}) =>
_channel
.invokeMethod(
'getGroupApplicationUnhandledCount',
_buildParam({
'req': req.toJson(),
'operationID': Utils.checkOperationID(operationID),
}))
.then((value) => int.parse(value));
static Map _buildParam(Map<String, dynamic> param) {
param["ManagerName"] = "groupManager";
param = Utils.cleanMap(param);

View File

@@ -429,7 +429,7 @@ class GetGroupApplicationListAsRecipientReq {
final int offset;
final int count;
GetGroupApplicationListAsRecipientReq({
GetGroupApplicationListAsRecipientReq({
this.groupIDs = const [],
this.handleResults = const [],
required this.offset,
@@ -466,8 +466,8 @@ class GetGroupApplicationListAsApplicantReq {
GetGroupApplicationListAsApplicantReq({
this.groupIDs = const [],
this.handleResults = const [],
required this.offset,
required this.count,
this.offset = 0,
this.count = 40,
});
GetGroupApplicationListAsApplicantReq.fromJson(Map<String, dynamic> json)

View File

@@ -257,7 +257,8 @@ class Message {
@override
bool operator ==(Object other) =>
identical(this, other) || other is Message && runtimeType == other.runtimeType && clientMsgID == other.clientMsgID;
identical(this, other) ||
other is Message && runtimeType == other.runtimeType && clientMsgID == other.clientMsgID;
@override
int get hashCode => clientMsgID.hashCode;
@@ -787,12 +788,15 @@ class AttachedInfoElem {
/// Do not send offline push notifications
bool? notSenderNotificationPush;
UploadProgress? uploadProgress;
AttachedInfoElem({
this.groupHasReadInfo,
this.isPrivateChat,
this.hasReadTime,
this.burnDuration,
this.notSenderNotificationPush,
this.uploadProgress,
});
AttachedInfoElem.fromJson(Map<String, dynamic> json) {
@@ -801,6 +805,7 @@ class AttachedInfoElem {
hasReadTime = json['hasReadTime'];
burnDuration = json['burnDuration'];
notSenderNotificationPush = json['notSenderNotificationPush'];
uploadProgress = json['uploadProgress'] == null ? null : UploadProgress.fromJson(json['uploadProgress']);
}
Map<String, dynamic> toJson() {
@@ -810,6 +815,33 @@ class AttachedInfoElem {
data['hasReadTime'] = this.hasReadTime;
data['burnDuration'] = this.burnDuration;
data['notSenderNotificationPush'] = this.notSenderNotificationPush;
data['uploadProgress'] = uploadProgress?.toJson();
return data;
}
}
class UploadProgress {
int? total;
int? save;
int? current;
String? uploadID;
UploadProgress({this.total, this.save, this.current, this.uploadID});
UploadProgress.fromJson(Map<String, dynamic> json) {
total = json['total'] ?? 0;
save = json['save'] ?? 0;
current = json['current'] ?? 0;
uploadID = json['uploadID'] ?? '';
}
Map<String, dynamic> toJson() {
final data = <String, dynamic>{};
data['total'] = total;
data['save'] = save;
data['current'] = current;
data['uploadID'] = uploadID;
return data;
}
}
@@ -879,7 +911,9 @@ class AdvancedTextElem {
AdvancedTextElem.fromJson(Map<String, dynamic> json) {
text = json['text'];
messageEntityList = json['messageEntityList'] == null ? null : (json['messageEntityList'] as List).map((e) => MessageEntity.fromJson(e)).toList();
messageEntityList = json['messageEntityList'] == null
? null
: (json['messageEntityList'] as List).map((e) => MessageEntity.fromJson(e)).toList();
}
Map<String, dynamic> toJson() {
@@ -961,7 +995,8 @@ class ReadReceiptInfo {
/// Conversation type [ConversationType]
int? sessionType;
ReadReceiptInfo({this.userID, this.groupID, this.msgIDList, this.readTime, this.msgFrom, this.contentType, this.sessionType});
ReadReceiptInfo(
{this.userID, this.groupID, this.msgIDList, this.readTime, this.msgFrom, this.contentType, this.sessionType});
ReadReceiptInfo.fromJson(Map<String, dynamic> json) {
userID = json['uid'] ?? json['userID'];
@@ -1132,7 +1167,8 @@ class AdvancedMessage {
});
AdvancedMessage.fromJson(Map<String, dynamic> json) {
messageList = json['messageList'] == null ? null : (json['messageList'] as List).map((e) => Message.fromJson(e)).toList();
messageList =
json['messageList'] == null ? null : (json['messageList'] as List).map((e) => Message.fromJson(e)).toList();
isEnd = json['isEnd'];
errCode = json['errCode'];
errMsg = json['errMsg'];

View File

@@ -2,7 +2,7 @@ import 'package:flutter/services.dart';
import 'package:flutter_openim_sdk/flutter_openim_sdk.dart';
class OpenIM {
static const version = '3.8.3+hotfix.10';
static const version = '3.8.3+hotfix.12';
static const _channel = MethodChannel('flutter_openim_sdk');

View File

@@ -1,6 +1,6 @@
name: flutter_openim_sdk
description: An instant messaging plug-in that supports Android and IOS. And the server is also all open source.
version: 3.8.3+hotfix.10
version: 3.8.3+hotfix.12
homepage: https://www.openim.io
repository: https://github.com/openimsdk/open-im-sdk-flutter