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.
28 lines
1.0 KiB
Swift
28 lines
1.0 KiB
Swift
|
|
/// A message is invalidated when it needs to be re-rendered in the UI. Examples of when this happens include:
|
|
///
|
|
/// • When the sent or read status of a message is updated.
|
|
/// • When an attachment is uploaded or downloaded.
|
|
@objc public final class MessageInvalidator : NSObject {
|
|
private static var invalidatedMessages: Set<String> = []
|
|
|
|
@objc public static let shared = MessageInvalidator()
|
|
|
|
private override init() { }
|
|
|
|
@objc public static func invalidate(_ message: TSMessage, with transaction: YapDatabaseReadWriteTransaction) {
|
|
guard let id = message.uniqueId, !isInvalidated(message) else { return }
|
|
invalidatedMessages.insert(id)
|
|
message.touch(with: transaction)
|
|
}
|
|
|
|
@objc public static func isInvalidated(_ message: TSMessage) -> Bool {
|
|
guard let id = message.uniqueId else { return false }
|
|
return invalidatedMessages.contains(id)
|
|
}
|
|
|
|
@objc public static func markAsUpdated(_ id: String) {
|
|
invalidatedMessages.remove(id)
|
|
}
|
|
}
|