minor refactor and fix expiration update message for control messages

pull/731/head
Ryan ZHAO 1 year ago
parent 42f2440067
commit 7693e53183

@ -477,42 +477,19 @@ class ThreadDisappearingMessagesSettingsViewModel: SessionTableViewModel, Naviga
_ = try updatedConfig.saved(db) _ = try updatedConfig.saved(db)
let userPublicKey: String = getUserHexEncodedPublicKey(db, using: dependencies) let userPublicKey: String = getUserHexEncodedPublicKey(db, using: dependencies)
if Features.useNewDisappearingMessagesConfig {
switch threadVariant {
case .contact:
_ = try Interaction
.filter(Interaction.Columns.threadId == threadId)
.filter(Interaction.Columns.variant == Interaction.Variant.infoDisappearingMessagesUpdate)
.filter(Interaction.Columns.authorId == userPublicKey)
.deleteAll(db)
case .legacyGroup:
_ = try Interaction
.filter(Interaction.Columns.threadId == threadId)
.filter(Interaction.Columns.variant == Interaction.Variant.infoDisappearingMessagesUpdate)
.deleteAll(db)
default:
break
}
}
let currentTimestampMs: Int64 = SnodeAPI.currentOffsetTimestampMs() let currentTimestampMs: Int64 = SnodeAPI.currentOffsetTimestampMs()
let interaction: Interaction = try Interaction( let interactionId = try DisappearingMessagesConfiguration.insertControlMessage(
db,
threadId: threadId, threadId: threadId,
threadVariant: threadVariant,
authorId: userPublicKey, authorId: userPublicKey,
variant: .infoDisappearingMessagesUpdate,
body: updatedConfig.messageInfoString(
threadVariant: threadVariant,
senderName: nil,
isPreviousOff: !self.config.isEnabled
),
timestampMs: currentTimestampMs, timestampMs: currentTimestampMs,
expiresInSeconds: updatedConfig.durationSeconds, serverHash: nil,
expiresStartedAtMs: (updatedConfig.type == .disappearAfterSend ? Double(currentTimestampMs) : nil) updatedConfiguration: updatedConfig,
isPreviousOff: !self.config.isEnabled
) )
.inserted(db)
let duration: UInt32? = { let duration: UInt32? = {
guard !Features.useNewDisappearingMessagesConfig else { return nil } guard !Features.useNewDisappearingMessagesConfig else { return nil }
return UInt32(floor(updatedConfig.isEnabled ? updatedConfig.durationSeconds : 0)) return UInt32(floor(updatedConfig.isEnabled ? updatedConfig.durationSeconds : 0))
@ -524,7 +501,7 @@ class ThreadDisappearingMessagesSettingsViewModel: SessionTableViewModel, Naviga
syncTarget: nil, syncTarget: nil,
duration: duration duration: duration
), ),
interactionId: interaction.id, interactionId: interactionId,
threadId: threadId, threadId: threadId,
threadVariant: threadVariant, threadVariant: threadVariant,
using: dependencies using: dependencies

@ -245,6 +245,56 @@ public extension DisappearingMessagesConfiguration {
} }
} }
// MARK: - Control Message
public extension DisappearingMessagesConfiguration {
static func insertControlMessage(
_ db: Database,
threadId: String,
threadVariant: SessionThread.Variant,
authorId: String,
timestampMs: Int64,
serverHash: String?,
updatedConfiguration: DisappearingMessagesConfiguration,
isPreviousOff: Bool
) throws -> Int64? {
if Features.useNewDisappearingMessagesConfig {
switch threadVariant {
case .contact:
_ = try Interaction
.filter(Interaction.Columns.threadId == threadId)
.filter(Interaction.Columns.variant == Interaction.Variant.infoDisappearingMessagesUpdate)
.filter(Interaction.Columns.authorId == authorId)
.deleteAll(db)
case .legacyGroup:
_ = try Interaction
.filter(Interaction.Columns.threadId == threadId)
.filter(Interaction.Columns.variant == Interaction.Variant.infoDisappearingMessagesUpdate)
.deleteAll(db)
default:
break
}
}
let interaction = try Interaction(
serverHash: serverHash,
threadId: threadId,
authorId: authorId,
variant: .infoDisappearingMessagesUpdate,
body: updatedConfiguration.messageInfoString(
threadVariant: threadVariant,
senderName: (authorId != getUserHexEncodedPublicKey(db) ? Profile.displayName(db, id: authorId) : nil),
isPreviousOff: isPreviousOff
),
timestampMs: timestampMs,
expiresInSeconds: updatedConfiguration.durationSeconds,
expiresStartedAtMs: (updatedConfiguration.type == .disappearAfterSend ? Double(timestampMs) : nil)
).inserted(db)
return interaction.id
}
}
// MARK: - UI Constraints // MARK: - UI Constraints
extension DisappearingMessagesConfiguration { extension DisappearingMessagesConfiguration {

@ -198,68 +198,18 @@ extension MessageReceiver {
} }
fallthrough fallthrough
case .contact: case .contact:
try insertExpirationUpdateControlMessage( _ = try DisappearingMessagesConfiguration.insertControlMessage(
db, db,
threadId: threadId, threadId: threadId,
threadVariant: threadVariant, threadVariant: threadVariant,
authorId: sender, authorId: sender,
timestampMs: timestampMs, timestampMs: Int64(timestampMs),
serverHash: message.serverHash, serverHash: message.serverHash,
localConfig: localConfig, updatedConfiguration: remoteConfig,
remoteConfig: remoteConfig isPreviousOff: !localConfig.isEnabled
) )
default: default:
return return
} }
} }
private static func insertExpirationUpdateControlMessage(
_ db: Database,
threadId: String,
threadVariant: SessionThread.Variant,
authorId: String,
timestampMs: UInt64,
serverHash: String?,
localConfig: DisappearingMessagesConfiguration,
remoteConfig: DisappearingMessagesConfiguration
) throws {
guard threadVariant != .contact || authorId != getUserHexEncodedPublicKey(db) else { return }
switch threadVariant {
case .contact:
_ = try Interaction
.filter(Interaction.Columns.threadId == threadId)
.filter(Interaction.Columns.variant == Interaction.Variant.infoDisappearingMessagesUpdate)
.filter(Interaction.Columns.authorId == authorId)
.deleteAll(db)
case .legacyGroup:
_ = try Interaction
.filter(Interaction.Columns.threadId == threadId)
.filter(Interaction.Columns.variant == Interaction.Variant.infoDisappearingMessagesUpdate)
.deleteAll(db)
default:
break
}
_ = try Interaction
.filter(Interaction.Columns.threadId == threadId)
.filter(Interaction.Columns.variant == Interaction.Variant.infoDisappearingMessagesUpdate)
.filter(Interaction.Columns.authorId == authorId)
.deleteAll(db)
_ = try Interaction(
serverHash: serverHash,
threadId: threadId,
authorId: authorId,
variant: .infoDisappearingMessagesUpdate,
body: remoteConfig.messageInfoString(
threadVariant: threadVariant,
senderName: (authorId != getUserHexEncodedPublicKey(db) ? Profile.displayName(db, id: authorId) : nil),
isPreviousOff: !localConfig.isEnabled
),
timestampMs: Int64(timestampMs),
expiresInSeconds: remoteConfig.durationSeconds,
expiresStartedAtMs: (remoteConfig.type == .disappearAfterSend ? Double(timestampMs) : nil)
).inserted(db)
}
} }

@ -180,11 +180,12 @@ internal extension SessionUtil {
.defaulting(to: DisappearingMessagesConfiguration.defaultWith(sessionId)) .defaulting(to: DisappearingMessagesConfiguration.defaultWith(sessionId))
if data.config != localConfig { if data.config != localConfig {
_ = try localConfig.with( _ = try data.config.save(db)
isEnabled: data.config.isEnabled, _ = try Interaction
durationSeconds: data.config.durationSeconds, .filter(Interaction.Columns.threadId == sessionId)
type: data.config.type .filter(Interaction.Columns.variant == Interaction.Variant.infoDisappearingMessagesUpdate)
).save(db) .filter(Interaction.Columns.authorId == getUserHexEncodedPublicKey(db))
.deleteAll(db)
} }
} }

@ -277,12 +277,8 @@ internal extension SessionUtil {
.fetchOne(db, id: group.id) .fetchOne(db, id: group.id)
.defaulting(to: DisappearingMessagesConfiguration.defaultWith(group.id)) .defaulting(to: DisappearingMessagesConfiguration.defaultWith(group.id))
if let remoteConfig = group.disappearingConfig { if let remoteConfig = group.disappearingConfig, localConfig != remoteConfig {
_ = try localConfig.with( _ = try remoteConfig.save(db)
isEnabled: remoteConfig.isEnabled,
durationSeconds: remoteConfig.durationSeconds,
type: remoteConfig.type
).save(db)
_ = try Interaction _ = try Interaction
.filter(Interaction.Columns.threadId == group.id) .filter(Interaction.Columns.threadId == group.id)

Loading…
Cancel
Save