feat: allow group admin to set disappearing message config

pull/941/head
Ryan Zhao 2 years ago
parent 3041f61e31
commit 2ad8041b59

@ -42,6 +42,7 @@ class ThreadDisappearingMessagesViewModel: SessionTableViewModel<ThreadDisappear
private let dependencies: Dependencies private let dependencies: Dependencies
private let threadId: String private let threadId: String
private let threadVariant: SessionThread.Variant private let threadVariant: SessionThread.Variant
private let currentUserIsClosedGroupAdmin: Bool?
private let config: DisappearingMessagesConfiguration private let config: DisappearingMessagesConfiguration
private var currentSelection: CurrentValueSubject<DisappearingMessagesConfiguration, Error> private var currentSelection: CurrentValueSubject<DisappearingMessagesConfiguration, Error>
private var shouldShowConfirmButton: CurrentValueSubject<Bool, Never> private var shouldShowConfirmButton: CurrentValueSubject<Bool, Never>
@ -52,11 +53,13 @@ class ThreadDisappearingMessagesViewModel: SessionTableViewModel<ThreadDisappear
dependencies: Dependencies = Dependencies(), dependencies: Dependencies = Dependencies(),
threadId: String, threadId: String,
threadVariant: SessionThread.Variant, threadVariant: SessionThread.Variant,
currentUserIsClosedGroupAdmin: Bool?,
config: DisappearingMessagesConfiguration config: DisappearingMessagesConfiguration
) { ) {
self.dependencies = dependencies self.dependencies = dependencies
self.threadId = threadId self.threadId = threadId
self.threadVariant = threadVariant self.threadVariant = threadVariant
self.currentUserIsClosedGroupAdmin = currentUserIsClosedGroupAdmin
self.config = config self.config = config
self.currentSelection = CurrentValueSubject(self.config) self.currentSelection = CurrentValueSubject(self.config)
self.shouldShowConfirmButton = CurrentValueSubject(false) self.shouldShowConfirmButton = CurrentValueSubject(false)
@ -206,7 +209,7 @@ class ThreadDisappearingMessagesViewModel: SessionTableViewModel<ThreadDisappear
rightAccessory: .radio( rightAccessory: .radio(
isSelected: { (self?.currentSelection.value.isEnabled == false) } isSelected: { (self?.currentSelection.value.isEnabled == false) }
), ),
isEnabled: false, isEnabled: (self?.currentUserIsClosedGroupAdmin == true),
onTap: { onTap: {
let updatedConfig: DisappearingMessagesConfiguration = currentSelection let updatedConfig: DisappearingMessagesConfiguration = currentSelection
.with( .with(
@ -231,7 +234,7 @@ class ThreadDisappearingMessagesViewModel: SessionTableViewModel<ThreadDisappear
rightAccessory: .radio( rightAccessory: .radio(
isSelected: { (self?.currentSelection.value.isEnabled == true) && (self?.currentSelection.value.durationSeconds == duration) } isSelected: { (self?.currentSelection.value.isEnabled == true) && (self?.currentSelection.value.durationSeconds == duration) }
), ),
isEnabled: false, isEnabled: (self?.currentUserIsClosedGroupAdmin == true),
onTap: { onTap: {
let updatedConfig: DisappearingMessagesConfiguration = currentSelection let updatedConfig: DisappearingMessagesConfiguration = currentSelection
.with( .with(

@ -346,6 +346,7 @@ class ThreadSettingsViewModel: SessionTableViewModel<ThreadSettingsViewModel.Nav
viewModel: ThreadDisappearingMessagesViewModel( viewModel: ThreadDisappearingMessagesViewModel(
threadId: threadId, threadId: threadId,
threadVariant: threadViewModel.threadVariant, threadVariant: threadViewModel.threadVariant,
currentUserIsClosedGroupAdmin: threadViewModel.currentUserIsClosedGroupAdmin,
config: disappearingMessagesConfig config: disappearingMessagesConfig
) )
) )

@ -866,7 +866,7 @@ public extension SessionThreadViewModel {
\(ViewModel.closedGroupProfileBackFallbackKey).*, \(ViewModel.closedGroupProfileBackFallbackKey).*,
\(closedGroup[.name]) AS \(ViewModel.closedGroupNameKey), \(closedGroup[.name]) AS \(ViewModel.closedGroupNameKey),
(\(groupMember[.profileId]) IS NOT NULL) AS \(ViewModel.currentUserIsClosedGroupMemberKey), (\(groupMember[.profileId]) IS NOT NULL) AS \(ViewModel.currentUserIsClosedGroupAdminKey),
\(openGroup[.name]) AS \(ViewModel.openGroupNameKey), \(openGroup[.name]) AS \(ViewModel.openGroupNameKey),
\(openGroup[.server]) AS \(ViewModel.openGroupServerKey), \(openGroup[.server]) AS \(ViewModel.openGroupServerKey),
\(openGroup[.roomToken]) AS \(ViewModel.openGroupRoomTokenKey), \(openGroup[.roomToken]) AS \(ViewModel.openGroupRoomTokenKey),
@ -881,7 +881,7 @@ public extension SessionThreadViewModel {
LEFT JOIN \(OpenGroup.self) ON \(openGroup[.threadId]) = \(thread[.id]) LEFT JOIN \(OpenGroup.self) ON \(openGroup[.threadId]) = \(thread[.id])
LEFT JOIN \(ClosedGroup.self) ON \(closedGroup[.threadId]) = \(thread[.id]) LEFT JOIN \(ClosedGroup.self) ON \(closedGroup[.threadId]) = \(thread[.id])
LEFT JOIN \(GroupMember.self) ON ( LEFT JOIN \(GroupMember.self) ON (
\(SQL("\(groupMember[.role]) = \(GroupMember.Role.standard)")) AND \(SQL("\(groupMember[.role]) = \(GroupMember.Role.admin)")) AND
\(groupMember[.groupId]) = \(closedGroup[.threadId]) AND \(groupMember[.groupId]) = \(closedGroup[.threadId]) AND
\(SQL("\(groupMember[.profileId]) = \(userPublicKey)")) \(SQL("\(groupMember[.profileId]) = \(userPublicKey)"))
) )

Loading…
Cancel
Save