hide and display the following setting action accordingly

pull/731/head
Ryan ZHAO 1 year ago
parent 5d2a307d5e
commit 978ec30074

@ -897,20 +897,45 @@ extension ConversationVC:
// For disappearing messages config update, show the following settings modal // For disappearing messages config update, show the following settings modal
guard cellViewModel.variant != .infoDisappearingMessagesUpdate else { guard cellViewModel.variant != .infoDisappearingMessagesUpdate else {
let messageDisappearingConfig = cellViewModel.messageDisappearingConfiguration()
let expirationTimerString: String = floor(messageDisappearingConfig.durationSeconds).formatted(format: .long)
let expirationTypeString: String = (messageDisappearingConfig.type == .disappearAfterRead ? "DISAPPEARING_MESSAGE_STATE_READ".localized() : "DISAPPEARING_MESSAGE_STATE_SENT".localized())
let modalBodyString: String = (
messageDisappearingConfig.isEnabled ?
String(
format: "FOLLOW_SETTING_EXPLAINATION_TURNING_ON".localized(),
expirationTimerString,
expirationTypeString
) :
"FOLLOW_SETTING_EXPLAINATION_TURNING_OFF".localized()
)
let modalConfirmTitle: String = messageDisappearingConfig.isEnabled ? "DISAPPERING_MESSAGES_SAVE_TITLE".localized() : ""
let confirmationModal: ConfirmationModal = ConfirmationModal( let confirmationModal: ConfirmationModal = ConfirmationModal(
info: ConfirmationModal.Info( info: ConfirmationModal.Info(
title: "FOLLOW_SETTING_TITLE".localized(), title: "FOLLOW_SETTING_TITLE".localized(),
body: .attributedText( body: .attributedText(
NSAttributedString(string: "FOLLOW_SETTING_EXPLAINATION_TURNING_ON".localized()) NSAttributedString(string: modalBodyString)
.adding( .adding(
attributes: [ .font: UIFont.boldSystemFont(ofSize: Values.smallFontSize) ], attributes: [ .font: UIFont.boldSystemFont(ofSize: Values.smallFontSize) ],
range: ("FOLLOW_SETTING_EXPLAINATION_TURNING_ON".localized() as NSString).range(of: cellViewModel.authorName) range: (modalBodyString as NSString).range(of: expirationTypeString)
)
.adding(
attributes: [ .font: UIFont.boldSystemFont(ofSize: Values.smallFontSize) ],
range: (modalBodyString as NSString).range(of: expirationTimerString)
)
.adding(
attributes: [ .font: UIFont.boldSystemFont(ofSize: Values.smallFontSize) ],
range: (modalBodyString as NSString).range(of: "DISAPPEARING_MESSAGES_OFF".localized().lowercased())
) )
), ),
confirmTitle: "modal_download_button_title".localized(), confirmTitle: modalConfirmTitle,
confirmStyle: .danger,
cancelStyle: .textPrimary,
dismissOnConfirm: false // Custom dismissal logic dismissOnConfirm: false // Custom dismissal logic
) { [weak self] _ in ) { [weak self] _ in
dependencies.storage.writeAsync { db in
try messageDisappearingConfig.save(db)
}
self?.dismiss(animated: true, completion: nil) self?.dismiss(animated: true, completion: nil)
} }
) )

@ -320,6 +320,16 @@ public class ConversationViewModel: OWSAudioPlayerDelegate {
return SQL("LEFT JOIN \(RecipientState.self) ON \(recipientState[.interactionId]) = \(interaction[.id])") return SQL("LEFT JOIN \(RecipientState.self) ON \(recipientState[.interactionId]) = \(interaction[.id])")
}() }()
), ),
PagedData.ObservedChanges(
table: DisappearingMessagesConfiguration.self,
columns: [ .isEnabled, .type, .durationSeconds ],
joinToPagedType: {
let interaction: TypedTableAlias<Interaction> = TypedTableAlias()
let disappearingMessagesConfiguration: TypedTableAlias<DisappearingMessagesConfiguration> = TypedTableAlias()
return SQL("LEFT JOIN \(DisappearingMessagesConfiguration.self) ON \(disappearingMessagesConfiguration[.threadId]) = \(interaction[.threadId])")
}()
),
], ],
filterSQL: MessageViewModel.filterSQL(threadId: threadId), filterSQL: MessageViewModel.filterSQL(threadId: threadId),
groupSQL: MessageViewModel.groupSQL, groupSQL: MessageViewModel.groupSQL,
@ -538,7 +548,8 @@ public class ConversationViewModel: OWSAudioPlayerDelegate {
optimisticMessageId: optimisticMessageId, optimisticMessageId: optimisticMessageId,
threadId: threadData.threadId, threadId: threadData.threadId,
threadVariant: threadData.threadVariant, threadVariant: threadData.threadVariant,
threadDisappearingMessagesConfiguration: threadData.disappearingMessagesConfiguration, threadExpirationType: threadData.disappearingMessagesConfiguration?.type,
threadExpirationTimer: threadData.disappearingMessagesConfiguration?.durationSeconds,
threadOpenGroupServer: threadData.openGroupServer, threadOpenGroupServer: threadData.openGroupServer,
threadOpenGroupPublicKey: threadData.openGroupPublicKey, threadOpenGroupPublicKey: threadData.openGroupPublicKey,
threadContactNameInternal: threadData.threadContactName(), threadContactNameInternal: threadData.threadContactName(),

@ -19,7 +19,8 @@ public struct MessageViewModel: FetchableRecordWithRowId, Decodable, Equatable,
case threadId case threadId
case threadVariant case threadVariant
case threadIsTrusted case threadIsTrusted
case threadDisappearingMessagesConfiguration case threadExpirationType
case threadExpirationTimer
case threadOpenGroupServer case threadOpenGroupServer
case threadOpenGroupPublicKey case threadOpenGroupPublicKey
case threadContactNameInternal case threadContactNameInternal
@ -101,7 +102,8 @@ public struct MessageViewModel: FetchableRecordWithRowId, Decodable, Equatable,
public let threadId: String public let threadId: String
public let threadVariant: SessionThread.Variant public let threadVariant: SessionThread.Variant
public let threadIsTrusted: Bool public let threadIsTrusted: Bool
public let threadDisappearingMessagesConfiguration: DisappearingMessagesConfiguration? public let threadExpirationType: DisappearingMessagesConfiguration.DisappearingMessageType?
public let threadExpirationTimer: TimeInterval?
public let threadOpenGroupServer: String? public let threadOpenGroupServer: String?
public let threadOpenGroupPublicKey: String? public let threadOpenGroupPublicKey: String?
private let threadContactNameInternal: String? private let threadContactNameInternal: String?
@ -210,7 +212,8 @@ public struct MessageViewModel: FetchableRecordWithRowId, Decodable, Equatable,
threadId: self.threadId, threadId: self.threadId,
threadVariant: self.threadVariant, threadVariant: self.threadVariant,
threadIsTrusted: self.threadIsTrusted, threadIsTrusted: self.threadIsTrusted,
threadDisappearingMessagesConfiguration: self.threadDisappearingMessagesConfiguration, threadExpirationType: self.threadExpirationType,
threadExpirationTimer: self.threadExpirationTimer,
threadOpenGroupServer: self.threadOpenGroupServer, threadOpenGroupServer: self.threadOpenGroupServer,
threadOpenGroupPublicKey: self.threadOpenGroupPublicKey, threadOpenGroupPublicKey: self.threadOpenGroupPublicKey,
threadContactNameInternal: self.threadContactNameInternal, threadContactNameInternal: self.threadContactNameInternal,
@ -378,7 +381,8 @@ public struct MessageViewModel: FetchableRecordWithRowId, Decodable, Equatable,
threadId: self.threadId, threadId: self.threadId,
threadVariant: self.threadVariant, threadVariant: self.threadVariant,
threadIsTrusted: self.threadIsTrusted, threadIsTrusted: self.threadIsTrusted,
threadDisappearingMessagesConfiguration: self.threadDisappearingMessagesConfiguration, threadExpirationType: self.threadExpirationType,
threadExpirationTimer: self.threadExpirationTimer,
threadOpenGroupServer: self.threadOpenGroupServer, threadOpenGroupServer: self.threadOpenGroupServer,
threadOpenGroupPublicKey: self.threadOpenGroupPublicKey, threadOpenGroupPublicKey: self.threadOpenGroupPublicKey,
threadContactNameInternal: self.threadContactNameInternal, threadContactNameInternal: self.threadContactNameInternal,
@ -489,8 +493,8 @@ public struct MessageViewModel: FetchableRecordWithRowId, Decodable, Equatable,
// MARK: - DisappeaingMessagesUpdateControlMessage // MARK: - DisappeaingMessagesUpdateControlMessage
public extension MessageViewModel { public extension MessageViewModel {
func canDoFollowingSetting() -> Bool { func messageDisappearingConfiguration() -> DisappearingMessagesConfiguration {
let messageDisappearingConfig = DisappearingMessagesConfiguration return DisappearingMessagesConfiguration
.defaultWith(self.threadId) .defaultWith(self.threadId)
.with( .with(
isEnabled: (self.expiresInSeconds ?? 0) > 0, isEnabled: (self.expiresInSeconds ?? 0) > 0,
@ -498,8 +502,21 @@ public extension MessageViewModel {
type: (Int64(self.expiresStartedAtMs ?? 0) == self.timestampMs ? .disappearAfterSend : .disappearAfterRead ), type: (Int64(self.expiresStartedAtMs ?? 0) == self.timestampMs ? .disappearAfterSend : .disappearAfterRead ),
lastChangeTimestampMs: nil lastChangeTimestampMs: nil
) )
}
return messageDisappearingConfig != self.threadDisappearingMessagesConfiguration func threadDisappearingConfiguration() -> DisappearingMessagesConfiguration {
return DisappearingMessagesConfiguration
.defaultWith(self.threadId)
.with(
isEnabled: (self.threadExpirationTimer ?? 0) > 0,
durationSeconds: self.threadExpirationTimer,
type: self.threadExpirationType,
lastChangeTimestampMs: nil
)
}
func canDoFollowingSetting() -> Bool {
return self.messageDisappearingConfiguration() != self.threadDisappearingConfiguration()
} }
} }
@ -604,7 +621,8 @@ public extension MessageViewModel {
self.threadId = "INVALID_THREAD_ID" self.threadId = "INVALID_THREAD_ID"
self.threadVariant = .contact self.threadVariant = .contact
self.threadIsTrusted = false self.threadIsTrusted = false
self.threadDisappearingMessagesConfiguration = nil self.threadExpirationType = nil
self.threadExpirationTimer = nil
self.threadOpenGroupServer = nil self.threadOpenGroupServer = nil
self.threadOpenGroupPublicKey = nil self.threadOpenGroupPublicKey = nil
self.threadContactNameInternal = nil self.threadContactNameInternal = nil
@ -669,7 +687,8 @@ public extension MessageViewModel {
optimisticMessageId: UUID, optimisticMessageId: UUID,
threadId: String, threadId: String,
threadVariant: SessionThread.Variant, threadVariant: SessionThread.Variant,
threadDisappearingMessagesConfiguration: DisappearingMessagesConfiguration?, threadExpirationType: DisappearingMessagesConfiguration.DisappearingMessageType?,
threadExpirationTimer: TimeInterval?,
threadOpenGroupServer: String?, threadOpenGroupServer: String?,
threadOpenGroupPublicKey: String?, threadOpenGroupPublicKey: String?,
threadContactNameInternal: String, threadContactNameInternal: String,
@ -691,7 +710,8 @@ public extension MessageViewModel {
self.threadId = threadId self.threadId = threadId
self.threadVariant = threadVariant self.threadVariant = threadVariant
self.threadIsTrusted = false self.threadIsTrusted = false
self.threadDisappearingMessagesConfiguration = threadDisappearingMessagesConfiguration self.threadExpirationType = threadExpirationType
self.threadExpirationTimer = threadExpirationTimer
self.threadOpenGroupServer = threadOpenGroupServer self.threadOpenGroupServer = threadOpenGroupServer
self.threadOpenGroupPublicKey = threadOpenGroupPublicKey self.threadOpenGroupPublicKey = threadOpenGroupPublicKey
self.threadContactNameInternal = threadContactNameInternal self.threadContactNameInternal = threadContactNameInternal
@ -835,7 +855,7 @@ public extension MessageViewModel {
let linkPreviewAttachment: TypedTableAlias<Attachment> = TypedTableAlias(ViewModel.self, column: .linkPreviewAttachment) let linkPreviewAttachment: TypedTableAlias<Attachment> = TypedTableAlias(ViewModel.self, column: .linkPreviewAttachment)
let readReceipt: TypedTableAlias<RecipientState> = TypedTableAlias(name: "readReceipt") let readReceipt: TypedTableAlias<RecipientState> = TypedTableAlias(name: "readReceipt")
let numColumnsBeforeLinkedRecords: Int = 26 let numColumnsBeforeLinkedRecords: Int = 23
let finalGroupSQL: SQL = (groupSQL ?? "") let finalGroupSQL: SQL = (groupSQL ?? "")
let request: SQLRequest<ViewModel> = """ let request: SQLRequest<ViewModel> = """
SELECT SELECT
@ -843,7 +863,8 @@ public extension MessageViewModel {
\(thread[.variant]) AS \(ViewModel.Columns.threadVariant), \(thread[.variant]) AS \(ViewModel.Columns.threadVariant),
-- Default to 'true' for non-contact threads -- Default to 'true' for non-contact threads
IFNULL(\(contact[.isTrusted]), true) AS \(ViewModel.Columns.threadIsTrusted), IFNULL(\(contact[.isTrusted]), true) AS \(ViewModel.Columns.threadIsTrusted),
\(disappearingMessagesConfig.allColumns), \(disappearingMessagesConfig[.type]) AS \(ViewModel.Columns.threadExpirationType),
\(disappearingMessagesConfig[.durationSeconds]) AS \(ViewModel.Columns.threadExpirationTimer),
\(openGroup[.server]) AS \(ViewModel.Columns.threadOpenGroupServer), \(openGroup[.server]) AS \(ViewModel.Columns.threadOpenGroupServer),
\(openGroup[.publicKey]) AS \(ViewModel.Columns.threadOpenGroupPublicKey), \(openGroup[.publicKey]) AS \(ViewModel.Columns.threadOpenGroupPublicKey),
IFNULL(\(threadProfile[.nickname]), \(threadProfile[.name])) AS \(ViewModel.Columns.threadContactNameInternal), IFNULL(\(threadProfile[.nickname]), \(threadProfile[.name])) AS \(ViewModel.Columns.threadContactNameInternal),

Loading…
Cancel
Save