Advertisement
Guest User

Untitled

a guest
Dec 5th, 2019
87
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Swift 2.53 KB | None | 0 0
  1. func insertVideo(_ videoUrl: URL, into albumName: String, completion: @escaping (PHObjectPlaceholder?, Error?) -> Void) {
  2.         var placeholder: PHObjectPlaceholder?
  3.         getOrCreateAssetCollection(name: albumName) { (collection, error) in
  4.             if let collection = collection {
  5.                 self.performChanges({
  6.                     let creationRequest = PHAssetCreationRequest.creationRequestForAssetFromVideo(atFileURL: videoUrl)
  7.                     if let request = PHAssetCollectionChangeRequest(for: collection),
  8.                         let placeholderForCreatedAsset = creationRequest?.placeholderForCreatedAsset {
  9.                         request.addAssets([placeholderForCreatedAsset] as NSFastEnumeration)
  10.                         placeholder = placeholderForCreatedAsset
  11.                     }
  12.                 }, completionHandler: { (success, error) in
  13.                     DispatchQueue.main.async {
  14.                         completion(placeholder, error)
  15.                     }
  16.                 })
  17.             } else {
  18.                 completion(nil, error)
  19.             }
  20.         }
  21.     }
  22.  
  23. func getOrCreateAssetCollection(name: String, completion: @escaping (PHAssetCollection?, Error?) -> Void) {
  24.         let fetchOptions = PHFetchOptions()
  25.         fetchOptions.predicate = NSPredicate(format: "title == '\(name)'")
  26.         if let assetCollection = PHAssetCollection.fetchAssetCollections(with: .album, subtype: .albumRegular, options: fetchOptions).firstObject {
  27.             completion(assetCollection, nil)
  28.             return
  29.         }
  30.        
  31.         var assetCollectionPlaceholder: PHObjectPlaceholder?
  32.        
  33.         self.performChanges({
  34.             let request = PHAssetCollectionChangeRequest.creationRequestForAssetCollection(withTitle: name)
  35.             assetCollectionPlaceholder = request.placeholderForCreatedAssetCollection
  36.         }, completionHandler: { (success, error) in
  37.             error.map { print("Error inserting image into album: \(String(describing: $0.localizedDescription))") }
  38.             if success,
  39.                 let placeholder = assetCollectionPlaceholder,
  40.                 let assetCollection = PHAssetCollection.fetchAssetCollections(withLocalIdentifiers: [placeholder.localIdentifier], options: nil).firstObject {
  41.                 DispatchQueue.main.async {
  42.                     completion(assetCollection, nil)
  43.                 }
  44.             } else {
  45.                 DispatchQueue.main.async {
  46.                     completion(nil, error)
  47.                 }
  48.             }
  49.         })
  50.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement