4
4
//
5
5
6
6
#import " PHAsset+PM_COMMON.h"
7
+ #import " PHAssetResource+PM_COMMON.h"
7
8
#if TARGET_OS_IOS || TARGET_OS_WATCH || TARGET_OS_TV
8
9
#import < MobileCoreServices/MobileCoreServices.h>
9
10
#else
@@ -64,11 +65,12 @@ - (NSString *)title {
64
65
65
66
- (NSString *)originalFilenameWithSubtype : (int )subtype {
66
67
if (@available (iOS 9.1 , *)) {
67
- if ([self isLivePhoto ] && subtype == PHAssetMediaSubtypePhotoLive) {
68
+ BOOL isLivePhotoSubtype = (subtype & PHAssetMediaSubtypePhotoLive) == PHAssetMediaSubtypePhotoLive;
69
+ if ([self isLivePhoto ] && isLivePhotoSubtype) {
68
70
return [self getLivePhotosResource ].originalFilename ;
69
71
}
70
72
}
71
- PHAssetResource *resource = [self getUntouchedResource ];
73
+ PHAssetResource *resource = [self getRawResource ];
72
74
if (resource) {
73
75
return resource.originalFilename ;
74
76
}
@@ -123,63 +125,64 @@ - (BOOL)videoIsAdjust:(NSArray<PHAssetResource *> *)resources {
123
125
return NO ;
124
126
}
125
127
126
- - (PHAssetResource *)getUntouchedResource {
128
+ - (PHAssetResource *)getRawResource {
127
129
NSArray <PHAssetResource *> *resources = [PHAssetResource assetResourcesForAsset: self ];
128
- if (resources.count == 0 ) {
129
- return nil ;
130
- }
131
-
132
- if (resources.count == 1 ) {
133
- return resources[0 ];
134
- }
135
-
136
130
for (PHAssetResource *res in resources) {
137
- if (self.mediaType == PHAssetMediaTypeImage
138
- && res.type == PHAssetResourceTypePhoto) {
131
+ if (self.isImage && res.isImage && res.type == PHAssetResourceTypePhoto) {
139
132
return res;
140
133
}
141
-
142
- if (self.mediaType == PHAssetMediaTypeVideo
143
- && res.type == PHAssetResourceTypeVideo) {
134
+ if (self.isVideo && res.isVideo && res.type == PHAssetResourceTypeVideo) {
135
+ return res;
136
+ }
137
+ if (self.isAudio && res.isAudio && res.type == PHAssetResourceTypeAudio) {
144
138
return res;
145
139
}
146
140
}
147
-
148
141
return nil ;
149
142
}
150
143
151
- - (PHAssetResource *)getAdjustResource {
144
+ - (PHAssetResource *)getCurrentResource {
152
145
NSArray <PHAssetResource *> *resources = [PHAssetResource assetResourcesForAsset: self ];
153
- if (resources.count == 0 ) {
146
+ NSMutableArray <PHAssetResource *> *filtered = [NSMutableArray array ];
147
+ for (PHAssetResource *res in resources) {
148
+ if (!res.isValid ) {
149
+ continue ;
150
+ }
151
+ BOOL isAllowedType = NO ;
152
+ if (self.isImage && res.isImage ) {
153
+ isAllowedType = res.type == PHAssetResourceTypePhoto ||
154
+ res.type == PHAssetResourceTypeAlternatePhoto ||
155
+ res.type == PHAssetResourceTypeFullSizePhoto;
156
+ } else if (self.isVideo && res.isVideo ) {
157
+ isAllowedType = res.type == PHAssetResourceTypeVideo ||
158
+ res.type == PHAssetResourceTypeFullSizeVideo ||
159
+ res.type == PHAssetResourceTypeFullSizePairedVideo;
160
+ } else if (self.isAudio && res.isAudio ) {
161
+ isAllowedType = res.type == PHAssetResourceTypeAudio;
162
+ }
163
+ if (isAllowedType) {
164
+ [filtered addObject: res];
165
+ }
166
+ }
167
+ if (filtered.count == 0 ) {
154
168
return nil ;
155
169
}
156
170
157
- if (resources .count == 1 ) {
171
+ if (filtered .count == 1 ) {
158
172
return resources[0 ];
159
173
}
160
174
161
- if (![self isAdjust ]) {
162
- for (PHAssetResource *res in resources) {
163
- if (self.mediaType == PHAssetMediaTypeImage
164
- && res.type == PHAssetResourceTypePhoto) {
165
- return res;
166
- }
167
-
168
- if (self.mediaType == PHAssetMediaTypeVideo
169
- && res.type == PHAssetResourceTypeVideo) {
170
- return res;
171
- }
175
+ for (PHAssetResource *res in filtered) {
176
+ BOOL isCurrent = [[res valueForKey: @" isCurrent" ] boolValue ];
177
+ if (isCurrent) {
178
+ return res;
172
179
}
173
-
174
- return nil ;
175
180
}
176
-
177
- for (PHAssetResource *res in resources) {
181
+ for (PHAssetResource *res in filtered) {
178
182
if (self.mediaType == PHAssetMediaTypeImage &&
179
183
res.type == PHAssetResourceTypeFullSizePhoto) {
180
184
return res;
181
185
}
182
-
183
186
if (self.mediaType == PHAssetMediaTypeVideo &&
184
187
res.type == PHAssetResourceTypeFullSizeVideo) {
185
188
return res;
@@ -188,8 +191,8 @@ - (PHAssetResource *)getAdjustResource {
188
191
return nil ;
189
192
}
190
193
191
- - (void )requestAdjustedData : (void (^)(NSData *_Nullable))block {
192
- PHAssetResource *res = [self getAdjustResource ];
194
+ - (void )requestCurrentResourceData : (void (^)(NSData *_Nullable))block {
195
+ PHAssetResource *res = [self getCurrentResource ];
193
196
194
197
PHAssetResourceManager *manager = PHAssetResourceManager.defaultManager ;
195
198
PHAssetResourceRequestOptions *opt = [PHAssetResourceRequestOptions new ];
@@ -228,19 +231,16 @@ - (PHAssetResource *)getLivePhotosResource {
228
231
229
232
if (@available (iOS 9.1 , *)) {
230
233
if (resources.lastObject && resources.lastObject .type == PHAssetResourceTypePairedVideo) {
231
- resource = resources.lastObject ;
232
- }
233
- if (!resource) {
234
- for (PHAssetResource *r in resources) {
235
- // Iterate to find the paired video.
236
- if (r.type == PHAssetResourceTypePairedVideo) {
237
- resource = r;
238
- break ;
239
- }
234
+ return resources.lastObject ;
235
+ }
236
+ for (PHAssetResource *r in resources) {
237
+ // Iterate to find the paired video.
238
+ if (r.type == PHAssetResourceTypePairedVideo) {
239
+ return r;
240
240
}
241
241
}
242
242
}
243
- return resource ;
243
+ return nil ;
244
244
}
245
245
246
246
@end
0 commit comments