Signal-iOS/SignalServiceKit/Messages/Attachments/TSAttachmentPointer.h
2024-06-17 11:56:26 -07:00

170 lines
7.9 KiB
Objective-C

//
// Copyright 2017 Signal Messenger, LLC
// SPDX-License-Identifier: AGPL-3.0-only
//
#import <SignalServiceKit/TSAttachment.h>
NS_ASSUME_NONNULL_BEGIN
@class SDSAnyWriteTransaction;
@class SSKProtoAttachmentPointer;
@class TSAttachmentStream;
@class TSMessage;
typedef NS_CLOSED_ENUM(NSUInteger, TSAttachmentPointerState) {
TSAttachmentPointerStateEnqueued = 0,
TSAttachmentPointerStateDownloading = 1,
TSAttachmentPointerStateFailed = 2,
TSAttachmentPointerStatePendingMessageRequest = 3,
// Either:
//
// * Download of this attachment is blocking by the auto-download
// preferences.
// * Download was manually paused/stopped and needs to be manually
// resumed.
TSAttachmentPointerStatePendingManualDownload = 4,
};
NSString *NSStringForTSAttachmentPointerState(TSAttachmentPointerState value);
#pragma mark -
/**
* A TSAttachmentPointer is a yet-to-be-downloaded attachment.
*/
@interface TSAttachmentPointer : TSAttachment
/// Unused and deprecated. Maintained for sds compatibility, but no meaning should be derived from the value.
@property (nonatomic, readonly) NSUInteger pointerType;
@property (nonatomic, readonly) TSAttachmentPointerState state;
// Though now required, `digest` may be null for pre-existing records or from
// messages received from other clients
@property (nullable, nonatomic, readonly) NSData *digest;
@property (nonatomic, readonly) CGSize mediaSize;
- (instancetype)initWithServerId:(UInt64)serverId
cdnKey:(NSString *)cdnKey
cdnNumber:(UInt32)cdnNumber
encryptionKey:(NSData *)encryptionKey
byteCount:(UInt32)byteCount
contentType:(NSString *)contentType
clientUuid:(NSUUID *)clientUuid
sourceFilename:(nullable NSString *)sourceFilename
caption:(nullable NSString *)caption
attachmentType:(TSAttachmentType)attachmentType
albumMessageId:(nullable NSString *)albumMessageId
blurHash:(nullable NSString *)blurHash
uploadTimestamp:(unsigned long long)uploadTimestamp
videoDuration:(nullable NSNumber *)videoDuration NS_UNAVAILABLE;
- (instancetype)initAttachmentWithContentType:(NSString *)contentType
byteCount:(UInt32)byteCount
sourceFilename:(nullable NSString *)sourceFilename
caption:(nullable NSString *)caption
attachmentType:(TSAttachmentType)attachmentType
albumMessageId:(nullable NSString *)albumMessageId NS_UNAVAILABLE;
- (instancetype)initWithPointer:(TSAttachmentPointer *)pointer
transaction:(SDSAnyReadTransaction *)transaction NS_UNAVAILABLE;
- (instancetype)initWithGrdbId:(int64_t)grdbId
uniqueId:(NSString *)uniqueId
albumMessageId:(nullable NSString *)albumMessageId
attachmentSchemaVersion:(NSUInteger)attachmentSchemaVersion
attachmentType:(TSAttachmentType)attachmentType
blurHash:(nullable NSString *)blurHash
byteCount:(unsigned int)byteCount
caption:(nullable NSString *)caption
cdnKey:(NSString *)cdnKey
cdnNumber:(unsigned int)cdnNumber
clientUuid:(nullable NSString *)clientUuid
contentType:(NSString *)contentType
encryptionKey:(nullable NSData *)encryptionKey
serverId:(unsigned long long)serverId
sourceFilename:(nullable NSString *)sourceFilename
uploadTimestamp:(unsigned long long)uploadTimestamp
videoDuration:(nullable NSNumber *)videoDuration NS_UNAVAILABLE;
- (nullable instancetype)initWithCoder:(NSCoder *)coder NS_DESIGNATED_INITIALIZER;
- (instancetype)initWithServerId:(UInt64)serverId
cdnKey:(NSString *)cdnKey
cdnNumber:(UInt32)cdnNumber
key:(NSData *)key
digest:(nullable NSData *)digest
byteCount:(UInt32)byteCount
contentType:(NSString *)contentType
clientUuid:(NSUUID *)clientUuid
sourceFilename:(nullable NSString *)sourceFilename
caption:(nullable NSString *)caption
albumMessageId:(nullable NSString *)albumMessageId
attachmentType:(TSAttachmentType)attachmentType
mediaSize:(CGSize)mediaSize
blurHash:(nullable NSString *)blurHash
uploadTimestamp:(unsigned long long)uploadTimestamp
videoDuration:(nullable NSNumber *)videoDuration NS_DESIGNATED_INITIALIZER;
// --- CODE GENERATION MARKER
// This snippet is generated by /Scripts/sds_codegen/sds_generate.py. Do not manually edit it, instead run
// `sds_codegen.sh`.
// clang-format off
- (instancetype)initWithGrdbId:(int64_t)grdbId
uniqueId:(NSString *)uniqueId
albumMessageId:(nullable NSString *)albumMessageId
attachmentSchemaVersion:(NSUInteger)attachmentSchemaVersion
attachmentType:(TSAttachmentType)attachmentType
blurHash:(nullable NSString *)blurHash
byteCount:(unsigned int)byteCount
caption:(nullable NSString *)caption
cdnKey:(NSString *)cdnKey
cdnNumber:(unsigned int)cdnNumber
clientUuid:(nullable NSString *)clientUuid
contentType:(NSString *)contentType
encryptionKey:(nullable NSData *)encryptionKey
serverId:(unsigned long long)serverId
sourceFilename:(nullable NSString *)sourceFilename
uploadTimestamp:(unsigned long long)uploadTimestamp
videoDuration:(nullable NSNumber *)videoDuration
digest:(nullable NSData *)digest
lazyRestoreFragmentId:(nullable NSString *)lazyRestoreFragmentId
mediaSize:(CGSize)mediaSize
pointerType:(NSUInteger)pointerType
state:(TSAttachmentPointerState)state
NS_DESIGNATED_INITIALIZER NS_SWIFT_NAME(init(grdbId:uniqueId:albumMessageId:attachmentSchemaVersion:attachmentType:blurHash:byteCount:caption:cdnKey:cdnNumber:clientUuid:contentType:encryptionKey:serverId:sourceFilename:uploadTimestamp:videoDuration:digest:lazyRestoreFragmentId:mediaSize:pointerType:state:));
// clang-format on
// --- CODE GENERATION MARKER
+ (nullable TSAttachmentPointer *)attachmentPointerFromProto:(SSKProtoAttachmentPointer *)attachmentProto
albumMessage:(nullable TSMessage *)message;
+ (NSArray<TSAttachmentPointer *> *)attachmentPointersFromProtos:
(NSArray<SSKProtoAttachmentPointer *> *)attachmentProtos
albumMessage:(TSMessage *)message;
#pragma mark - Update With... Methods
#if TESTABLE_BUILD
- (void)setAttachmentPointerStateDebug:(TSAttachmentPointerState)state;
#endif
- (void)updateWithAttachmentPointerState:(TSAttachmentPointerState)state
transaction:(SDSAnyWriteTransaction *)transaction
NS_SWIFT_NAME(updateAttachmentPointerState(_:transaction:));
- (void)updateAttachmentPointerStateFrom:(TSAttachmentPointerState)oldState
to:(TSAttachmentPointerState)newState
transaction:(SDSAnyWriteTransaction *)transaction
NS_SWIFT_NAME(updateAttachmentPointerState(from:to:transaction:));
@end
NS_ASSUME_NONNULL_END