send sync expiries

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

@ -157,6 +157,7 @@
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 */; };
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 */; };
7BDCFC08242186E700641C39 /* NotificationServiceExtensionContext.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7BDCFC07242186E700641C39 /* NotificationServiceExtensionContext.swift */; };
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>"; };
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>"; };
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>"; };
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>"; };
@ -3902,6 +3904,7 @@
FD5C7304284F0FF30029977D /* MessageReceiver+VisibleMessages.swift */,
C32C5A87256DBCF9003C73A2 /* MessageReceiver+ClosedGroups.swift */,
FD5C7306284F103B0029977D /* MessageReceiver+MessageRequests.swift */,
7BD01B1529233F3B00E7D9E6 /* MessageReceiver+SyncedExpiriesMessage.swift */,
);
path = "Message Handling";
sourceTree = "<group>";
@ -5517,6 +5520,7 @@
B8D0A25925E367AC00C1835E /* Notification+MessageReceiver.swift in Sources */,
FD245C53285065DB00B966DD /* ProximityMonitoringManager.swift in Sources */,
FD245C55285065E500B966DD /* OpenGroupManager.swift in Sources */,
7BD01B1629233F3B00E7D9E6 /* MessageReceiver+SyncedExpiriesMessage.swift in Sources */,
FDC4387227B5BB3B00C60D73 /* FileUploadResponse.swift in Sources */,
C32C599E256DB02B003C73A2 /* TypingIndicators.swift in Sources */,
FD716E682850318E00C96BF4 /* CallMode.swift in Sources */,

@ -40,6 +40,7 @@ public struct ControlMessageProcessRecord: Codable, FetchableRecord, Persistable
case unsendRequest = 7
case messageRequestResponse = 8
case call = 9
case syncedExpiries = 10
}
/// 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 MessageRequestResponse: return .messageRequestResponse
case is CallMessage: return .call
case is SyncedExpiriesMessage: return .syncedExpiries
default: preconditionFailure("[ControlMessageProcessRecord] Unsupported message type")
}
}()

@ -94,9 +94,35 @@ public extension DisappearingMessagesJob {
let serverHashes = interactions.compactMap { $0.serverHash }
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(
publicKey: getUserHexEncodedPublicKey(db),
updatedExpiryMs: Int64(ceil(startedAtMs + expiresInSeconds)),
publicKey: userPublicKey,
updatedExpiryMs: expirationTimestamp,
serverHashes: serverHashes
)
.retainUntilComplete()

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

@ -114,6 +114,7 @@ public extension Message {
case messageRequestResponse
case visibleMessage
case callMessage
case syncedExpiriesMessage
init?(from type: Message) {
switch type {
@ -127,6 +128,7 @@ public extension Message {
case is MessageRequestResponse: self = .messageRequestResponse
case is VisibleMessage: self = .visibleMessage
case is CallMessage: self = .callMessage
case is SyncedExpiriesMessage: self = .syncedExpiriesMessage
default: return nil
}
}
@ -143,6 +145,7 @@ public extension Message {
case .messageRequestResponse: return MessageRequestResponse.self
case .visibleMessage: return VisibleMessage.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 .visibleMessage: return try container.decode(VisibleMessage.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,
.messageRequestResponse,
.visibleMessage,
.callMessage
.callMessage,
.syncedExpiriesMessage
]
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")
}
}

@ -221,6 +221,9 @@ public enum MessageReceiver {
case let message as MessageRequestResponse:
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:
try MessageReceiver.handleVisibleMessage(

Loading…
Cancel
Save