send sync expiries

pull/941/head
ryanzhao 3 years ago
parent fd14c50f61
commit 89a5739883

@ -157,6 +157,7 @@
7BCD116C27016062006330F1 /* WebRTCSession+DataChannel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7BCD116B27016062006330F1 /* WebRTCSession+DataChannel.swift */; }; 7BCD116C27016062006330F1 /* WebRTCSession+DataChannel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7BCD116B27016062006330F1 /* WebRTCSession+DataChannel.swift */; };
7BD01B122921BDDF00E7D9E6 /* MessageSender+TTL.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7BD01B112921BDDF00E7D9E6 /* MessageSender+TTL.swift */; }; 7BD01B122921BDDF00E7D9E6 /* MessageSender+TTL.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7BD01B112921BDDF00E7D9E6 /* MessageSender+TTL.swift */; };
7BD01B142921FD9900E7D9E6 /* SyncedExpiriesMessage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7BD01B132921FD9900E7D9E6 /* SyncedExpiriesMessage.swift */; }; 7BD01B142921FD9900E7D9E6 /* SyncedExpiriesMessage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7BD01B132921FD9900E7D9E6 /* SyncedExpiriesMessage.swift */; };
7BD01B1629233F3B00E7D9E6 /* MessageReceiver+SyncedExpiriesMessage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7BD01B1529233F3B00E7D9E6 /* MessageReceiver+SyncedExpiriesMessage.swift */; };
7BD477A827EC39F5004E2822 /* Atomic.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7BD477A727EC39F5004E2822 /* Atomic.swift */; }; 7BD477A827EC39F5004E2822 /* Atomic.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7BD477A727EC39F5004E2822 /* Atomic.swift */; };
7BDCFC08242186E700641C39 /* NotificationServiceExtensionContext.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7BDCFC07242186E700641C39 /* NotificationServiceExtensionContext.swift */; }; 7BDCFC08242186E700641C39 /* NotificationServiceExtensionContext.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7BDCFC07242186E700641C39 /* NotificationServiceExtensionContext.swift */; };
7BDCFC0B2421EB7600641C39 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = B6F509951AA53F760068F56A /* Localizable.strings */; }; 7BDCFC0B2421EB7600641C39 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = B6F509951AA53F760068F56A /* Localizable.strings */; };
@ -1229,6 +1230,7 @@
7BCD116B27016062006330F1 /* WebRTCSession+DataChannel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "WebRTCSession+DataChannel.swift"; sourceTree = "<group>"; }; 7BCD116B27016062006330F1 /* WebRTCSession+DataChannel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "WebRTCSession+DataChannel.swift"; sourceTree = "<group>"; };
7BD01B112921BDDF00E7D9E6 /* MessageSender+TTL.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "MessageSender+TTL.swift"; sourceTree = "<group>"; }; 7BD01B112921BDDF00E7D9E6 /* MessageSender+TTL.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "MessageSender+TTL.swift"; sourceTree = "<group>"; };
7BD01B132921FD9900E7D9E6 /* SyncedExpiriesMessage.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SyncedExpiriesMessage.swift; sourceTree = "<group>"; }; 7BD01B132921FD9900E7D9E6 /* SyncedExpiriesMessage.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SyncedExpiriesMessage.swift; sourceTree = "<group>"; };
7BD01B1529233F3B00E7D9E6 /* MessageReceiver+SyncedExpiriesMessage.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "MessageReceiver+SyncedExpiriesMessage.swift"; sourceTree = "<group>"; };
7BD477A727EC39F5004E2822 /* Atomic.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Atomic.swift; sourceTree = "<group>"; }; 7BD477A727EC39F5004E2822 /* Atomic.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Atomic.swift; sourceTree = "<group>"; };
7BD477A927F15F24004E2822 /* OpenGroupServerIdLookup.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OpenGroupServerIdLookup.swift; sourceTree = "<group>"; }; 7BD477A927F15F24004E2822 /* OpenGroupServerIdLookup.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OpenGroupServerIdLookup.swift; sourceTree = "<group>"; };
7BDCFC0424206E7300641C39 /* SessionNotificationServiceExtension.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = SessionNotificationServiceExtension.entitlements; sourceTree = "<group>"; }; 7BDCFC0424206E7300641C39 /* SessionNotificationServiceExtension.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = SessionNotificationServiceExtension.entitlements; sourceTree = "<group>"; };
@ -3902,6 +3904,7 @@
FD5C7304284F0FF30029977D /* MessageReceiver+VisibleMessages.swift */, FD5C7304284F0FF30029977D /* MessageReceiver+VisibleMessages.swift */,
C32C5A87256DBCF9003C73A2 /* MessageReceiver+ClosedGroups.swift */, C32C5A87256DBCF9003C73A2 /* MessageReceiver+ClosedGroups.swift */,
FD5C7306284F103B0029977D /* MessageReceiver+MessageRequests.swift */, FD5C7306284F103B0029977D /* MessageReceiver+MessageRequests.swift */,
7BD01B1529233F3B00E7D9E6 /* MessageReceiver+SyncedExpiriesMessage.swift */,
); );
path = "Message Handling"; path = "Message Handling";
sourceTree = "<group>"; sourceTree = "<group>";
@ -5517,6 +5520,7 @@
B8D0A25925E367AC00C1835E /* Notification+MessageReceiver.swift in Sources */, B8D0A25925E367AC00C1835E /* Notification+MessageReceiver.swift in Sources */,
FD245C53285065DB00B966DD /* ProximityMonitoringManager.swift in Sources */, FD245C53285065DB00B966DD /* ProximityMonitoringManager.swift in Sources */,
FD245C55285065E500B966DD /* OpenGroupManager.swift in Sources */, FD245C55285065E500B966DD /* OpenGroupManager.swift in Sources */,
7BD01B1629233F3B00E7D9E6 /* MessageReceiver+SyncedExpiriesMessage.swift in Sources */,
FDC4387227B5BB3B00C60D73 /* FileUploadResponse.swift in Sources */, FDC4387227B5BB3B00C60D73 /* FileUploadResponse.swift in Sources */,
C32C599E256DB02B003C73A2 /* TypingIndicators.swift in Sources */, C32C599E256DB02B003C73A2 /* TypingIndicators.swift in Sources */,
FD716E682850318E00C96BF4 /* CallMode.swift in Sources */, FD716E682850318E00C96BF4 /* CallMode.swift in Sources */,

@ -40,6 +40,7 @@ public struct ControlMessageProcessRecord: Codable, FetchableRecord, Persistable
case unsendRequest = 7 case unsendRequest = 7
case messageRequestResponse = 8 case messageRequestResponse = 8
case call = 9 case call = 9
case syncedExpiries = 10
} }
/// The id for the thread the control message is associated to /// The id for the thread the control message is associated to
@ -106,6 +107,7 @@ public struct ControlMessageProcessRecord: Codable, FetchableRecord, Persistable
case is UnsendRequest: return .unsendRequest case is UnsendRequest: return .unsendRequest
case is MessageRequestResponse: return .messageRequestResponse case is MessageRequestResponse: return .messageRequestResponse
case is CallMessage: return .call case is CallMessage: return .call
case is SyncedExpiriesMessage: return .syncedExpiries
default: preconditionFailure("[ControlMessageProcessRecord] Unsupported message type") default: preconditionFailure("[ControlMessageProcessRecord] Unsupported message type")
} }
}() }()

@ -94,9 +94,35 @@ public extension DisappearingMessagesJob {
let serverHashes = interactions.compactMap { $0.serverHash } let serverHashes = interactions.compactMap { $0.serverHash }
guard let expiresInSeconds = expiresInSeconds, !serverHashes.isEmpty else { return } guard let expiresInSeconds = expiresInSeconds, !serverHashes.isEmpty else { return }
let expirationTimestamp: Int64 = Int64(ceil(startedAtMs + expiresInSeconds))
let userPublicKey: String = getUserHexEncodedPublicKey(db)
let threadId: String = interactions[0].threadId
// Send SyncExpiriesMessage
let syncTarget: String = interactions[0].authorId
let syncExpiries: [SyncedExpiriesMessage.SyncedExpiry] = serverHashes.map { serverHash in
return SyncedExpiriesMessage.SyncedExpiry(
serverHash: serverHash,
expirationTimestamp: expirationTimestamp)
}
let syncExpiriesMessage = SyncedExpiriesMessage(
conversationExpiries: [syncTarget: syncExpiries]
)
MessageSender
.send(
db,
message: syncExpiriesMessage,
threadId: threadId,
interactionId: nil,
to: .contact(publicKey: userPublicKey)
)
// Update the ttls
SnodeAPI.updateExpiry( SnodeAPI.updateExpiry(
publicKey: getUserHexEncodedPublicKey(db), publicKey: userPublicKey,
updatedExpiryMs: Int64(ceil(startedAtMs + expiresInSeconds)), updatedExpiryMs: expirationTimestamp,
serverHashes: serverHashes serverHashes: serverHashes
) )
.retainUntilComplete() .retainUntilComplete()

@ -23,6 +23,8 @@ public final class SyncedExpiriesMessage: ControlMessage {
return conversationExpiries.count > 0 return conversationExpiries.count > 0
} }
override public var isSelfSendValid: Bool { true }
// MARK: - Codable // MARK: - Codable
required init(from decoder: Decoder) throws { required init(from decoder: Decoder) throws {

@ -114,6 +114,7 @@ public extension Message {
case messageRequestResponse case messageRequestResponse
case visibleMessage case visibleMessage
case callMessage case callMessage
case syncedExpiriesMessage
init?(from type: Message) { init?(from type: Message) {
switch type { switch type {
@ -127,6 +128,7 @@ public extension Message {
case is MessageRequestResponse: self = .messageRequestResponse case is MessageRequestResponse: self = .messageRequestResponse
case is VisibleMessage: self = .visibleMessage case is VisibleMessage: self = .visibleMessage
case is CallMessage: self = .callMessage case is CallMessage: self = .callMessage
case is SyncedExpiriesMessage: self = .syncedExpiriesMessage
default: return nil default: return nil
} }
} }
@ -143,6 +145,7 @@ public extension Message {
case .messageRequestResponse: return MessageRequestResponse.self case .messageRequestResponse: return MessageRequestResponse.self
case .visibleMessage: return VisibleMessage.self case .visibleMessage: return VisibleMessage.self
case .callMessage: return CallMessage.self case .callMessage: return CallMessage.self
case .syncedExpiriesMessage: return SyncedExpiriesMessage.self
} }
} }
@ -163,6 +166,7 @@ public extension Message {
case .messageRequestResponse: return try container.decode(MessageRequestResponse.self, forKey: key) case .messageRequestResponse: return try container.decode(MessageRequestResponse.self, forKey: key)
case .visibleMessage: return try container.decode(VisibleMessage.self, forKey: key) case .visibleMessage: return try container.decode(VisibleMessage.self, forKey: key)
case .callMessage: return try container.decode(CallMessage.self, forKey: key) case .callMessage: return try container.decode(CallMessage.self, forKey: key)
case .syncedExpiriesMessage: return try container.decode(SyncedExpiriesMessage.self, forKey: key)
} }
} }
} }
@ -180,7 +184,8 @@ public extension Message {
.unsendRequest, .unsendRequest,
.messageRequestResponse, .messageRequestResponse,
.visibleMessage, .visibleMessage,
.callMessage .callMessage,
.syncedExpiriesMessage
] ]
return prioritisedVariants return prioritisedVariants

@ -0,0 +1,16 @@
// Copyright © 2022 Rangeproof Pty Ltd. All rights reserved.
import Foundation
import GRDB
import SignalCoreKit
import SessionUtilitiesKit
extension MessageReceiver {
internal static func handleSyncedExpiriesMessage(
_ db: Database,
message: SyncedExpiriesMessage,
dependencies: SMKDependencies
) throws {
print("Ryan Test: Receive SyncedExpiriesMessage")
}
}

@ -222,6 +222,9 @@ public enum MessageReceiver {
case let message as MessageRequestResponse: case let message as MessageRequestResponse:
try MessageReceiver.handleMessageRequestResponse(db, message: message, dependencies: dependencies) try MessageReceiver.handleMessageRequestResponse(db, message: message, dependencies: dependencies)
case let message as SyncedExpiriesMessage:
try MessageReceiver.handleSyncedExpiriesMessage(db, message: message, dependencies: dependencies)
case let message as VisibleMessage: case let message as VisibleMessage:
try MessageReceiver.handleVisibleMessage( try MessageReceiver.handleVisibleMessage(
db, db,

Loading…
Cancel
Save