session-ios/SessionMessagingKit/Messages/Signal/TSInfoMessage.m
Morgan Pretty 1b3f6c0ca6 Minor tweaks to the message request banner on the HomeVC
Fixed the unread message counting for message requests
Updated the message request banner to indicate the number of message requests with an unread message
Updated the message request banner to automatically disappear if the user has no unread message requests
Renamed a variable for ReadReceipt management to make it a bit more self-documenting (it looked like it would trigger a read receipt to be sent regardless of the setting)
2022-03-01 17:25:53 +11:00

153 lines
3.9 KiB
Objective-C

//
// Copyright (c) 2019 Open Whisper Systems. All rights reserved.
//
#import "TSInfoMessage.h"
#import "SSKEnvironment.h"
#import <YapDatabase/YapDatabaseConnection.h>
#import <SessionUtilitiesKit/SessionUtilitiesKit.h>
NS_ASSUME_NONNULL_BEGIN
NSUInteger TSInfoMessageSchemaVersion = 1;
@interface TSInfoMessage ()
@property (nonatomic, getter=wasRead) BOOL read;
@property (nonatomic, readonly) NSUInteger infoMessageSchemaVersion;
@end
#pragma mark -
@implementation TSInfoMessage
- (instancetype)initWithCoder:(NSCoder *)coder
{
self = [super initWithCoder:coder];
if (!self) {
return self;
}
if (self.infoMessageSchemaVersion < 1) {
_read = YES;
}
_infoMessageSchemaVersion = TSInfoMessageSchemaVersion;
if (self.isDynamicInteraction) {
self.read = YES;
}
return self;
}
- (instancetype)initWithTimestamp:(uint64_t)timestamp
inThread:(TSThread *)thread
messageType:(TSInfoMessageType)infoMessage
{
// MJK TODO - remove senderTimestamp
self = [super initMessageWithTimestamp:timestamp
inThread:thread
messageBody:nil
attachmentIds:@[]
expiresInSeconds:0
expireStartedAt:0
quotedMessage:nil
linkPreview:nil
openGroupInvitationName:nil
openGroupInvitationURL:nil
serverHash:nil];
if (!self) {
return self;
}
_messageType = infoMessage;
_infoMessageSchemaVersion = TSInfoMessageSchemaVersion;
if (self.isDynamicInteraction) {
self.read = YES;
}
return self;
}
- (instancetype)initWithTimestamp:(uint64_t)timestamp
inThread:(TSThread *)thread
messageType:(TSInfoMessageType)infoMessage
customMessage:(NSString *)customMessage
{
self = [self initWithTimestamp:timestamp inThread:thread messageType:infoMessage];
if (self) {
_customMessage = customMessage;
}
return self;
}
- (instancetype)initWithTimestamp:(uint64_t)timestamp
inThread:(TSThread *)thread
messageType:(TSInfoMessageType)infoMessage
unregisteredRecipientId:(NSString *)unregisteredRecipientId
{
self = [self initWithTimestamp:timestamp inThread:thread messageType:infoMessage];
if (self) {
_unregisteredRecipientId = unregisteredRecipientId;
}
return self;
}
- (OWSInteractionType)interactionType
{
return OWSInteractionType_Info;
}
- (NSString *)previewTextWithTransaction:(YapDatabaseReadTransaction *)transaction
{
switch (_messageType) {
case TSInfoMessageTypeGroupCreated:
return NSLocalizedString(@"GROUP_CREATED", @"");
case TSInfoMessageTypeGroupCurrentUserLeft:
return NSLocalizedString(@"GROUP_YOU_LEFT", @"");
case TSInfoMessageTypeGroupUpdated:
return _customMessage != nil ? _customMessage : NSLocalizedString(@"GROUP_UPDATED", @"");
case TSInfoMessageTypeMessageRequestAccepted:
return NSLocalizedString(@"MESSAGE_REQUESTS_ACCEPTED", @"");
default:
break;
}
return @"Unknown Info Message Type";
}
#pragma mark - OWSReadTracking
- (BOOL)shouldAffectUnreadCounts
{
return NO;
}
- (uint64_t)expireStartedAt
{
return 0;
}
- (void)markAsReadAtTimestamp:(uint64_t)readTimestamp
trySendReadReceipt:(BOOL)trySendReadReceipt
transaction:(YapDatabaseReadWriteTransaction *)transaction
{
if (_read) {
return;
}
_read = YES;
[self saveWithTransaction:transaction];
// Ignore trySendReadReceipt, it doesn't apply to info messages.
}
@end
NS_ASSUME_NONNULL_END