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