51 lines
2.5 KiB
Swift
51 lines
2.5 KiB
Swift
import Photos
|
|
import ExpoModulesCore
|
|
|
|
class AssetFieldPredicateBuilder {
|
|
static func buildPredicate(assetField: AssetField, value: Int, symbol: String) -> NSPredicate {
|
|
if assetField == .CREATION_TIME || assetField == .MODIFICATION_TIME {
|
|
let date = Date(timeIntervalSince1970: TimeInterval(value))
|
|
return NSPredicate(format: "\(assetField.photosKey()) \(symbol) %@", argumentArray: [date])
|
|
}
|
|
return NSPredicate(format: "\(assetField.photosKey()) \(symbol) %@", argumentArray: [value])
|
|
}
|
|
|
|
static func buildPredicate(assetField: AssetField, value: MediaTypeNext, symbol: String) -> NSPredicate {
|
|
let nsValue = value.toPHAssetMediaType().rawValue
|
|
return NSPredicate(format: "\(assetField.photosKey()) \(symbol) %@", argumentArray: [nsValue])
|
|
}
|
|
|
|
static func buildPredicate(assetField: AssetField, values: [Int], symbol: String) -> NSPredicate {
|
|
if assetField == .CREATION_TIME || assetField == .MODIFICATION_TIME {
|
|
let dates = values.map { Date(timeIntervalSince1970: TimeInterval($0)) }
|
|
return NSPredicate(format: "\(assetField.photosKey()) \(symbol) %@", argumentArray: [dates])
|
|
}
|
|
return NSPredicate(format: "\(assetField.photosKey()) \(symbol) %@", argumentArray: [values])
|
|
}
|
|
|
|
static func buildPredicate(assetField: AssetField, values: [MediaTypeNext], symbol: String) -> NSPredicate {
|
|
let nsValues = values.map { $0.toPHAssetMediaType().rawValue }
|
|
return NSPredicate(format: "\(assetField.photosKey()) \(symbol) %@", argumentArray: [nsValues])
|
|
}
|
|
|
|
static func buildPredicate(assetField: AssetField, value: Either<MediaTypeNext, Int>, symbol: String) throws -> NSPredicate {
|
|
if let intVal = try? value.as(Int.self) {
|
|
return buildPredicate(assetField: assetField, value: intVal, symbol: symbol)
|
|
}
|
|
if let mediaVal = try? value.as(MediaTypeNext.self) {
|
|
return buildPredicate(assetField: assetField, value: mediaVal, symbol: symbol)
|
|
}
|
|
throw PredicateBuilderException("Unsupported Either type for \(assetField)")
|
|
}
|
|
|
|
static func buildPredicate(assetField: AssetField, values: Either<[MediaTypeNext], [Int]>, symbol: String) throws -> NSPredicate {
|
|
if let intValues = try? values.as([Int].self) {
|
|
return buildPredicate(assetField: assetField, values: intValues, symbol: symbol)
|
|
}
|
|
if let mediaValues = try? values.as([MediaTypeNext].self) {
|
|
return buildPredicate(assetField: assetField, values: mediaValues, symbol: symbol)
|
|
}
|
|
throw PredicateBuilderException("Unsupported Either type for \(assetField)")
|
|
}
|
|
}
|