Advertisement
Guest User

Untitled

a guest
Aug 19th, 2019
118
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.39 KB | None | 0 0
  1. import Photos
  2.  
  3. class VideoHelper {
  4.  
  5. private static func createAlbum(name: String, completion: @escaping ((_ collection: PHAssetCollection?) -> Void)) {
  6. //Get PHFetch Options
  7. let fetchOptions = PHFetchOptions()
  8. fetchOptions.predicate = NSPredicate(format: "title = %@", name)
  9. let collection : PHFetchResult = PHAssetCollection.fetchAssetCollections(with: .album, subtype: .any, options: fetchOptions)
  10. //Check return value - If found, then get the first album out
  11. if let _: AnyObject = collection.firstObject {
  12. completion(collection.firstObject)
  13. } else {
  14. //If not found - Then create a new album
  15. PHPhotoLibrary.shared().performChanges({
  16. _ = PHAssetCollectionChangeRequest.creationRequestForAssetCollection(withTitle: name)
  17. }, completionHandler: { success, error in
  18. if (success) {
  19. VideoHelper.createAlbum(name: name, completion: { (album: PHAssetCollection?) in
  20. DispatchQueue.main.async {
  21. completion(album)
  22. }
  23. })
  24. } else {
  25. DispatchQueue.main.async {
  26. completion(nil)
  27. }
  28. }
  29. })
  30. }
  31. }
  32.  
  33. static func saveCompressedVideoToPhoneGallery(url: URL, albumName: String, completion: @escaping ((_ success: Bool) -> Void)){
  34. VideoHelper.createAlbum(name: albumName) { (collection: PHAssetCollection?) in
  35. guard let collection = collection else {
  36. completion(false)
  37. return
  38. }
  39. PHPhotoLibrary.shared().performChanges({
  40. let assetRequest = PHAssetChangeRequest.creationRequestForAssetFromVideo(atFileURL: url)
  41. if let assetPlaceholder = assetRequest?.placeholderForCreatedAsset {
  42. let albumChangeRequest = PHAssetCollectionChangeRequest(for: collection)
  43. albumChangeRequest?.addAssets([assetPlaceholder] as NSFastEnumeration)
  44. } else {
  45. DispatchQueue.main.async {
  46. completion(false)
  47. }
  48. }
  49. }) { saved, error in
  50. DispatchQueue.main.async {
  51. completion(saved)
  52. }
  53. }
  54. }
  55. }
  56. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement