From 27dfb59a0c4656648db8272909f2ee84e159e899 Mon Sep 17 00:00:00 2001 From: Michael Kirk Date: Wed, 14 Sep 2016 12:21:34 -0400 Subject: [PATCH] Emit notification when message is read. We observe this in Signal to remove notifications for messages that were read remotely. // FREEBIE --- src/Devices/OWSReadReceiptObserver.h | 4 ++-- src/Devices/OWSReadReceiptObserver.m | 10 ++++++++++ src/Devices/OWSReadReceiptsProcessor.h | 4 +++- src/Devices/OWSReadReceiptsProcessor.m | 6 ++++++ 4 files changed, 21 insertions(+), 3 deletions(-) diff --git a/src/Devices/OWSReadReceiptObserver.h b/src/Devices/OWSReadReceiptObserver.h index d1c9d82ba..ce1e552cd 100644 --- a/src/Devices/OWSReadReceiptObserver.h +++ b/src/Devices/OWSReadReceiptObserver.h @@ -6,9 +6,9 @@ NS_ASSUME_NONNULL_BEGIN @interface OWSReadReceiptObserver : NSObject -- (instancetype)initWithMessagesManager:(TSMessagesManager *)messagesManager; +- (instancetype)initWithMessagesManager:(TSMessagesManager *)messagesManager NS_DESIGNATED_INITIALIZER; - (void)startObserving; @end -NS_ASSUME_NONNULL_END \ No newline at end of file +NS_ASSUME_NONNULL_END diff --git a/src/Devices/OWSReadReceiptObserver.m b/src/Devices/OWSReadReceiptObserver.m index a128e686b..bda0d195e 100644 --- a/src/Devices/OWSReadReceiptObserver.m +++ b/src/Devices/OWSReadReceiptObserver.m @@ -19,6 +19,16 @@ NS_ASSUME_NONNULL_BEGIN @implementation OWSReadReceiptObserver +- (void)dealloc +{ + [[NSNotificationCenter defaultCenter] removeObserver:self]; +} + +- (instancetype)init +{ + return [self initWithMessagesManager:[TSMessagesManager sharedManager]]; +} + - (instancetype)initWithMessagesManager:(TSMessagesManager *)messagesManager { self = [super init]; diff --git a/src/Devices/OWSReadReceiptsProcessor.h b/src/Devices/OWSReadReceiptsProcessor.h index 3a566a504..63973c0c5 100644 --- a/src/Devices/OWSReadReceiptsProcessor.h +++ b/src/Devices/OWSReadReceiptsProcessor.h @@ -6,6 +6,8 @@ NS_ASSUME_NONNULL_BEGIN @class OWSReadReceipt; @class TSIncomingMessage; +extern NSString *const OWSReadReceiptsProcessorMarkedMessageAsReadNotification; + @interface OWSReadReceiptsProcessor : NSObject - (instancetype)initWithReadReceiptProtos:(NSArray *)readReceiptProtos; @@ -17,4 +19,4 @@ NS_ASSUME_NONNULL_BEGIN @end -NS_ASSUME_NONNULL_END \ No newline at end of file +NS_ASSUME_NONNULL_END diff --git a/src/Devices/OWSReadReceiptsProcessor.m b/src/Devices/OWSReadReceiptsProcessor.m index 65d6765cd..1b69869d3 100644 --- a/src/Devices/OWSReadReceiptsProcessor.m +++ b/src/Devices/OWSReadReceiptsProcessor.m @@ -8,6 +8,9 @@ NS_ASSUME_NONNULL_BEGIN +NSString *const OWSReadReceiptsProcessorMarkedMessageAsReadNotification = + @"OWSReadReceiptsProcessorMarkedMessageAsReadNotification"; + @interface OWSReadReceiptsProcessor () @property (nonatomic, readonly) NSArray *readReceipts; @@ -74,6 +77,9 @@ NS_ASSUME_NONNULL_BEGIN [message markAsReadFromReadReceipt]; // If it was previously saved, no need to keep it around any longer. [readReceipt remove]; + [[NSNotificationCenter defaultCenter] + postNotificationName:OWSReadReceiptsProcessorMarkedMessageAsReadNotification + object:message]; } else { DDLogDebug(@"%@ Received read receipt for an unkown message. Saving it for later.", self.tag); [readReceipt save];