Mostly hook up friend request status logic

pull/15/head
Niels Andriesse 7 years ago
parent c3fe7fba50
commit fffb55540b

@ -115,14 +115,12 @@ NS_ASSUME_NONNULL_BEGIN
return self.viewItem.interaction.interactionType == OWSInteractionType_OutgoingMessage; return self.viewItem.interaction.interactionType == OWSInteractionType_OutgoingMessage;
} }
- (TSThreadFriendRequestState)friendRequestState { - (TSThreadFriendRequestStatus)friendRequestStatus {
return self.isIncoming ? TSThreadFriendRequestStateRequestReceived : TSThreadFriendRequestStateRequestSent; return self.message.thread.friendRequestStatus;
// return self.message.thread.friendRequestState;
} }
- (BOOL)isFriendRequest { - (BOOL)isFriendRequest {
return YES; return self.friendRequestStatus == TSThreadFriendRequestStatusRequestSent || self.friendRequestStatus == TSThreadFriendRequestStatusRequestReceived;
// return self.friendRequestState == TSThreadFriendRequestStateRequestSent || self.friendRequestState == TSThreadFriendRequestStateRequestReceived;
} }
- (BOOL)shouldHaveSendFailureBadge - (BOOL)shouldHaveSendFailureBadge
@ -217,9 +215,9 @@ NS_ASSUME_NONNULL_BEGIN
} }
if (self.isFriendRequest) { if (self.isFriendRequest) {
// At this point, self.friendRequestState should be either TSThreadFriendRequestStateRequestReceived, // At this point, self.friendRequestStatus should be either TSThreadFriendRequestStatusRequestReceived,
// TSThreadFriendRequestStatePendingSend or TSThreadFriendRequestStateRequestSent // TSThreadFriendRequestStatusPendingSend or TSThreadFriendRequestStatusRequestSent
NSString *rawKind = self.friendRequestState == TSThreadFriendRequestStateRequestReceived ? @"incoming" : @"outgoing"; NSString *rawKind = self.friendRequestStatus == TSThreadFriendRequestStatusRequestReceived ? @"incoming" : @"outgoing";
self.friendRequestView = [[FriendRequestView alloc] initWithRawKind:rawKind]; self.friendRequestView = [[FriendRequestView alloc] initWithRawKind:rawKind];
self.friendRequestView.message = self.message; self.friendRequestView.message = self.message;
self.friendRequestView.delegate = self.friendRequestViewDelegate; self.friendRequestView.delegate = self.friendRequestViewDelegate;

@ -30,19 +30,19 @@ extern ConversationColorName const ConversationColorNameSteel;
extern ConversationColorName const kConversationColorName_Default; extern ConversationColorName const kConversationColorName_Default;
// Loki: Friend request state // Loki: Friend request state
typedef NS_ENUM(NSInteger, TSThreadFriendRequestState) { typedef NS_ENUM(NSInteger, TSThreadFriendRequestStatus) {
// New conversation, no messages sent or received // New conversation, no messages sent or received
TSThreadFriendRequestStateNone, TSThreadFriendRequestStatusNone,
// This state is used to lock the input early while sending // This state is used to lock the input early while sending
TSThreadFriendRequestStatePendingSend, TSThreadFriendRequestStatusPendingSend,
// Friend request sent, awaiting response // Friend request sent, awaiting response
TSThreadFriendRequestStateRequestSent, TSThreadFriendRequestStatusRequestSent,
// Friend request received, awaiting user input // Friend request received, awaiting user input
TSThreadFriendRequestStateRequestReceived, TSThreadFriendRequestStatusRequestReceived,
// We are friends with the user of this thread // We are friends with the user of this thread
TSThreadFriendRequestStateFriends, TSThreadFriendRequestStatusFriends,
// Friend request sent but it timed out (user didn't accept within x time) // Friend request sent but it timed out (user didn't accept within x time)
TSThreadFriendRequestStateRequestExpired, TSThreadFriendRequestStatusRequestExpired
}; };
/** /**
@ -53,9 +53,7 @@ typedef NS_ENUM(NSInteger, TSThreadFriendRequestState) {
@property (nonatomic) BOOL shouldThreadBeVisible; @property (nonatomic) BOOL shouldThreadBeVisible;
@property (nonatomic, readonly) NSDate *creationDate; @property (nonatomic, readonly) NSDate *creationDate;
@property (nonatomic, readonly) BOOL isArchivedByLegacyTimestampForSorting; @property (nonatomic, readonly) BOOL isArchivedByLegacyTimestampForSorting;
@property (atomic, readonly) TSThreadFriendRequestStatus friendRequestStatus; // Loki
// Loki: The current friend request state with this thread
@property (atomic, readonly) TSThreadFriendRequestState friendRequestState;
/** /**
* Whether the object is a group thread or not. * Whether the object is a group thread or not.

@ -50,8 +50,6 @@ ConversationColorName const kConversationColorName_Default = ConversationColorNa
@property (nonatomic, copy, nullable) NSString *messageDraft; @property (nonatomic, copy, nullable) NSString *messageDraft;
@property (atomic, nullable) NSDate *mutedUntilDate; @property (atomic, nullable) NSDate *mutedUntilDate;
@property (atomic) TSThreadFriendRequestState friendRequestState;
// DEPRECATED - not used since migrating to sortId // DEPRECATED - not used since migrating to sortId
// but keeping these properties around to ease any pain in the back-forth // but keeping these properties around to ease any pain in the back-forth
// migration while testing. Eventually we can safely delete these as they aren't used anywhere. // migration while testing. Eventually we can safely delete these as they aren't used anywhere.
@ -86,9 +84,6 @@ ConversationColorName const kConversationColorName_Default = ConversationColorNa
if (self) { if (self) {
_creationDate = [NSDate date]; _creationDate = [NSDate date];
_messageDraft = nil; _messageDraft = nil;
// We are initially not friends
_friendRequestState = TSThreadFriendRequestStateNone;
NSString *_Nullable contactId = self.contactIdentifier; NSString *_Nullable contactId = self.contactIdentifier;
if (contactId.length > 0) { if (contactId.length > 0) {
@ -159,6 +154,8 @@ ConversationColorName const kConversationColorName_Default = ConversationColorNa
- (void)saveWithTransaction:(YapDatabaseReadWriteTransaction *)transaction - (void)saveWithTransaction:(YapDatabaseReadWriteTransaction *)transaction
{ {
[super saveWithTransaction:transaction]; [super saveWithTransaction:transaction];
[self updateFriendRequestStatusWithTransaction:transaction];
[SSKPreferences setHasSavedThreadWithValue:YES transaction:transaction]; [SSKPreferences setHasSavedThreadWithValue:YES transaction:transaction];
} }
@ -699,33 +696,44 @@ ConversationColorName const kConversationColorName_Default = ConversationColorNa
}]; }];
} }
# pragma mark - Loki Friend Request # pragma mark - Loki Friend Request Handling
- (void)updateFriendRequestStatusWithTransaction:(YapDatabaseReadWriteTransaction *)transaction
{
OWSLogInfo(@"[Loki] updateFriendRequestStatus");
NSUInteger numberOfInteractions = self.numberOfInteractions;
if (numberOfInteractions == 0) {
_friendRequestStatus = TSThreadFriendRequestStatusNone;
} else if (numberOfInteractions == 1) {
YapDatabaseViewTransaction *interactions = [transaction ext:TSMessageDatabaseViewExtensionName];
TSInteraction *interaction = [interactions firstObjectInGroup:self.uniqueId];
_friendRequestStatus = interaction.interactionType == OWSInteractionType_IncomingMessage ? TSThreadFriendRequestStatusRequestReceived : TSThreadFriendRequestStatusRequestSent;
} else {
_friendRequestStatus = TSThreadFriendRequestStatusFriends;
}
}
- (BOOL)isFriend - (BOOL)isFriend
{ {
return _friendRequestState == TSThreadFriendRequestStateFriends; return self.friendRequestStatus == TSThreadFriendRequestStatusFriends;
} }
- (BOOL)isPendingFriendRequest - (BOOL)isPendingFriendRequest
{ {
return ( return self.friendRequestStatus == TSThreadFriendRequestStatusPendingSend ||
_friendRequestState == TSThreadFriendRequestStatePendingSend || self.friendRequestStatus == TSThreadFriendRequestStatusRequestSent ||
_friendRequestState == TSThreadFriendRequestStateRequestSent || self.friendRequestStatus == TSThreadFriendRequestStatusRequestReceived;
_friendRequestState == TSThreadFriendRequestStateRequestReceived
);
} }
- (BOOL)hasSentFriendRequest - (BOOL)hasSentFriendRequest
{ {
return ( return self.friendRequestStatus == TSThreadFriendRequestStatusRequestSent ||
_friendRequestState == TSThreadFriendRequestStateRequestSent || self.friendRequestStatus == TSThreadFriendRequestStatusRequestExpired;
_friendRequestState == TSThreadFriendRequestStateRequestExpired
);
} }
- (BOOL)hasReceivedFriendRequest - (BOOL)hasReceivedFriendRequest
{ {
return _friendRequestState == TSThreadFriendRequestStateRequestReceived; return self.friendRequestStatus == TSThreadFriendRequestStatusRequestReceived;
} }
@end @end

Loading…
Cancel
Save