Debug & avoid write transaction

pull/183/head
nielsandriesse 4 years ago
parent 7e0435e009
commit f834850317

@ -532,33 +532,7 @@ NS_ASSUME_NONNULL_BEGIN
- (BOOL)shouldShowFriendRequestUIForMessage:(TSMessage *)message
{
if ([message isKindOfClass:TSOutgoingMessage.class]) {
return message.isFriendRequest;
} else {
if (message.isFriendRequest) {
// Only show the first friend request that was received
NSString *senderID = ((TSIncomingMessage *)message).authorId;
__block NSMutableSet<TSContactThread *> *linkedDeviceThreads;
[OWSPrimaryStorage.sharedManager.dbReadConnection readWithBlock:^(YapDatabaseReadTransaction *transaction) {
linkedDeviceThreads = [LKDatabaseUtilities getLinkedDeviceThreadsFor:senderID in:transaction].mutableCopy;
}];
NSMutableArray<TSIncomingMessage *> *allFriendRequestMessages = @[].mutableCopy;
for (TSContactThread *thread in linkedDeviceThreads) {
[thread enumerateInteractionsUsingBlock:^(TSInteraction *interaction) { // Starts a new write transaction internally
TSIncomingMessage *message = [interaction as:TSIncomingMessage.class];
if (message != nil && message.isFriendRequest) {
[allFriendRequestMessages addObject:message];
}
}];
}
[allFriendRequestMessages sortUsingComparator:^NSComparisonResult(TSIncomingMessage *lhs, TSIncomingMessage *rhs) {
return [@(lhs.timestamp) compare:@(rhs.timestamp)] == NSOrderedDescending;
}];
return [message.uniqueId isEqual:allFriendRequestMessages.firstObject.uniqueId];
} else {
return NO;
}
}
return message.isFriendRequest;
}
@end

@ -87,7 +87,7 @@ extern ConversationColorName const kConversationColorName_Default;
#pragma mark Interactions
- (void)enumerateInteractionsWithTransaction:(YapDatabaseReadWriteTransaction *)transaction usingBlock:(void (^)(TSInteraction *interaction, YapDatabaseReadTransaction *transaction))block;
- (void)enumerateInteractionsWithTransaction:(YapDatabaseReadTransaction *)transaction usingBlock:(void (^)(TSInteraction *interaction, YapDatabaseReadTransaction *transaction))block;
- (void)enumerateInteractionsUsingBlock:(void (^)(TSInteraction *interaction))block;

@ -249,7 +249,7 @@ ConversationColorName const kConversationColorName_Default = ConversationColorNa
/**
* Iterate over this thread's interactions
*/
- (void)enumerateInteractionsWithTransaction:(YapDatabaseReadWriteTransaction *)transaction
- (void)enumerateInteractionsWithTransaction:(YapDatabaseReadTransaction *)transaction
usingBlock:(void (^)(TSInteraction *interaction,
YapDatabaseReadTransaction *transaction))block
{
@ -268,7 +268,7 @@ ConversationColorName const kConversationColorName_Default = ConversationColorNa
*/
- (void)enumerateInteractionsUsingBlock:(void (^)(TSInteraction *interaction))block
{
[self.dbReadWriteConnection readWriteWithBlock:^(YapDatabaseReadWriteTransaction *transaction) {
[self.dbReadWriteConnection readWithBlock:^(YapDatabaseReadTransaction *transaction) {
[self enumerateInteractionsWithTransaction:transaction
usingBlock:^(
TSInteraction *interaction, YapDatabaseReadTransaction *transaction) {

@ -447,6 +447,7 @@ static const NSUInteger OWSMessageSchemaVersion = 4;
#pragma mark - Loki Friend Request Handling
// Left here for migration purposes
- (void)saveFriendRequestStatus:(LKMessageFriendRequestStatus)friendRequestStatus withTransaction:(YapDatabaseReadWriteTransaction *_Nullable)transaction
{
self.friendRequestStatus = friendRequestStatus;
@ -474,7 +475,14 @@ static const NSUInteger OWSMessageSchemaVersion = 4;
- (BOOL)isFriendRequest
{
return self.friendRequestExpiresAt != 0;
NSString *contactID = self.thread.contactIdentifier;
if (contactID == nil) { return NO; }
OWSPrimaryStorage *storage = OWSPrimaryStorage.sharedManager;
__block LKFriendRequestStatus friendRequestStatus;
[storage.dbReadConnection readWithBlock:^(YapDatabaseReadTransaction *transaction) {
friendRequestStatus = [storage getFriendRequestStatusForContact:contactID transaction:transaction];
}];
return friendRequestStatus != LKFriendRequestStatusFriends;
}
- (BOOL)hasFriendRequestStatusMessage

Loading…
Cancel
Save