Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- func insertVideo(_ videoUrl: URL, into albumName: String, completion: @escaping (PHObjectPlaceholder?, Error?) -> Void) {
- var placeholder: PHObjectPlaceholder?
- getOrCreateAssetCollection(name: albumName) { (collection, error) in
- if let collection = collection {
- self.performChanges({
- let creationRequest = PHAssetCreationRequest.creationRequestForAssetFromVideo(atFileURL: videoUrl)
- if let request = PHAssetCollectionChangeRequest(for: collection),
- let placeholderForCreatedAsset = creationRequest?.placeholderForCreatedAsset {
- request.addAssets([placeholderForCreatedAsset] as NSFastEnumeration)
- placeholder = placeholderForCreatedAsset
- }
- }, completionHandler: { (success, error) in
- DispatchQueue.main.async {
- completion(placeholder, error)
- }
- })
- } else {
- completion(nil, error)
- }
- }
- }
- func getOrCreateAssetCollection(name: String, completion: @escaping (PHAssetCollection?, Error?) -> Void) {
- let fetchOptions = PHFetchOptions()
- fetchOptions.predicate = NSPredicate(format: "title == '\(name)'")
- if let assetCollection = PHAssetCollection.fetchAssetCollections(with: .album, subtype: .albumRegular, options: fetchOptions).firstObject {
- completion(assetCollection, nil)
- return
- }
- var assetCollectionPlaceholder: PHObjectPlaceholder?
- self.performChanges({
- let request = PHAssetCollectionChangeRequest.creationRequestForAssetCollection(withTitle: name)
- assetCollectionPlaceholder = request.placeholderForCreatedAssetCollection
- }, completionHandler: { (success, error) in
- error.map { print("Error inserting image into album: \(String(describing: $0.localizedDescription))") }
- if success,
- let placeholder = assetCollectionPlaceholder,
- let assetCollection = PHAssetCollection.fetchAssetCollections(withLocalIdentifiers: [placeholder.localIdentifier], options: nil).firstObject {
- DispatchQueue.main.async {
- completion(assetCollection, nil)
- }
- } else {
- DispatchQueue.main.async {
- completion(nil, error)
- }
- }
- })
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement