ios: fix Servers section flickering on info view; android: button text (#866)

This commit is contained in:
JRoberts
2022-08-02 14:48:31 +04:00
committed by GitHub
parent 35eeac194e
commit 9e23150938
7 changed files with 34 additions and 24 deletions

View File

@@ -44,7 +44,7 @@ fun removeMemberDialog(member: GroupMember, chatModel: ChatModel, close: (() ->
AlertManager.shared.showAlertMsg(
title = generalGetString(R.string.button_remove_member),
text = generalGetString(R.string.member_will_be_removed_from_group_cannot_be_undone),
confirmText = generalGetString(R.string.delete_verb),
confirmText = generalGetString(R.string.remove_member_confirmation),
onConfirm = {
withApi {
chatModel.controller.apiRemoveMember(member.groupId, member.groupMemberId)

View File

@@ -584,6 +584,7 @@
<!-- GroupMemberInfoView.kt -->
<string name="button_remove_member">Удалить участника</string>
<string name="member_will_be_removed_from_group_cannot_be_undone">Участник будет удален из группы - это действие нельзя отменить!</string>
<string name="remove_member_confirmation">Удалить</string>
<string name="member_info_section_title_member">УЧАСТНИК</string>
<string name="info_row_group">Группа</string>
<string name="info_row_connection">Соединение</string>

View File

@@ -586,6 +586,7 @@
<!-- GroupMemberInfoView.kt -->
<string name="button_remove_member">Remove member</string>
<string name="member_will_be_removed_from_group_cannot_be_undone">Member will be removed from group - this cannot be undone!</string>
<string name="remove_member_confirmation">Remove</string>
<string name="member_info_section_title_member">MEMBER</string>
<string name="info_row_group">Group</string>
<string name="info_row_connection">Connection</string>

View File

@@ -46,8 +46,8 @@ struct ChatInfoView: View {
@EnvironmentObject var chatModel: ChatModel
@Environment(\.dismiss) var dismiss: DismissAction
@ObservedObject var chat: Chat
var connectionStats: ConnectionStats?
@State private var alert: ChatInfoViewAlert? = nil
@State private var connectionStats: ConnectionStats?
enum ChatInfoViewAlert: Identifiable {
case deleteContactAlert
@@ -94,14 +94,6 @@ struct ChatInfoView: View {
case .networkStatusAlert: return networkStatusAlert()
}
}
.task {
do {
let stats = try await apiContactInfo(contactId: chat.chatInfo.apiId)
await MainActor.run { connectionStats = stats }
} catch let error {
logger.error("apiContactInfo error: \(responseError(error))")
}
}
}
func contactInfoHeader() -> some View {

View File

@@ -22,6 +22,7 @@ struct ChatView: View {
@State private var deletingItem: ChatItem? = nil
@FocusState private var keyboardVisible: Bool
@State private var showDeleteMessage = false
@State private var connectionStats: ConnectionStats?
var body: some View {
let cInfo = chat.chatInfo
@@ -99,14 +100,26 @@ struct ChatView: View {
}
ToolbarItem(placement: .principal) {
Button {
showChatInfoSheet = true
if case .direct = cInfo {
Task {
do {
let stats = try await apiContactInfo(contactId: chat.chatInfo.apiId)
await MainActor.run { connectionStats = stats }
} catch let error {
logger.error("apiContactInfo error: \(responseError(error))")
}
await MainActor.run { showChatInfoSheet = true }
}
} else {
showChatInfoSheet = true
}
} label: {
ChatInfoToolbar(chat: chat)
}
.sheet(isPresented: $showChatInfoSheet) {
switch cInfo {
case .direct:
ChatInfoView(chat: chat)
ChatInfoView(chat: chat, connectionStats: connectionStats)
case let .group(groupInfo):
GroupChatInfoView(chat: chat, groupInfo: groupInfo)
default:

View File

@@ -20,6 +20,7 @@ struct GroupChatInfoView: View {
@State private var showAddMembersSheet: Bool = false
@State private var selectedMember: GroupMember? = nil
@State private var showGroupProfile: Bool = false
@State private var connectionStats: ConnectionStats?
enum GroupChatInfoViewAlert: Identifiable {
case deleteGroupAlert
@@ -41,14 +42,24 @@ struct GroupChatInfoView: View {
}
memberView(groupInfo.membership, user: true)
ForEach(members) { member in
Button { selectedMember = member } label: { memberView(member) }
Button {
Task {
do {
let stats = try await apiGroupMemberInfo(groupInfo.apiId, member.groupMemberId)
await MainActor.run { connectionStats = stats }
} catch let error {
logger.error("apiGroupMemberInfo error: \(responseError(error))")
}
await MainActor.run { selectedMember = member }
}
} label: { memberView(member) }
}
}
.sheet(isPresented: $showAddMembersSheet) {
AddGroupMembersView(chat: chat, groupInfo: groupInfo, membersToAdd: filterMembersToAdd(members))
}
.sheet(item: $selectedMember) { member in
GroupMemberInfoView(groupInfo: groupInfo, member: member)
.sheet(item: $selectedMember, onDismiss: { connectionStats = nil }) { member in
GroupMemberInfoView(groupInfo: groupInfo, member: member, connectionStats: connectionStats)
}
.sheet(isPresented: $showGroupProfile) {
GroupProfileView(groupId: groupInfo.apiId, groupProfile: groupInfo.groupProfile)

View File

@@ -14,8 +14,8 @@ struct GroupMemberInfoView: View {
@Environment(\.dismiss) var dismiss: DismissAction
var groupInfo: GroupInfo
var member: GroupMember
var connectionStats: ConnectionStats?
@State private var alert: GroupMemberInfoViewAlert?
@State private var connectionStats: ConnectionStats?
enum GroupMemberInfoViewAlert: Identifiable {
case removeMemberAlert
@@ -67,14 +67,6 @@ struct GroupMemberInfoView: View {
case .removeMemberAlert: return removeMemberAlert()
}
}
.task {
do {
let stats = try await apiGroupMemberInfo(groupInfo.apiId, member.groupMemberId)
await MainActor.run { connectionStats = stats }
} catch let error {
logger.error("apiGroupMemberInfo error: \(responseError(error))")
}
}
}
private func groupMemberInfoHeader() -> some View {