mirror of
https://github.com/danog/Telegram.git
synced 2024-12-02 09:27:55 +01:00
84 lines
3.8 KiB
Objective-C
84 lines
3.8 KiB
Objective-C
#import "TGMediaAssetFetchResultChange.h"
|
|
|
|
#import <Photos/Photos.h>
|
|
|
|
@interface TGMediaAssetFetchResultChangeMovePair : NSObject
|
|
|
|
@property (nonatomic, assign) NSUInteger from;
|
|
@property (nonatomic, assign) NSUInteger to;
|
|
|
|
@end
|
|
|
|
|
|
@interface TGMediaAssetFetchResultChange ()
|
|
{
|
|
NSArray *_moves;
|
|
}
|
|
@end
|
|
|
|
@implementation TGMediaAssetFetchResultChange
|
|
|
|
- (void)enumerateMovesWithBlock:(void (^)(NSUInteger, NSUInteger))handler
|
|
{
|
|
if (handler == nil)
|
|
return;
|
|
|
|
for (TGMediaAssetFetchResultChangeMovePair *move in _moves)
|
|
handler(move.from, move.to);
|
|
}
|
|
|
|
+ (instancetype)changeWithPHFetchResultChangeDetails:(PHFetchResultChangeDetails *)changeDetails reversed:(bool)reversed
|
|
{
|
|
if (changeDetails == nil)
|
|
return nil;
|
|
|
|
TGMediaAssetFetchResultChange *change = [[TGMediaAssetFetchResultChange alloc] init];
|
|
change->_fetchResultBeforeChanges = [[TGMediaAssetFetchResult alloc] initWithPHFetchResult:changeDetails.fetchResultBeforeChanges reversed:reversed];
|
|
change->_fetchResultAfterChanges = [[TGMediaAssetFetchResult alloc] initWithPHFetchResult:changeDetails.fetchResultAfterChanges reversed:reversed];
|
|
change->_hasIncrementalChanges = changeDetails.hasIncrementalChanges;
|
|
change->_removedIndexes = [self transponedIndexSet:changeDetails.removedIndexes reversed:reversed initialCount:changeDetails.fetchResultBeforeChanges.count removedCount:0 insertedCount:0]; //changeDetails.removedIndexes;
|
|
change->_insertedIndexes = [self transponedIndexSet:changeDetails.insertedIndexes reversed:reversed initialCount:changeDetails.fetchResultBeforeChanges.count removedCount:changeDetails.removedIndexes.count insertedCount:changeDetails.insertedIndexes.count]; //changeDetails.insertedIndexes;
|
|
change->_updatedIndexes = [self transponedIndexSet:changeDetails.changedIndexes reversed:reversed initialCount:changeDetails.fetchResultBeforeChanges.count removedCount:changeDetails.removedIndexes.count insertedCount:changeDetails.insertedIndexes.count]; //changeDetails.changedIndexes;
|
|
change->_hasMoves = changeDetails.hasMoves;
|
|
|
|
if (changeDetails.hasMoves)
|
|
{
|
|
NSMutableArray *moves = [[NSMutableArray alloc] init];
|
|
[changeDetails enumerateMovesWithBlock:^(NSUInteger fromIndex, NSUInteger toIndex)
|
|
{
|
|
TGMediaAssetFetchResultChangeMovePair *move = [[TGMediaAssetFetchResultChangeMovePair alloc] init];
|
|
move.from = [self transponedIndex:fromIndex reversed:reversed initialCount:changeDetails.fetchResultBeforeChanges.count removedCount:change->_removedIndexes.count insertedCount:change->_insertedIndexes.count]; //fromIndex;
|
|
move.to = [self transponedIndex:toIndex reversed:reversed initialCount:changeDetails.fetchResultBeforeChanges.count removedCount:change->_removedIndexes.count insertedCount:change->_insertedIndexes.count];
|
|
[moves addObject:move];
|
|
}];
|
|
change->_moves = moves;
|
|
}
|
|
|
|
return change;
|
|
}
|
|
|
|
+ (NSInteger)transponedIndex:(NSInteger)index reversed:(bool)reversed initialCount:(NSInteger)initialCount removedCount:(NSInteger)removedCount insertedCount:(NSInteger)insertedCount
|
|
{
|
|
return reversed ? initialCount - removedCount + insertedCount - index - 1 : index;
|
|
}
|
|
|
|
+ (NSIndexSet *)transponedIndexSet:(NSIndexSet *)indexSet reversed:(bool)reversed initialCount:(NSInteger)initialCount removedCount:(NSInteger)removedCount insertedCount:(NSInteger)insertedCount
|
|
{
|
|
if (!reversed)
|
|
return indexSet;
|
|
|
|
NSMutableIndexSet *transponedIndexSet = [[NSMutableIndexSet alloc] init];
|
|
[indexSet enumerateIndexesUsingBlock:^(NSUInteger idx, __unused BOOL *stop)
|
|
{
|
|
[transponedIndexSet addIndex:[self transponedIndex:idx reversed:reversed initialCount:initialCount removedCount:removedCount insertedCount:insertedCount]];
|
|
}];
|
|
return transponedIndexSet;
|
|
}
|
|
|
|
@end
|
|
|
|
|
|
@implementation TGMediaAssetFetchResultChangeMovePair
|
|
|
|
@end
|