Remove saveFriendRequestStatus in TSThread.

pull/175/head
Mikunj 5 years ago
parent 25ae8ca3ba
commit b1345104da

@ -421,8 +421,8 @@ typedef enum : NSUInteger {
name:UIKeyboardDidChangeFrameNotification
object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(handleThreadFriendRequestStatusChangedNotification:)
name:NSNotification.threadFriendRequestStatusChanged
selector:@selector(handleUserFriendRequestStatusChangedNotification:)
name:NSNotification.userFriendRequestStatusChanged
object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(handleThreadSessionRestoreDevicesChangedNotifiaction:)
@ -529,17 +529,29 @@ typedef enum : NSUInteger {
[self resetContentAndLayout];
}
- (void)handleThreadFriendRequestStatusChangedNotification:(NSNotification *)notification
- (void)handleUserFriendRequestStatusChangedNotification:(NSNotification *)notification
{
// Check thread
NSString *threadID = (NSString *)notification.object;
if (![threadID isEqualToString:self.thread.uniqueId]) { return; }
// Ensure thread instance is up to date
[self.thread reload];
// Update UI
[self.viewItems.lastObject clearCachedLayoutState];
[self updateInputToolbar];
[self resetContentAndLayout];
NSString *hexEncodedPublicKey = (NSString *)notification.object;
if (self.thread.isGroupThread) { return; }
__block BOOL shouldReload = [self.thread.contactIdentifier isEqualToString:hexEncodedPublicKey];
// Check to see if this is a linked device
if (![self.thread.contactIdentifier isEqualToString:hexEncodedPublicKey]) {
[OWSPrimaryStorage.sharedManager.dbReadConnection readWithBlock:^(YapDatabaseReadTransaction *transaction) {
NSSet<NSString *> *linkedDevices = [LKDatabaseUtilities getLinkedDeviceHexEncodedPublicKeysFor:self.thread.contactIdentifier in:transaction];
shouldReload = [linkedDevices containsObject:hexEncodedPublicKey];
}];
}
if (shouldReload) {
// Ensure thread instance is up to date
[self.thread reload];
// Update UI
[self.viewItems.lastObject clearCachedLayoutState];
[self updateInputToolbar];
[self resetContentAndLayout];
}
}
- (void)handleThreadSessionRestoreDevicesChangedNotifiaction:(NSNotification *)notification

@ -19,7 +19,7 @@
#import <SignalServiceKit/OWSBlockingManager.h>
#import <SignalServiceKit/OWSFileSystem.h>
#import <SignalServiceKit/OWSMessageSender.h>
#import <SignalServiceKit/OWSPrimaryStorage.h>
#import <SignalServiceKit/OWSPrimaryStorage+Loki.h>
#import <SignalServiceKit/OWSProfileKeyMessage.h>
#import <SignalServiceKit/OWSRequestBuilder.h>
#import <SignalServiceKit/OWSSignalService.h>
@ -920,8 +920,8 @@ typedef void (^ProfileManagerFailureBlock)(NSError *error);
TSGroupThread *groupThread = (TSGroupThread *)thread;
NSData *groupId = groupThread.groupModel.groupId;
return [self isGroupIdInProfileWhitelist:groupId];
} else if (thread.friendRequestStatus == LKThreadFriendRequestStatusFriends) {
return true;
} else if ([LKFriendRequestProtocol isFriendsWithLinkedDevicesOfHexEncodedPublicKey:thread.contactIdentifier]) {
return true
} else {
NSString *recipientId = thread.contactIdentifier;
return [self isUserInProfileWhitelist:recipientId];

@ -29,22 +29,6 @@ extern ConversationColorName const ConversationColorNameSteel;
extern ConversationColorName const kConversationColorName_Default;
// TODO: Remove this once we don't use it
typedef NS_ENUM(NSInteger, LKThreadFriendRequestStatus) {
/// New conversation; no messages sent or received.
LKThreadFriendRequestStatusNone,
/// This state is used to lock the input early while sending.
LKThreadFriendRequestStatusRequestSending,
/// Friend request sent; awaiting response.
LKThreadFriendRequestStatusRequestSent,
/// Friend request received; awaiting user input.
LKThreadFriendRequestStatusRequestReceived,
/// We are friends with the other user in this thread.
LKThreadFriendRequestStatusFriends,
/// A friend request was sent, but it timed out (i.e. the other user didn't accept within the allocated time).
LKThreadFriendRequestStatusRequestExpired
} __deprecated_enum_msg("Use LKFriendRequestStatus instead");
/**
* TSThread is the superclass of TSContactThread and TSGroupThread
*/
@ -205,8 +189,6 @@ typedef NS_ENUM(NSInteger, LKThreadFriendRequestStatus) {
#pragma mark - Loki Friend Request Handling
- (void)saveFriendRequestStatus:(LKThreadFriendRequestStatus)friendRequestStatus withTransaction:(YapDatabaseReadWriteTransaction *_Nullable)transaction __deprecated_msg("use OWSPrimaryStorate.setFriendRequestStatus instead");
/**
Remove any outgoing friend request message which failed to send
*/

@ -92,13 +92,6 @@ ConversationColorName const kConversationColorName_Default = ConversationColorNa
} else {
_conversationColorName = [self.class stableColorNameForNewConversationWithString:self.uniqueId];
}
// Loki: Friend request logic doesn't apply to group chats
if (self.isGroupThread) {
_friendRequestStatus = LKThreadFriendRequestStatusFriends;
} else {
_friendRequestStatus = LKThreadFriendRequestStatusNone;
}
}
return self;
@ -730,7 +723,8 @@ ConversationColorName const kConversationColorName_Default = ConversationColorNa
- (void)removeOldFriendRequestMessagesIfNeeded:(OWSInteractionType)interactionType withTransaction:(YapDatabaseReadWriteTransaction *)transaction
{
// If we're friends with the person then we don't need to remove any friend request messages
if (self.friendRequestStatus == LKThreadFriendRequestStatusFriends) { return; }
if (self.isGroupThread) { return; }
if ([LKFriendRequestProtocol isFriendsWithLinkedDevicesOfHexEncodedPublicKey:self.contactIdentifier]) { return; }
NSMutableArray<NSString *> *idsToRemove = [NSMutableArray new];
__block TSMessage *_Nullable messageToKeep = nil; // We want to keep this interaction and not remove it
@ -774,55 +768,6 @@ ConversationColorName const kConversationColorName_Default = ConversationColorNa
}
}
- (void)saveFriendRequestStatus:(LKThreadFriendRequestStatus)friendRequestStatus withTransaction:(YapDatabaseReadWriteTransaction *_Nullable)transaction
{
self.friendRequestStatus = friendRequestStatus;
[LKLogger print:[NSString stringWithFormat:@"[Loki] Setting thread friend request status to %@.", self.friendRequestStatusDescription]];
void (^postNotification)() = ^() {
[NSNotificationCenter.defaultCenter postNotificationName:NSNotification.threadFriendRequestStatusChanged object:self.uniqueId];
};
if (transaction == nil) {
[self save];
[self.dbReadWriteConnection flushTransactionsWithCompletionQueue:dispatch_get_main_queue() completionBlock:^{ postNotification(); }];
} else {
[self saveWithTransaction:transaction];
[transaction.connection flushTransactionsWithCompletionQueue:dispatch_get_main_queue() completionBlock:^{ postNotification(); }];
}
}
- (NSString *)friendRequestStatusDescription
{
switch (self.friendRequestStatus) {
case LKThreadFriendRequestStatusNone: return @"none";
case LKThreadFriendRequestStatusRequestSending: return @"sending";
case LKThreadFriendRequestStatusRequestSent: return @"sent";
case LKThreadFriendRequestStatusRequestReceived: return @"received";
case LKThreadFriendRequestStatusFriends: return @"friends";
case LKThreadFriendRequestStatusRequestExpired: return @"expired";
}
}
- (BOOL)hasPendingFriendRequest
{
return self.friendRequestStatus == LKThreadFriendRequestStatusRequestSending || self.friendRequestStatus == LKThreadFriendRequestStatusRequestSent
|| self.friendRequestStatus == LKThreadFriendRequestStatusRequestReceived;
}
- (BOOL)isContactFriend
{
return self.friendRequestStatus == LKThreadFriendRequestStatusFriends;
}
- (BOOL)hasCurrentUserSentFriendRequest
{
return self.friendRequestStatus == LKThreadFriendRequestStatusRequestSent;
}
- (BOOL)hasCurrentUserReceivedFriendRequest
{
return self.friendRequestStatus == LKThreadFriendRequestStatusRequestReceived;
}
@end
NS_ASSUME_NONNULL_END

@ -236,6 +236,9 @@
- (void)setFriendRequestStatus:(LKFriendRequestStatus)friendRequestStatus forContact:(NSString *)hexEncodedPublicKey transaction:(YapDatabaseReadWriteTransaction *)transaction {
[transaction setObject:@(friendRequestStatus) forKey:hexEncodedPublicKey inCollection:LKFriendRequestCollection];
[transaction addCompletionQueue:dispatch_get_main_queue() completionBlock:^{
[NSNotificationCenter.defaultCenter postNotificationName:NSNotification.userFriendRequestStatusChanged object:hexEncodedPublicKey];
}];
}
@end

@ -6,6 +6,7 @@
public final class FriendRequestExpirationJob : NSObject {
private let databaseConnection: YapDatabaseConnection
private let messageFinder = ExpiringFriendRequestFinder()
private let storage: OWSPrimaryStorage
// These properties should only be accessed on the main thread.
private var hasStarted = false
@ -19,6 +20,7 @@ public final class FriendRequestExpirationJob : NSObject {
/// Create a `FriendRequestExpireJob`.
/// This will create an auto-running job which will set friend requests to expired.
@objc public init(withPrimaryStorage primaryStorage: OWSPrimaryStorage) {
storage = primaryStorage
databaseConnection = primaryStorage.newDatabaseConnection()
super.init()
@ -108,6 +110,7 @@ public final class FriendRequestExpirationJob : NSObject {
strongSelf.databaseConnection.readWrite { transaction in
strongSelf.messageFinder.enumurateMessagesPendingExpiration(with: { message in
guard message.thread is TSContactThread else { return }
// Sanity check
guard message.friendRequestExpiresAt <= now else {
@ -123,7 +126,7 @@ public final class FriendRequestExpirationJob : NSObject {
}
// Loki: Expire the friend request message
message.thread.saveFriendRequestStatus(.requestExpired, with: transaction)
strongSelf.storage.setFriendRequestStatus(.requestExpired, for: message.thread.contactIdentifier()!, transaction: transaction)
message.saveFriendRequestStatus(.expired, with: transaction)
message.saveFriendRequestExpires(at: 0, with: transaction)
}, transaction: transaction)

@ -22,6 +22,19 @@ public final class FriendRequestProtocol : NSObject {
}
// MARK: - General
@objc(isFriendsWithLinkedDevicesOfHexEncodedPublicKey:)
public static func isFriendsWithLinkedDevices(of hexEncodedPublicKey: String) -> Bool {
var isFriends = false
storage.dbReadConnection.read { transaction in
let linkedDevices = LokiDatabaseUtilities.getLinkedDeviceHexEncodedPublicKeys(for: hexEncodedPublicKey, in: transaction)
let friendRequestStatuses = linkedDevices.map { device in
return storage.getFriendRequestStatus(for: device, transaction: transaction)
}
isFriends = friendRequestStatuses.contains(where: { $0 == .friends })
}
return isFriends
}
@objc(shouldInputBarBeEnabledForThread:)
public static func shouldInputBarBeEnabled(for thread: TSThread) -> Bool {
// Friend requests have nothing to do with groups, so if this isn't a contact thread the input bar should be enabled

@ -3,7 +3,7 @@ public extension Notification.Name {
// State changes
public static let contactOnlineStatusChanged = Notification.Name("contactOnlineStatusChanged")
public static let threadFriendRequestStatusChanged = Notification.Name("threadFriendRequestStatusChanged")
public static let userFriendRequestStatusChanged = Notification.Name("userFriendRequestStatusChanged")
public static let groupThreadUpdated = Notification.Name("groupThreadUpdated")
public static let messageFriendRequestStatusChanged = Notification.Name("messageFriendRequestStatusChanged")
public static let threadDeleted = Notification.Name("threadDeleted")
@ -26,7 +26,7 @@ public extension Notification.Name {
// State changes
@objc public static let contactOnlineStatusChanged = Notification.Name.contactOnlineStatusChanged.rawValue as NSString
@objc public static let threadFriendRequestStatusChanged = Notification.Name.threadFriendRequestStatusChanged.rawValue as NSString
@objc public static let userFriendRequestStatusChanged = Notification.Name.userFriendRequestStatusChanged.rawValue as NSString
@objc public static let groupThreadUpdated = Notification.Name.groupThreadUpdated.rawValue as NSString
@objc public static let messageFriendRequestStatusChanged = Notification.Name.messageFriendRequestStatusChanged.rawValue as NSString
@objc public static let threadDeleted = Notification.Name.threadDeleted.rawValue as NSString

Loading…
Cancel
Save