From aa5e6b456e1681a51bed39c66ef942fdde3be8c6 Mon Sep 17 00:00:00 2001 From: Matthew Chen Date: Mon, 5 Nov 2018 08:58:22 -0500 Subject: [PATCH 1/2] Preserve ordering in incremental diffs. --- .../ConversationView/ConversationViewModel.m | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/Signal/src/ViewControllers/ConversationView/ConversationViewModel.m b/Signal/src/ViewControllers/ConversationView/ConversationViewModel.m index a557e7805..d5a46e05c 100644 --- a/Signal/src/ViewControllers/ConversationView/ConversationViewModel.m +++ b/Signal/src/ViewControllers/ConversationView/ConversationViewModel.m @@ -654,13 +654,12 @@ static const int kYapDatabaseRangeMinLength = 0; NSSet *newItemIdSet = [NSSet setWithArray:newItemIdList]; // We use sets and dictionaries here to ensure perf. - NSMutableSet *deletedItemIdSet = [oldItemIdSet mutableCopy]; + NSMutableOrderedSet *deletedItemIdSet = [NSMutableOrderedSet orderedSetWithArray:oldItemIdList]; [deletedItemIdSet minusSet:newItemIdSet]; - NSMutableSet *insertedItemIdSet = [newItemIdSet mutableCopy]; + NSMutableOrderedSet *insertedItemIdSet = [NSMutableOrderedSet orderedSetWithArray:newItemIdList]; [insertedItemIdSet minusSet:oldItemIdSet]; - NSArray *deletedItemIdList = [deletedItemIdSet.allObjects sortedArrayUsingSelector:@selector(compare:)]; - NSArray *insertedItemIdList = - [insertedItemIdSet.allObjects sortedArrayUsingSelector:@selector(compare:)]; + NSArray *deletedItemIdList = [deletedItemIdSet.array copy]; + NSArray *insertedItemIdList = [insertedItemIdSet.array copy]; // Try to generate a series of "update items" that safely transform // the "old item list" into the "new item list". From 2ca32fddcce206e82916e7e9fc0f60321d2f7e27 Mon Sep 17 00:00:00 2001 From: Matthew Chen Date: Mon, 5 Nov 2018 09:01:56 -0500 Subject: [PATCH 2/2] Preserve ordering in incremental diffs. --- .../src/ViewControllers/ConversationView/ConversationViewModel.m | 1 + 1 file changed, 1 insertion(+) diff --git a/Signal/src/ViewControllers/ConversationView/ConversationViewModel.m b/Signal/src/ViewControllers/ConversationView/ConversationViewModel.m index d5a46e05c..f6d3774ef 100644 --- a/Signal/src/ViewControllers/ConversationView/ConversationViewModel.m +++ b/Signal/src/ViewControllers/ConversationView/ConversationViewModel.m @@ -654,6 +654,7 @@ static const int kYapDatabaseRangeMinLength = 0; NSSet *newItemIdSet = [NSSet setWithArray:newItemIdList]; // We use sets and dictionaries here to ensure perf. + // We use NSMutableOrderedSet to preserve item ordering. NSMutableOrderedSet *deletedItemIdSet = [NSMutableOrderedSet orderedSetWithArray:oldItemIdList]; [deletedItemIdSet minusSet:newItemIdSet]; NSMutableOrderedSet *insertedItemIdSet = [NSMutableOrderedSet orderedSetWithArray:newItemIdList];