|
@@ -9,16 +9,27 @@ class GroupChatDetailViewController: UIViewController {
|
|
case chatActions
|
|
case chatActions
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ enum ChatAction {
|
|
|
|
+ case ephemeralMessages
|
|
|
|
+ case muteChat
|
|
|
|
+ case archiveChat
|
|
|
|
+ case leaveGroup
|
|
|
|
+ case deleteChat
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ private lazy var chatActions: [ChatAction] = {
|
|
|
|
+ var actions: [ChatAction] = [.muteChat, .archiveChat, .leaveGroup, .deleteChat]
|
|
|
|
+ if UserDefaults.standard.bool(forKey: "ephemeral_messages") || dcContext.getChatEphemeralTimer(chatId: chatId) > 0 {
|
|
|
|
+ actions.insert(.ephemeralMessages, at: 0)
|
|
|
|
+ }
|
|
|
|
+ return actions
|
|
|
|
+ }()
|
|
|
|
+
|
|
private let attachmentsRowGallery = 0
|
|
private let attachmentsRowGallery = 0
|
|
private let attachmentsRowDocuments = 1
|
|
private let attachmentsRowDocuments = 1
|
|
private let membersRowAddMembers = 0
|
|
private let membersRowAddMembers = 0
|
|
private let membersRowQrInvite = 1
|
|
private let membersRowQrInvite = 1
|
|
private let memberManagementRows = 2
|
|
private let memberManagementRows = 2
|
|
- private let chatActionsRowEphemeralMessages = 0
|
|
|
|
- private let chatActionsRowMuteChat = 1
|
|
|
|
- private let chatActionsRowArchiveChat = 2
|
|
|
|
- private let chatActionsRowLeaveGroup = 3
|
|
|
|
- private let chatActionsRowDeleteChat = 4
|
|
|
|
|
|
|
|
private let dcContext: DcContext
|
|
private let dcContext: DcContext
|
|
|
|
|
|
@@ -127,6 +138,10 @@ class GroupChatDetailViewController: UIViewController {
|
|
return cell
|
|
return cell
|
|
}()
|
|
}()
|
|
|
|
|
|
|
|
+ private var supportsEphemeralMessages: Bool {
|
|
|
|
+ return UserDefaults.standard.bool(forKey: "ephemeral_messages") || dcContext.getChatEphemeralTimer(chatId: chatId) > 0
|
|
|
|
+ }
|
|
|
|
+
|
|
init(chatId: Int, dcContext: DcContext) {
|
|
init(chatId: Int, dcContext: DcContext) {
|
|
self.dcContext = dcContext
|
|
self.dcContext = dcContext
|
|
self.chatId = chatId
|
|
self.chatId = chatId
|
|
@@ -281,7 +296,7 @@ extension GroupChatDetailViewController: UITableViewDelegate, UITableViewDataSou
|
|
case .members:
|
|
case .members:
|
|
return groupMemberIds.count + memberManagementRows
|
|
return groupMemberIds.count + memberManagementRows
|
|
case .chatActions:
|
|
case .chatActions:
|
|
- return 4
|
|
|
|
|
|
+ return chatActions.count
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
@@ -340,15 +355,16 @@ extension GroupChatDetailViewController: UITableViewDelegate, UITableViewDataSou
|
|
contactCell.updateCell(cellViewModel: cellViewModel)
|
|
contactCell.updateCell(cellViewModel: cellViewModel)
|
|
return contactCell
|
|
return contactCell
|
|
case .chatActions:
|
|
case .chatActions:
|
|
- if row == chatActionsRowEphemeralMessages {
|
|
|
|
|
|
+ switch chatActions[row] {
|
|
|
|
+ case .ephemeralMessages:
|
|
return ephemeralMessagesCell
|
|
return ephemeralMessagesCell
|
|
- } else if row == chatActionsRowMuteChat {
|
|
|
|
|
|
+ case .muteChat:
|
|
return muteChatCell
|
|
return muteChatCell
|
|
- } else if row == chatActionsRowArchiveChat {
|
|
|
|
|
|
+ case .archiveChat:
|
|
return archiveChatCell
|
|
return archiveChatCell
|
|
- } else if row == chatActionsRowLeaveGroup {
|
|
|
|
|
|
+ case .leaveGroup:
|
|
return leaveGroupCell
|
|
return leaveGroupCell
|
|
- } else if row == chatActionsRowDeleteChat {
|
|
|
|
|
|
+ case .deleteChat:
|
|
return deleteChatCell
|
|
return deleteChatCell
|
|
}
|
|
}
|
|
}
|
|
}
|
|
@@ -377,20 +393,21 @@ extension GroupChatDetailViewController: UITableViewDelegate, UITableViewDataSou
|
|
showContactDetail(of: member.id)
|
|
showContactDetail(of: member.id)
|
|
}
|
|
}
|
|
case .chatActions:
|
|
case .chatActions:
|
|
- if row == chatActionsRowEphemeralMessages {
|
|
|
|
|
|
+ switch chatActions[row] {
|
|
|
|
+ case .ephemeralMessages:
|
|
showEphemeralMessagesController()
|
|
showEphemeralMessagesController()
|
|
- } else if row == chatActionsRowMuteChat {
|
|
|
|
|
|
+ case .muteChat:
|
|
if chat.isMuted {
|
|
if chat.isMuted {
|
|
dcContext.setChatMuteDuration(chatId: chatId, duration: 0)
|
|
dcContext.setChatMuteDuration(chatId: chatId, duration: 0)
|
|
muteChatCell.actionTitle = String.localized("menu_mute")
|
|
muteChatCell.actionTitle = String.localized("menu_mute")
|
|
} else {
|
|
} else {
|
|
showMuteAlert()
|
|
showMuteAlert()
|
|
}
|
|
}
|
|
- } else if row == chatActionsRowArchiveChat {
|
|
|
|
|
|
+ case .archiveChat:
|
|
toggleArchiveChat()
|
|
toggleArchiveChat()
|
|
- } else if row == chatActionsRowLeaveGroup {
|
|
|
|
- showLeaveGroupConfirmationAlert()
|
|
|
|
- } else if row == chatActionsRowDeleteChat {
|
|
|
|
|
|
+ case .leaveGroup:
|
|
|
|
+ showLeaveGroupConfirmationAlert()
|
|
|
|
+ case .deleteChat:
|
|
showDeleteChatConfirmationAlert()
|
|
showDeleteChatConfirmationAlert()
|
|
}
|
|
}
|
|
}
|
|
}
|