12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- //
- // ALImageFetchingInteractor.swift
- // ALImagePickerViewController
- //
- // Created by Alex Littlejohn on 2015/06/09.
- // Copyright (c) 2015 zero. All rights reserved.
- //
- import UIKit
- import Photos
- public typealias ImageFetcherSuccess = (PHFetchResult<PHAsset>) -> ()
- public typealias ImageFetcherFailure = (NSError) -> ()
- //extension PHFetchResult: Sequence {
- // public func makeIterator() -> NSFastEnumerationIterator {
- // return NSFastEnumerationIterator(self)
- // }
- //}
- public class ImageFetcher {
- private var success: ImageFetcherSuccess?
- private var failure: ImageFetcherFailure?
-
- private var authRequested = false
- private let errorDomain = "com.zero.imageFetcher"
-
- let libraryQueue = DispatchQueue(label: "com.zero.ALCameraViewController.LibraryQueue");
-
- public init() { }
-
- public func onSuccess(_ success: @escaping ImageFetcherSuccess) -> Self {
- self.success = success
- return self
- }
-
- public func onFailure(_ failure: @escaping ImageFetcherFailure) -> Self {
- self.failure = failure
- return self
- }
-
- public func fetch() -> Self {
- _ = PhotoLibraryAuthorizer { error in
- if error == nil {
- self.onAuthorized()
- } else {
- self.failure?(error!)
- }
- }
- return self
- }
-
- private func onAuthorized() {
- let options = PHFetchOptions()
- options.sortDescriptors = [NSSortDescriptor(key: "creationDate", ascending: false)]
- libraryQueue.async {
- let assets = PHAsset.fetchAssets(with: PHAssetMediaType.image, options: options)
- DispatchQueue.main.async {
- self.success?(assets)
- }
- }
- }
- }
|