mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-12-24 07:05:35 +00:00
_ASHierarchyChangeSet: Exclude item-level changes that are redundant with section-level changes
This commit is contained in:
@@ -34,13 +34,6 @@ typedef NS_ENUM(NSInteger, _ASHierarchyChangeType) {
|
||||
|
||||
@interface _ASHierarchyChangeSet : NSObject
|
||||
|
||||
@property (nonatomic, strong, readonly) NSIndexSet *deletedSections;
|
||||
@property (nonatomic, strong, readonly) NSIndexSet *insertedSections;
|
||||
@property (nonatomic, strong, readonly) NSIndexSet *reloadedSections;
|
||||
@property (nonatomic, strong, readonly) NSArray *insertedItems;
|
||||
@property (nonatomic, strong, readonly) NSArray *deletedItems;
|
||||
@property (nonatomic, strong, readonly) NSArray *reloadedItems;
|
||||
|
||||
@property (nonatomic, readonly) BOOL completed;
|
||||
|
||||
/// Call this once the change set has been constructed to prevent future modifications to the changeset. Calling this more than once is a programmer error.
|
||||
|
||||
@@ -17,6 +17,9 @@
|
||||
Assumes: `changes` is [_ASHierarchySectionChange] all with the same changeType
|
||||
*/
|
||||
+ (void)sortAndCoalesceChanges:(NSMutableArray *)changes;
|
||||
|
||||
/// Returns all the indexes from all the `indexSet`s of the given `_ASHierarchySectionChange` objects.
|
||||
+ (NSMutableIndexSet *)allIndexesInChanges:(NSArray *)changes;
|
||||
@end
|
||||
|
||||
@interface _ASHierarchyItemChange ()
|
||||
@@ -40,26 +43,12 @@
|
||||
|
||||
@end
|
||||
|
||||
@implementation _ASHierarchyChangeSet {
|
||||
NSMutableIndexSet *_deletedSections;
|
||||
NSMutableIndexSet *_insertedSections;
|
||||
NSMutableIndexSet *_reloadedSections;
|
||||
NSMutableArray *_insertedItems;
|
||||
NSMutableArray *_deletedItems;
|
||||
NSMutableArray *_reloadedItems;
|
||||
}
|
||||
@implementation _ASHierarchyChangeSet
|
||||
|
||||
- (instancetype)init
|
||||
{
|
||||
self = [super init];
|
||||
if (self) {
|
||||
_deletedSections = [NSMutableIndexSet new];
|
||||
_insertedSections = [NSMutableIndexSet new];
|
||||
_reloadedSections = [NSMutableIndexSet new];
|
||||
|
||||
_deletedItems = [NSMutableArray new];
|
||||
_insertedItems = [NSMutableArray new];
|
||||
_reloadedItems = [NSMutableArray new];
|
||||
|
||||
_insertItemChanges = [NSMutableArray new];
|
||||
_deleteItemChanges = [NSMutableArray new];
|
||||
@@ -172,9 +161,16 @@
|
||||
[_ASHierarchySectionChange sortAndCoalesceChanges:_deleteSectionChanges];
|
||||
[_ASHierarchySectionChange sortAndCoalesceChanges:_insertSectionChanges];
|
||||
[_ASHierarchySectionChange sortAndCoalesceChanges:_reloadSectionChanges];
|
||||
[_ASHierarchyItemChange sortAndCoalesceChanges:_deleteItemChanges ignoringChangesInSections:_deletedSections];
|
||||
[_ASHierarchyItemChange sortAndCoalesceChanges:_reloadItemChanges ignoringChangesInSections:_reloadedSections];
|
||||
[_ASHierarchyItemChange sortAndCoalesceChanges:_insertItemChanges ignoringChangesInSections:_insertedSections];
|
||||
|
||||
// Item deletes in deleted sections need not be reported.
|
||||
NSIndexSet *deletedSections = [_ASHierarchySectionChange allIndexesInChanges:_deleteSectionChanges];
|
||||
[_ASHierarchyItemChange sortAndCoalesceChanges:_deleteItemChanges ignoringChangesInSections:deletedSections];
|
||||
|
||||
// Item reloads/inserts in reloaded/inserted sections need not be reported.
|
||||
NSMutableIndexSet *reloadedAndInsertedSections = [_ASHierarchySectionChange allIndexesInChanges:_reloadSectionChanges];
|
||||
[reloadedAndInsertedSections addIndexes:[_ASHierarchySectionChange allIndexesInChanges:_insertSectionChanges]];
|
||||
[_ASHierarchyItemChange sortAndCoalesceChanges:_reloadItemChanges ignoringChangesInSections:reloadedAndInsertedSections];
|
||||
[_ASHierarchyItemChange sortAndCoalesceChanges:_insertItemChanges ignoringChangesInSections:reloadedAndInsertedSections];
|
||||
}
|
||||
}
|
||||
|
||||
@@ -249,6 +245,15 @@
|
||||
[changes setArray:result];
|
||||
}
|
||||
|
||||
+ (NSMutableIndexSet *)allIndexesInChanges:(NSArray *)changes
|
||||
{
|
||||
NSMutableIndexSet *indexes = [NSMutableIndexSet indexSet];
|
||||
for (_ASHierarchySectionChange *change in changes) {
|
||||
[indexes addIndexes:change.indexSet];
|
||||
}
|
||||
return indexes;
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
@implementation _ASHierarchyItemChange
|
||||
|
||||
Reference in New Issue
Block a user