Emit notification when message is read.

We observe this in Signal to remove notifications for messages that were
read remotely.

// FREEBIE
pull/1/head
Michael Kirk 9 years ago
parent 800e2a9541
commit 27dfb59a0c

@ -6,9 +6,9 @@ NS_ASSUME_NONNULL_BEGIN
@interface OWSReadReceiptObserver : NSObject @interface OWSReadReceiptObserver : NSObject
- (instancetype)initWithMessagesManager:(TSMessagesManager *)messagesManager; - (instancetype)initWithMessagesManager:(TSMessagesManager *)messagesManager NS_DESIGNATED_INITIALIZER;
- (void)startObserving; - (void)startObserving;
@end @end
NS_ASSUME_NONNULL_END NS_ASSUME_NONNULL_END

@ -19,6 +19,16 @@ NS_ASSUME_NONNULL_BEGIN
@implementation OWSReadReceiptObserver @implementation OWSReadReceiptObserver
- (void)dealloc
{
[[NSNotificationCenter defaultCenter] removeObserver:self];
}
- (instancetype)init
{
return [self initWithMessagesManager:[TSMessagesManager sharedManager]];
}
- (instancetype)initWithMessagesManager:(TSMessagesManager *)messagesManager - (instancetype)initWithMessagesManager:(TSMessagesManager *)messagesManager
{ {
self = [super init]; self = [super init];

@ -6,6 +6,8 @@ NS_ASSUME_NONNULL_BEGIN
@class OWSReadReceipt; @class OWSReadReceipt;
@class TSIncomingMessage; @class TSIncomingMessage;
extern NSString *const OWSReadReceiptsProcessorMarkedMessageAsReadNotification;
@interface OWSReadReceiptsProcessor : NSObject @interface OWSReadReceiptsProcessor : NSObject
- (instancetype)initWithReadReceiptProtos:(NSArray<OWSSignalServiceProtosSyncMessageRead *> *)readReceiptProtos; - (instancetype)initWithReadReceiptProtos:(NSArray<OWSSignalServiceProtosSyncMessageRead *> *)readReceiptProtos;
@ -17,4 +19,4 @@ NS_ASSUME_NONNULL_BEGIN
@end @end
NS_ASSUME_NONNULL_END NS_ASSUME_NONNULL_END

@ -8,6 +8,9 @@
NS_ASSUME_NONNULL_BEGIN NS_ASSUME_NONNULL_BEGIN
NSString *const OWSReadReceiptsProcessorMarkedMessageAsReadNotification =
@"OWSReadReceiptsProcessorMarkedMessageAsReadNotification";
@interface OWSReadReceiptsProcessor () @interface OWSReadReceiptsProcessor ()
@property (nonatomic, readonly) NSArray<OWSReadReceipt *> *readReceipts; @property (nonatomic, readonly) NSArray<OWSReadReceipt *> *readReceipts;
@ -74,6 +77,9 @@ NS_ASSUME_NONNULL_BEGIN
[message markAsReadFromReadReceipt]; [message markAsReadFromReadReceipt];
// If it was previously saved, no need to keep it around any longer. // If it was previously saved, no need to keep it around any longer.
[readReceipt remove]; [readReceipt remove];
[[NSNotificationCenter defaultCenter]
postNotificationName:OWSReadReceiptsProcessorMarkedMessageAsReadNotification
object:message];
} else { } else {
DDLogDebug(@"%@ Received read receipt for an unkown message. Saving it for later.", self.tag); DDLogDebug(@"%@ Received read receipt for an unkown message. Saving it for later.", self.tag);
[readReceipt save]; [readReceipt save];

Loading…
Cancel
Save