mirror of https://github.com/oxen-io/session-ios
You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
73 lines
2.6 KiB
Swift
73 lines
2.6 KiB
Swift
// Copyright © 2022 Rangeproof Pty Ltd. All rights reserved.
|
|
|
|
import Foundation
|
|
import GRDB
|
|
import SessionSnodeKit
|
|
import SessionUtilitiesKit
|
|
|
|
extension MessageReceiver {
|
|
internal static func handleDataExtractionNotification(
|
|
_ db: Database,
|
|
threadId: String,
|
|
threadVariant: SessionThread.Variant,
|
|
message: DataExtractionNotification,
|
|
serverExpirationTimestamp: TimeInterval?,
|
|
using dependencies: Dependencies
|
|
) throws {
|
|
guard
|
|
threadVariant == .contact,
|
|
let sender: String = message.sender,
|
|
let messageKind: DataExtractionNotification.Kind = message.kind
|
|
else { throw MessageReceiverError.invalidMessage }
|
|
|
|
let timestampMs: Int64 = (
|
|
message.sentTimestamp.map { Int64($0) } ??
|
|
SnodeAPI.currentOffsetTimestampMs()
|
|
)
|
|
|
|
let wasRead: Bool = LibSession.timestampAlreadyRead(
|
|
threadId: threadId,
|
|
threadVariant: threadVariant,
|
|
timestampMs: (timestampMs * 1000),
|
|
userPublicKey: getUserHexEncodedPublicKey(db),
|
|
openGroup: nil,
|
|
using: dependencies
|
|
)
|
|
let messageExpirationInfo: Message.MessageExpirationInfo = Message.getMessageExpirationInfo(
|
|
threadVariant: threadVariant,
|
|
wasRead: wasRead,
|
|
serverExpirationTimestamp: serverExpirationTimestamp,
|
|
expiresInSeconds: message.expiresInSeconds,
|
|
expiresStartedAtMs: message.expiresStartedAtMs
|
|
)
|
|
_ = try Interaction(
|
|
serverHash: message.serverHash,
|
|
threadId: threadId,
|
|
threadVariant: threadVariant,
|
|
authorId: sender,
|
|
variant: {
|
|
switch messageKind {
|
|
case .screenshot: return .infoScreenshotNotification
|
|
case .mediaSaved: return .infoMediaSavedNotification
|
|
}
|
|
}(),
|
|
timestampMs: timestampMs,
|
|
wasRead: wasRead,
|
|
expiresInSeconds: messageExpirationInfo.expiresInSeconds,
|
|
expiresStartedAtMs: messageExpirationInfo.expiresStartedAtMs
|
|
)
|
|
.inserted(db)
|
|
|
|
if messageExpirationInfo.shouldUpdateExpiry {
|
|
Message.updateExpiryForDisappearAfterReadMessages(
|
|
db,
|
|
threadId: threadId,
|
|
threadVariant: threadVariant,
|
|
serverHash: message.serverHash,
|
|
expiresInSeconds: messageExpirationInfo.expiresInSeconds,
|
|
expiresStartedAtMs: messageExpirationInfo.expiresStartedAtMs
|
|
)
|
|
}
|
|
}
|
|
}
|