progressHandler only call one time when fetch shared video use method requestAVAssetForVideo

hey there,

The PHAsset sourceType is PHAssetSourceTypeCloudShared. It means some one shared a vidoe to my icloud account.

Replies

- (void)requestAVAssetFromiCloudWithModel:(AWEAssetModel *)assetModel
                                      idx:(NSUInteger)index
                                 videoArr:(NSMutableArray *)videoArray
                            locationInfos:(NSMutableArray *)locationInfos
{
    PHVideoRequestOptions *options = [[PHVideoRequestOptions alloc] init];
    options.networkAccessAllowed = YES;

    //run animation ahead
    assetModel.iCloudSyncProgress = 0.f;
    [self updateProgressWithModel:assetModel];
    
    @weakify(self);//icloud download
    options.progressHandler = ^(double progress, NSError *error, BOOL *stop, NSDictionary *info) {
        BTDLog(@"video icloud sync progress is %.2f",progress);
        dispatch_async(dispatch_get_main_queue(), ^{
            if (assetModel && weak_self.view.window && [weak_self.lastVideoArray isEqual:videoArray]) {
                assetModel.iCloudSyncProgress = progress;
                [weak_self updateProgressWithModel:assetModel];
            }
        });
    };

    PHAsset *sourceAsset = assetModel.asset;
    NSURL *url = [sourceAsset valueForKey:@"ALAssetURL"];
    [[PHImageManager defaultManager] requestAVAssetForVideo:sourceAsset
                                                    options:options
                                              resultHandler:^(AVAsset *_Nullable asset, AVAudioMix *_Nullable audioMix,
                                                              NSDictionary *_Nullable info) {
                                                  dispatch_async(dispatch_get_main_queue(), ^{
                                                      if (weak_self.view.window) {
                                                          if (asset) {
                                                              assetModel.avAsset = asset;
                                                              if (SYSTEM_VERSION_LESS_THAN(@"9") && assetModel.mediaSubType == AWEAssetModelMediaSubTypeVideoHighFrameRate) {
                                                                  AVURLAsset *urlAsset = [AVURLAsset assetWithURL:url];
                                                                  if (urlAsset) {
                                                                      assetModel.avAsset = urlAsset;
                                                                  }
                                                              }
                                                              
                                                              assetModel.info = info;
                                                              if ([videoArray count] > index && assetModel) {
                                                                  [videoArray replaceObjectAtIndex:index withObject:assetModel];
                                                              }
                                                              
                                                              for (id item in videoArray) {
                                                                  if ([item isKindOfClass:[NSNumber class]]) {
                                                                      return;
                                                                  }
                                                              }
                                                              
                                                              if ([weak_self.selectedVideoAssetModelArray count] && [weak_self.lastVideoArray isEqual:videoArray]) {
                                                                  [weak_self fetchAssetsFinishedWithVideoArr:videoArray locationInfos:locationInfos];//goto clip page
                                                              }
                                                              
                                                          } else {
                                                              [AWEToast show:@"something wrong"];
                                                          }
                                                      }
                                                  });
                                              }];
}

hello? apple engineer pls take a look.