添加群成员功能
This commit is contained in:
@@ -84,6 +84,8 @@ fun AddGroupMemberScreen(groupId: String, groupName: String?) {
|
|||||||
LaunchedEffect(Unit) {
|
LaunchedEffect(Unit) {
|
||||||
systemUiController.setNavigationBarColor(Color.Transparent)
|
systemUiController.setNavigationBarColor(Color.Transparent)
|
||||||
AddGroupMemberViewModel.groupName = groupName
|
AddGroupMemberViewModel.groupName = groupName
|
||||||
|
AddGroupMemberViewModel.trtcId = groupId
|
||||||
|
AddGroupMemberViewModel.roomId = null
|
||||||
}
|
}
|
||||||
|
|
||||||
Box(
|
Box(
|
||||||
|
|||||||
@@ -9,6 +9,8 @@ import androidx.lifecycle.viewModelScope
|
|||||||
import com.aiosman.ravenow.AppStore
|
import com.aiosman.ravenow.AppStore
|
||||||
import com.aiosman.ravenow.data.AccountService
|
import com.aiosman.ravenow.data.AccountService
|
||||||
import com.aiosman.ravenow.data.AccountServiceImpl
|
import com.aiosman.ravenow.data.AccountServiceImpl
|
||||||
|
import com.aiosman.ravenow.data.RoomService
|
||||||
|
import com.aiosman.ravenow.data.RoomServiceImpl
|
||||||
import com.aiosman.ravenow.data.UserService
|
import com.aiosman.ravenow.data.UserService
|
||||||
import com.aiosman.ravenow.data.UserServiceImpl
|
import com.aiosman.ravenow.data.UserServiceImpl
|
||||||
import com.aiosman.ravenow.data.api.ApiClient
|
import com.aiosman.ravenow.data.api.ApiClient
|
||||||
@@ -17,11 +19,14 @@ import kotlinx.coroutines.launch
|
|||||||
object AddGroupMemberViewModel : ViewModel() {
|
object AddGroupMemberViewModel : ViewModel() {
|
||||||
val accountService: AccountService = AccountServiceImpl()
|
val accountService: AccountService = AccountServiceImpl()
|
||||||
val userService: UserService = UserServiceImpl()
|
val userService: UserService = UserServiceImpl()
|
||||||
|
val roomService: RoomService = RoomServiceImpl()
|
||||||
|
|
||||||
// 状态管理
|
// 状态管理
|
||||||
var isLoading by mutableStateOf(false)
|
var isLoading by mutableStateOf(false)
|
||||||
var errorMessage by mutableStateOf<String?>(null)
|
var errorMessage by mutableStateOf<String?>(null)
|
||||||
var groupName: String? = null
|
var groupName: String? = null
|
||||||
|
var trtcId: String? = null
|
||||||
|
var roomId: Int? = null
|
||||||
|
|
||||||
// 添加成员到群聊
|
// 添加成员到群聊
|
||||||
suspend fun addMembersToGroup(
|
suspend fun addMembersToGroup(
|
||||||
@@ -30,26 +35,84 @@ object AddGroupMemberViewModel : ViewModel() {
|
|||||||
return try {
|
return try {
|
||||||
isLoading = true
|
isLoading = true
|
||||||
|
|
||||||
if (groupName == null) {
|
// 验证房间标识
|
||||||
|
if (trtcId == null && roomId == null) {
|
||||||
isLoading = false
|
isLoading = false
|
||||||
val errorMsg = "群聊名称不能为空"
|
val errorMsg = "房间标识不能为空"
|
||||||
showToast(errorMsg)
|
showToast(errorMsg)
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
// 根据isAi属性分别获取userIds和promptIds
|
// 根据isAi属性分别获取用户和智能体的OpenID列表
|
||||||
val userIds = selectedMembers.filter { !it.isAi }.map { it.id }
|
val userOpenIds = selectedMembers.filter { !it.isAi }.map { it.id }
|
||||||
val promptIds = selectedMembers.filter { it.isAi }.map { it.id }
|
val agentOpenIds = selectedMembers.filter { it.isAi }.map { it.id }
|
||||||
|
|
||||||
|
var allSuccess = true
|
||||||
|
var errorMessages = mutableListOf<String>()
|
||||||
|
|
||||||
|
// 添加用户到房间
|
||||||
|
if (userOpenIds.isNotEmpty()) {
|
||||||
|
try {
|
||||||
|
val userResult = roomService.addUserToRoom(
|
||||||
|
roomId = roomId,
|
||||||
|
trtcId = trtcId,
|
||||||
|
openIds = userOpenIds
|
||||||
|
)
|
||||||
|
|
||||||
|
// 检查添加结果
|
||||||
|
if (userResult.failedCount > 0) {
|
||||||
|
val failedUsers = userResult.failedItems.joinToString(", ") { it.userId }
|
||||||
|
errorMessages.add("部分用户添加失败: $failedUsers")
|
||||||
|
}
|
||||||
|
|
||||||
|
if (userResult.successCount == 0 && userResult.failedCount > 0) {
|
||||||
|
allSuccess = false
|
||||||
|
}
|
||||||
|
} catch (e: Exception) {
|
||||||
|
allSuccess = false
|
||||||
|
errorMessages.add("添加用户失败: ${e.message}")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 添加智能体到房间
|
||||||
|
if (agentOpenIds.isNotEmpty()) {
|
||||||
|
try {
|
||||||
|
val agentResult = roomService.addAgentToRoom(
|
||||||
|
roomId = roomId,
|
||||||
|
trtcId = trtcId,
|
||||||
|
agentOpenIds = agentOpenIds
|
||||||
|
)
|
||||||
|
|
||||||
|
// 检查添加结果
|
||||||
|
if (agentResult.failedCount > 0) {
|
||||||
|
val failedAgents = agentResult.failedItems.joinToString(", ") { it.agentOpenId }
|
||||||
|
errorMessages.add("部分智能体添加失败: $failedAgents")
|
||||||
|
}
|
||||||
|
|
||||||
|
if (agentResult.successCount == 0 && agentResult.failedCount > 0) {
|
||||||
|
allSuccess = false
|
||||||
|
}
|
||||||
|
} catch (e: Exception) {
|
||||||
|
allSuccess = false
|
||||||
|
errorMessages.add("添加智能体失败: ${e.message}")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// 使用创建群聊的API,传入群聊名称来添加成员到现有群聊
|
|
||||||
// 与创建群聊使用相同的方法,通过群聊名称标识目标群聊
|
|
||||||
val response = accountService.createGroupChat(groupName!!, userIds, promptIds, roomId = null)
|
|
||||||
if (response.isSuccessful && response.body() != null) {
|
|
||||||
isLoading = false
|
isLoading = false
|
||||||
|
|
||||||
|
if (allSuccess) {
|
||||||
|
if (errorMessages.isNotEmpty()) {
|
||||||
|
// 有部分失败,但至少有一些成功
|
||||||
|
showToast(errorMessages.joinToString("\n"))
|
||||||
|
}
|
||||||
true
|
true
|
||||||
} else {
|
} else {
|
||||||
isLoading = false
|
// 全部失败
|
||||||
val errorMsg = "添加成员失败: ${response.message()}"
|
val errorMsg = if (errorMessages.isNotEmpty()) {
|
||||||
|
errorMessages.joinToString("\n")
|
||||||
|
} else {
|
||||||
|
"添加成员失败"
|
||||||
|
}
|
||||||
showToast(errorMsg)
|
showToast(errorMsg)
|
||||||
false
|
false
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -113,10 +113,5 @@ class GroupMembersViewModel(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun toggleRequireApproval() {
|
|
||||||
requireApproval = !requireApproval
|
|
||||||
// TODO: 实现更新设置的API调用
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -310,9 +310,28 @@
|
|||||||
<!-- Edit Profile Extras -->
|
<!-- Edit Profile Extras -->
|
||||||
<string name="mbti_type">MBTI</string>
|
<string name="mbti_type">MBTI</string>
|
||||||
<string name="zodiac">星座</string>
|
<string name="zodiac">星座</string>
|
||||||
|
<string name="change_cover">カバーを変更</string>
|
||||||
|
<string name="personal_intro">自己紹介</string>
|
||||||
|
<string name="error_nickname_empty">ニックネームは空にできません</string>
|
||||||
|
<string name="error_nickname_too_short">ニックネームの長さは3文字未満にできません</string>
|
||||||
|
<string name="error_nickname_too_long">ニックネームの長さは20文字を超えることはできません</string>
|
||||||
|
<string name="error_bio_too_long">自己紹介の長さは100文字を超えることはできません</string>
|
||||||
|
<string name="error_load_profile_failed">ユーザープロフィールの読み込みに失敗しました。もう一度お試しください</string>
|
||||||
<string name="save">保存</string>
|
<string name="save">保存</string>
|
||||||
<string name="choose_mbti">MBTIを選択</string>
|
<string name="choose_mbti">MBTIを選択</string>
|
||||||
<string name="choose_zodiac">星座を選択</string>
|
<string name="choose_zodiac">星座を選択</string>
|
||||||
|
<string name="zodiac_aries">牡羊座</string>
|
||||||
|
<string name="zodiac_taurus">牡牛座</string>
|
||||||
|
<string name="zodiac_gemini">双子座</string>
|
||||||
|
<string name="zodiac_cancer">蟹座</string>
|
||||||
|
<string name="zodiac_leo">獅子座</string>
|
||||||
|
<string name="zodiac_virgo">乙女座</string>
|
||||||
|
<string name="zodiac_libra">天秤座</string>
|
||||||
|
<string name="zodiac_scorpio">蠍座</string>
|
||||||
|
<string name="zodiac_sagittarius">射手座</string>
|
||||||
|
<string name="zodiac_capricorn">山羊座</string>
|
||||||
|
<string name="zodiac_aquarius">水瓶座</string>
|
||||||
|
<string name="zodiac_pisces">魚座</string>
|
||||||
|
|
||||||
<!-- Side Menu -->
|
<!-- Side Menu -->
|
||||||
<string name="scan_qr">QRコードをスキャン</string>
|
<string name="scan_qr">QRコードをスキャン</string>
|
||||||
|
|||||||
@@ -334,7 +334,7 @@
|
|||||||
<string name="group_members_admin">管理员</string>
|
<string name="group_members_admin">管理员</string>
|
||||||
<string name="group_members_list">群成员(%d)</string>
|
<string name="group_members_list">群成员(%d)</string>
|
||||||
<string name="group_members_send_message">发消息</string>
|
<string name="group_members_send_message">发消息</string>
|
||||||
<string name="group_members_delete_member">Delete Member</string>
|
<string name="group_members_delete_member">删除成员</string>
|
||||||
|
|
||||||
<!-- Side Menu -->
|
<!-- Side Menu -->
|
||||||
<string name="scan_qr">扫一扫</string>
|
<string name="scan_qr">扫一扫</string>
|
||||||
|
|||||||
Reference in New Issue
Block a user