refactor on the way that attaching disappearing messages config to messages

pull/731/head
Ryan ZHAO 2 years ago
parent 9fc5f8fa68
commit e38fb400ea

@ -235,6 +235,7 @@ public final class SessionCall: CurrentCallProtocol, WebRTCSessionDelegate {
body: String(data: messageInfoData, encoding: .utf8), body: String(data: messageInfoData, encoding: .utf8),
timestampMs: timestampMs timestampMs: timestampMs
) )
.withDisappearingMessagesConfiguration(db)
.inserted(db) .inserted(db)
self.callInteractionId = interaction?.id self.callInteractionId = interaction?.id

@ -315,7 +315,10 @@ public enum PushRegistrationError: Error {
variant: .infoCall, variant: .infoCall,
body: messageInfoString, body: messageInfoString,
timestampMs: timestampMs timestampMs: timestampMs
).inserted(db) )
.withDisappearingMessagesConfiguration(db)
.inserted(db)
call.callInteractionId = interaction.id call.callInteractionId = interaction.id
return call return call

@ -476,6 +476,20 @@ public extension Interaction {
openGroupWhisperTo: self.openGroupWhisperTo openGroupWhisperTo: self.openGroupWhisperTo
) )
} }
func withDisappearingMessagesConfiguration(
_ db: Database,
disappearingMessagesConfiguration: DisappearingMessagesConfiguration? = nil
) -> Interaction {
if let config = disappearingMessagesConfiguration ?? (try? DisappearingMessagesConfiguration.fetchOne(db, id: self.threadId)) {
return self.with(
expiresInSeconds: config.durationSeconds,
expiresStartedAtMs: (config.type == .disappearAfterSend ? Double(self.timestampMs) : nil)
)
}
return self
}
} }
// MARK: - GRDB Interactions // MARK: - GRDB Interactions

@ -190,7 +190,7 @@ public final class CallMessage: ControlMessage {
let contentProto = SNProtoContent.builder() let contentProto = SNProtoContent.builder()
// DisappearingMessagesConfiguration // DisappearingMessagesConfiguration
setDisappearingMessagesConfigurationIfNeeded(db, on: contentProto, threadId: threadId) setDisappearingMessagesConfigurationIfNeeded(on: contentProto)
do { do {
contentProto.setCallMessage(try callMessageProto.build()) contentProto.setCallMessage(try callMessageProto.build())

@ -98,7 +98,7 @@ public final class DataExtractionNotification: ControlMessage {
let contentProto = SNProtoContent.builder() let contentProto = SNProtoContent.builder()
contentProto.setDataExtractionNotification(try dataExtractionNotification.build()) contentProto.setDataExtractionNotification(try dataExtractionNotification.build())
// DisappearingMessagesConfiguration // DisappearingMessagesConfiguration
setDisappearingMessagesConfigurationIfNeeded(db, on: contentProto, threadId: threadId) setDisappearingMessagesConfigurationIfNeeded(on: contentProto)
return try contentProto.build() return try contentProto.build()
} catch { } catch {
SNLog("Couldn't construct data extraction notification proto from: \(self).") SNLog("Couldn't construct data extraction notification proto from: \(self).")

@ -78,7 +78,7 @@ public final class ExpirationTimerUpdate: ControlMessage {
let contentProto = SNProtoContent.builder() let contentProto = SNProtoContent.builder()
// DisappearingMessagesConfiguration // DisappearingMessagesConfiguration
setDisappearingMessagesConfigurationIfNeeded(db, on: contentProto, threadId: threadId) setDisappearingMessagesConfigurationIfNeeded(on: contentProto)
do { do {
contentProto.setDataMessage(try dataMessageProto.build()) contentProto.setDataMessage(try dataMessageProto.build())

@ -65,7 +65,7 @@ public final class ReadReceipt: ControlMessage {
do { do {
contentProto.setReceiptMessage(try receiptProto.build()) contentProto.setReceiptMessage(try receiptProto.build())
// DisappearingMessagesConfiguration // DisappearingMessagesConfiguration
setDisappearingMessagesConfigurationIfNeeded(db, on: contentProto, threadId: threadId) setDisappearingMessagesConfigurationIfNeeded(on: contentProto)
return try contentProto.build() return try contentProto.build()
} catch { } catch {
SNLog("Couldn't construct read receipt proto from: \(self).") SNLog("Couldn't construct read receipt proto from: \(self).")

@ -66,17 +66,19 @@ public class Message: Codable {
preconditionFailure("toProto(_:) is abstract and must be overridden.") preconditionFailure("toProto(_:) is abstract and must be overridden.")
} }
public func setDisappearingMessagesConfigurationIfNeeded(_ db: Database, on proto: SNProtoContent.SNProtoContentBuilder, threadId: String) { public func setDisappearingMessagesConfigurationIfNeeded(on proto: SNProtoContent.SNProtoContentBuilder) {
guard let disappearingMessagesConfiguration = try? DisappearingMessagesConfiguration.fetchOne(db, id: threadId) else { if let expiresInSeconds = self.expiresInSeconds {
proto.setExpirationTimer(UInt32(expiresInSeconds))
} else {
proto.setExpirationTimer(0) proto.setExpirationTimer(0)
proto.setExpirationType(.unknown)
return return
} }
let expireTimer: UInt32 = disappearingMessagesConfiguration.isEnabled ? UInt32(disappearingMessagesConfiguration.durationSeconds) : 0 if let expiresStartedAtMs = self.expiresStartedAtMs, UInt64(expiresStartedAtMs) == self.sentTimestamp {
proto.setExpirationTimer(expireTimer) proto.setExpirationType(.deleteAfterSend)
} else {
if disappearingMessagesConfiguration.isEnabled, let type = disappearingMessagesConfiguration.type { proto.setExpirationType(.deleteAfterRead)
proto.setExpirationType(type.toProto())
} }
} }

@ -185,7 +185,7 @@ public final class VisibleMessage: Message {
} }
// DisappearingMessagesConfiguration // DisappearingMessagesConfiguration
setDisappearingMessagesConfigurationIfNeeded(db, on: proto, threadId: threadId) setDisappearingMessagesConfigurationIfNeeded(on: proto)
// Sync target // Sync target
if let syncTarget = syncTarget { if let syncTarget = syncTarget {

@ -228,7 +228,9 @@ extension MessageReceiver {
timestampMs: (messageSentTimestamp * 1000), timestampMs: (messageSentTimestamp * 1000),
userPublicKey: getUserHexEncodedPublicKey(db), userPublicKey: getUserHexEncodedPublicKey(db),
openGroup: nil openGroup: nil
) ),
expiresInSeconds: message.expiresInSeconds,
expiresStartedAtMs: message.expiresStartedAtMs
) )
.inserted(db) .inserted(db)

Loading…
Cancel
Save