Implement feedback

This commit is contained in:
Niels Andriesse 2019-05-16 14:31:53 +10:00
parent 3728638832
commit be7724b41b
5 changed files with 39 additions and 11 deletions

View file

@ -186,9 +186,7 @@ typedef void (^BuildOutgoingMessageCompletionBlock)(TSOutgoingMessage *savedMess
// Loki: If we're not friends then always set the message to a friend request message
// If we're friends then the assumption is that we have the other user's prekey bundle
TSThreadFriendRequestStatus friendRequestStatus = thread.friendRequestStatus;
BOOL isFriend = friendRequestStatus == TSThreadFriendRequestStatusFriends;
NSString *messageClassAsString = isFriend ? @"TSOutgoingMessage" : @"OWSFriendRequestMessage";
NSString *messageClassAsString = thread.isContactFriend ? @"TSOutgoingMessage" : @"OWSFriendRequestMessage";
Class messageClass = NSClassFromString(messageClassAsString);
TSOutgoingMessage *message =

View file

@ -53,7 +53,14 @@ typedef NS_ENUM(NSInteger, TSThreadFriendRequestStatus) {
@property (nonatomic) BOOL shouldThreadBeVisible;
@property (nonatomic, readonly) NSDate *creationDate;
@property (nonatomic, readonly) BOOL isArchivedByLegacyTimestampForSorting;
// Loki friend request handling
@property (nonatomic) TSThreadFriendRequestStatus friendRequestStatus;
/// Shorthand for checking that `friendRequestStatus` is `TSThreadFriendRequestStatusPendingSend`, `TSThreadFriendRequestStatusRequestSent`
/// or `TSThreadFriendRequestStatusRequestReceived`.
@property (nonatomic, readonly) BOOL hasPendingFriendRequest;
@property (nonatomic, readonly) BOOL isContactFriend;
@property (nonatomic, readonly) BOOL hasCurrentUserSentFriendRequest;
@property (nonatomic, readonly) BOOL hasCurrentUserReceivedFriendRequest;
/**
* Whether the object is a group thread or not.
@ -191,9 +198,6 @@ typedef NS_ENUM(NSInteger, TSThreadFriendRequestStatus) {
- (void)setFriendRequestStatus:(TSThreadFriendRequestStatus)friendRequestStatus withTransaction:(YapDatabaseReadWriteTransaction *_Nullable)transaction;
/// Shorthand for checking that `friendRequestStatus` is `TSThreadFriendRequestStatusPendingSend`, `TSThreadFriendRequestStatusRequestSent` or `TSThreadFriendRequestStatusRequestReceived`.
- (BOOL)hasPendingFriendRequest;
@end
NS_ASSUME_NONNULL_END

View file

@ -714,6 +714,21 @@ ConversationColorName const kConversationColorName_Default = ConversationColorNa
|| self.friendRequestStatus == TSThreadFriendRequestStatusRequestReceived;
}
- (BOOL)isContactFriend
{
return self.friendRequestStatus == TSThreadFriendRequestStatusFriends;
}
- (BOOL)hasCurrentUserSentFriendRequest
{
return self.friendRequestStatus == TSThreadFriendRequestStatusRequestSent;
}
- (BOOL)hasCurrentUserReceivedFriendRequest
{
return self.friendRequestStatus == TSThreadFriendRequestStatusRequestReceived;
}
@end
NS_ASSUME_NONNULL_END

View file

@ -1442,12 +1442,19 @@ NS_ASSUME_NONNULL_BEGIN
return;
}
// Loki:
// ========
if (envelope.type == SSKProtoEnvelopeTypeFriendRequest) {
[thread setFriendRequestStatus:TSThreadFriendRequestStatusRequestReceived withTransaction:transaction];
incomingMessage.isFriendRequest = YES;
} else if (incomingMessage.body == @"") { // Assumed to be an accept friend request message
if (thread.hasCurrentUserSentFriendRequest) {
[thread setFriendRequestStatus:TSThreadFriendRequestStatusFriends withTransaction:transaction];
} else {
[thread setFriendRequestStatus:TSThreadFriendRequestStatusRequestReceived withTransaction:transaction];
incomingMessage.isFriendRequest = YES; // Saved below
}
} else if (!thread.isContactFriend) {
[thread setFriendRequestStatus:TSThreadFriendRequestStatusFriends withTransaction:transaction];
}
// ========
[incomingMessage saveWithTransaction:transaction];

View file

@ -1117,12 +1117,16 @@ NSString *const OWSMessageSenderRateLimitedException = @"RateLimitedException";
BOOL isPoWRequired = YES; // TODO: Base on message type
[[LokiAPI objc_sendSignalMessage:signalMessage to:recipient.recipientId timestamp:message.timestamp requiringPoW:isPoWRequired]
.thenOn(OWSDispatch.sendingQueue, ^(id result) {
// Update the thread's friend request status if needed
// Loki
// ========
if (messageType == TSFriendRequestMessageType) {
[message.thread setFriendRequestStatus:TSThreadFriendRequestStatusRequestSent withTransaction:nil];
} else if (message.body == @"") { // Assumed to be an accept friend request message
} else if (thread.hasCurrentUserReceivedFriendRequest) {
// If the thread's current friend request state is TSThreadFriendRequestStatusRequestReceived, and we're sending a message,
// that means we're accepting the request. Declining a friend request doesn't send a message.
[message.thread setFriendRequestStatus:TSThreadFriendRequestStatusFriends withTransaction:nil];
}
// ========
// Invoke the completion handler
[self messageSendDidSucceed:messageSend
deviceMessages:deviceMessages