use core::ffi::*;
use core::ptr::NonNull;
use objc2::__framework_prelude::*;
#[cfg(feature = "objc2-app-kit")]
#[cfg(target_os = "macos")]
use objc2_app_kit::*;
#[cfg(feature = "objc2-av-foundation")]
use objc2_av_foundation::*;
#[cfg(feature = "objc2-core-foundation")]
use objc2_core_foundation::*;
use objc2_foundation::*;
#[cfg(feature = "objc2-image-io")]
use objc2_image_io::*;
use crate::*;
#[repr(transparent)]
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
pub struct PHImageRequestOptionsVersion(pub NSInteger);
impl PHImageRequestOptionsVersion {
#[doc(alias = "PHImageRequestOptionsVersionCurrent")]
pub const Current: Self = Self(0);
#[doc(alias = "PHImageRequestOptionsVersionUnadjusted")]
pub const Unadjusted: Self = Self(1);
#[doc(alias = "PHImageRequestOptionsVersionOriginal")]
pub const Original: Self = Self(2);
}
unsafe impl Encode for PHImageRequestOptionsVersion {
const ENCODING: Encoding = NSInteger::ENCODING;
}
unsafe impl RefEncode for PHImageRequestOptionsVersion {
const ENCODING_REF: Encoding = Encoding::Pointer(&Self::ENCODING);
}
#[repr(transparent)]
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
pub struct PHImageRequestOptionsDeliveryMode(pub NSInteger);
impl PHImageRequestOptionsDeliveryMode {
#[doc(alias = "PHImageRequestOptionsDeliveryModeOpportunistic")]
pub const Opportunistic: Self = Self(0);
#[doc(alias = "PHImageRequestOptionsDeliveryModeHighQualityFormat")]
pub const HighQualityFormat: Self = Self(1);
#[doc(alias = "PHImageRequestOptionsDeliveryModeFastFormat")]
pub const FastFormat: Self = Self(2);
}
unsafe impl Encode for PHImageRequestOptionsDeliveryMode {
const ENCODING: Encoding = NSInteger::ENCODING;
}
unsafe impl RefEncode for PHImageRequestOptionsDeliveryMode {
const ENCODING_REF: Encoding = Encoding::Pointer(&Self::ENCODING);
}
#[repr(transparent)]
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
pub struct PHImageRequestOptionsResizeMode(pub NSInteger);
impl PHImageRequestOptionsResizeMode {
#[doc(alias = "PHImageRequestOptionsResizeModeNone")]
pub const None: Self = Self(0);
#[doc(alias = "PHImageRequestOptionsResizeModeFast")]
pub const Fast: Self = Self(1);
#[doc(alias = "PHImageRequestOptionsResizeModeExact")]
pub const Exact: Self = Self(2);
}
unsafe impl Encode for PHImageRequestOptionsResizeMode {
const ENCODING: Encoding = NSInteger::ENCODING;
}
unsafe impl RefEncode for PHImageRequestOptionsResizeMode {
const ENCODING_REF: Encoding = Encoding::Pointer(&Self::ENCODING);
}
#[cfg(feature = "block2")]
pub type PHAssetImageProgressHandler =
*mut block2::DynBlock<dyn Fn(c_double, *mut NSError, NonNull<Bool>, *mut NSDictionary)>;
extern_class!(
#[unsafe(super(NSObject))]
#[derive(Debug, PartialEq, Eq, Hash)]
pub struct PHImageRequestOptions;
);
extern_conformance!(
unsafe impl NSCopying for PHImageRequestOptions {}
);
unsafe impl CopyingHelper for PHImageRequestOptions {
type Result = Self;
}
extern_conformance!(
unsafe impl NSObjectProtocol for PHImageRequestOptions {}
);
impl PHImageRequestOptions {
extern_methods!(
#[unsafe(method(version))]
#[unsafe(method_family = none)]
pub unsafe fn version(&self) -> PHImageRequestOptionsVersion;
#[unsafe(method(setVersion:))]
#[unsafe(method_family = none)]
pub unsafe fn setVersion(&self, version: PHImageRequestOptionsVersion);
#[unsafe(method(deliveryMode))]
#[unsafe(method_family = none)]
pub unsafe fn deliveryMode(&self) -> PHImageRequestOptionsDeliveryMode;
#[unsafe(method(setDeliveryMode:))]
#[unsafe(method_family = none)]
pub unsafe fn setDeliveryMode(&self, delivery_mode: PHImageRequestOptionsDeliveryMode);
#[unsafe(method(resizeMode))]
#[unsafe(method_family = none)]
pub unsafe fn resizeMode(&self) -> PHImageRequestOptionsResizeMode;
#[unsafe(method(setResizeMode:))]
#[unsafe(method_family = none)]
pub unsafe fn setResizeMode(&self, resize_mode: PHImageRequestOptionsResizeMode);
#[cfg(feature = "objc2-core-foundation")]
#[unsafe(method(normalizedCropRect))]
#[unsafe(method_family = none)]
pub unsafe fn normalizedCropRect(&self) -> CGRect;
#[cfg(feature = "objc2-core-foundation")]
#[unsafe(method(setNormalizedCropRect:))]
#[unsafe(method_family = none)]
pub unsafe fn setNormalizedCropRect(&self, normalized_crop_rect: CGRect);
#[unsafe(method(isNetworkAccessAllowed))]
#[unsafe(method_family = none)]
pub unsafe fn isNetworkAccessAllowed(&self) -> bool;
#[unsafe(method(setNetworkAccessAllowed:))]
#[unsafe(method_family = none)]
pub unsafe fn setNetworkAccessAllowed(&self, network_access_allowed: bool);
#[unsafe(method(isSynchronous))]
#[unsafe(method_family = none)]
pub unsafe fn isSynchronous(&self) -> bool;
#[unsafe(method(setSynchronous:))]
#[unsafe(method_family = none)]
pub unsafe fn setSynchronous(&self, synchronous: bool);
#[cfg(feature = "block2")]
#[unsafe(method(progressHandler))]
#[unsafe(method_family = none)]
pub unsafe fn progressHandler(&self) -> PHAssetImageProgressHandler;
#[cfg(feature = "block2")]
#[unsafe(method(setProgressHandler:))]
#[unsafe(method_family = none)]
pub unsafe fn setProgressHandler(&self, progress_handler: PHAssetImageProgressHandler);
#[unsafe(method(allowSecondaryDegradedImage))]
#[unsafe(method_family = none)]
pub unsafe fn allowSecondaryDegradedImage(&self) -> bool;
#[unsafe(method(setAllowSecondaryDegradedImage:))]
#[unsafe(method_family = none)]
pub unsafe fn setAllowSecondaryDegradedImage(&self, allow_secondary_degraded_image: bool);
);
}
impl PHImageRequestOptions {
extern_methods!(
#[unsafe(method(init))]
#[unsafe(method_family = init)]
pub unsafe fn init(this: Allocated<Self>) -> Retained<Self>;
#[unsafe(method(new))]
#[unsafe(method_family = new)]
pub unsafe fn new() -> Retained<Self>;
);
}
extern_class!(
#[unsafe(super(NSObject))]
#[derive(Debug, PartialEq, Eq, Hash)]
pub struct PHLivePhotoRequestOptions;
);
extern_conformance!(
unsafe impl NSCopying for PHLivePhotoRequestOptions {}
);
unsafe impl CopyingHelper for PHLivePhotoRequestOptions {
type Result = Self;
}
extern_conformance!(
unsafe impl NSObjectProtocol for PHLivePhotoRequestOptions {}
);
impl PHLivePhotoRequestOptions {
extern_methods!(
#[unsafe(method(version))]
#[unsafe(method_family = none)]
pub unsafe fn version(&self) -> PHImageRequestOptionsVersion;
#[unsafe(method(setVersion:))]
#[unsafe(method_family = none)]
pub unsafe fn setVersion(&self, version: PHImageRequestOptionsVersion);
#[unsafe(method(deliveryMode))]
#[unsafe(method_family = none)]
pub unsafe fn deliveryMode(&self) -> PHImageRequestOptionsDeliveryMode;
#[unsafe(method(setDeliveryMode:))]
#[unsafe(method_family = none)]
pub unsafe fn setDeliveryMode(&self, delivery_mode: PHImageRequestOptionsDeliveryMode);
#[unsafe(method(isNetworkAccessAllowed))]
#[unsafe(method_family = none)]
pub unsafe fn isNetworkAccessAllowed(&self) -> bool;
#[unsafe(method(setNetworkAccessAllowed:))]
#[unsafe(method_family = none)]
pub unsafe fn setNetworkAccessAllowed(&self, network_access_allowed: bool);
#[cfg(feature = "block2")]
#[unsafe(method(progressHandler))]
#[unsafe(method_family = none)]
pub unsafe fn progressHandler(&self) -> PHAssetImageProgressHandler;
#[cfg(feature = "block2")]
#[unsafe(method(setProgressHandler:))]
#[unsafe(method_family = none)]
pub unsafe fn setProgressHandler(&self, progress_handler: PHAssetImageProgressHandler);
);
}
impl PHLivePhotoRequestOptions {
extern_methods!(
#[unsafe(method(init))]
#[unsafe(method_family = init)]
pub unsafe fn init(this: Allocated<Self>) -> Retained<Self>;
#[unsafe(method(new))]
#[unsafe(method_family = new)]
pub unsafe fn new() -> Retained<Self>;
);
}
#[repr(transparent)]
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
pub struct PHVideoRequestOptionsVersion(pub NSInteger);
impl PHVideoRequestOptionsVersion {
#[doc(alias = "PHVideoRequestOptionsVersionCurrent")]
pub const Current: Self = Self(0);
#[doc(alias = "PHVideoRequestOptionsVersionOriginal")]
pub const Original: Self = Self(1);
}
unsafe impl Encode for PHVideoRequestOptionsVersion {
const ENCODING: Encoding = NSInteger::ENCODING;
}
unsafe impl RefEncode for PHVideoRequestOptionsVersion {
const ENCODING_REF: Encoding = Encoding::Pointer(&Self::ENCODING);
}
#[repr(transparent)]
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
pub struct PHVideoRequestOptionsDeliveryMode(pub NSInteger);
impl PHVideoRequestOptionsDeliveryMode {
#[doc(alias = "PHVideoRequestOptionsDeliveryModeAutomatic")]
pub const Automatic: Self = Self(0);
#[doc(alias = "PHVideoRequestOptionsDeliveryModeHighQualityFormat")]
pub const HighQualityFormat: Self = Self(1);
#[doc(alias = "PHVideoRequestOptionsDeliveryModeMediumQualityFormat")]
pub const MediumQualityFormat: Self = Self(2);
#[doc(alias = "PHVideoRequestOptionsDeliveryModeFastFormat")]
pub const FastFormat: Self = Self(3);
}
unsafe impl Encode for PHVideoRequestOptionsDeliveryMode {
const ENCODING: Encoding = NSInteger::ENCODING;
}
unsafe impl RefEncode for PHVideoRequestOptionsDeliveryMode {
const ENCODING_REF: Encoding = Encoding::Pointer(&Self::ENCODING);
}
#[cfg(feature = "block2")]
pub type PHAssetVideoProgressHandler =
*mut block2::DynBlock<dyn Fn(c_double, *mut NSError, NonNull<Bool>, *mut NSDictionary)>;
extern_class!(
#[unsafe(super(NSObject))]
#[derive(Debug, PartialEq, Eq, Hash)]
pub struct PHVideoRequestOptions;
);
extern_conformance!(
unsafe impl NSCopying for PHVideoRequestOptions {}
);
unsafe impl CopyingHelper for PHVideoRequestOptions {
type Result = Self;
}
extern_conformance!(
unsafe impl NSObjectProtocol for PHVideoRequestOptions {}
);
impl PHVideoRequestOptions {
extern_methods!(
#[unsafe(method(isNetworkAccessAllowed))]
#[unsafe(method_family = none)]
pub unsafe fn isNetworkAccessAllowed(&self) -> bool;
#[unsafe(method(setNetworkAccessAllowed:))]
#[unsafe(method_family = none)]
pub unsafe fn setNetworkAccessAllowed(&self, network_access_allowed: bool);
#[unsafe(method(version))]
#[unsafe(method_family = none)]
pub unsafe fn version(&self) -> PHVideoRequestOptionsVersion;
#[unsafe(method(setVersion:))]
#[unsafe(method_family = none)]
pub unsafe fn setVersion(&self, version: PHVideoRequestOptionsVersion);
#[unsafe(method(deliveryMode))]
#[unsafe(method_family = none)]
pub unsafe fn deliveryMode(&self) -> PHVideoRequestOptionsDeliveryMode;
#[unsafe(method(setDeliveryMode:))]
#[unsafe(method_family = none)]
pub unsafe fn setDeliveryMode(&self, delivery_mode: PHVideoRequestOptionsDeliveryMode);
#[cfg(feature = "block2")]
#[unsafe(method(progressHandler))]
#[unsafe(method_family = none)]
pub unsafe fn progressHandler(&self) -> PHAssetVideoProgressHandler;
#[cfg(feature = "block2")]
#[unsafe(method(setProgressHandler:))]
#[unsafe(method_family = none)]
pub unsafe fn setProgressHandler(&self, progress_handler: PHAssetVideoProgressHandler);
);
}
impl PHVideoRequestOptions {
extern_methods!(
#[unsafe(method(init))]
#[unsafe(method_family = init)]
pub unsafe fn init(this: Allocated<Self>) -> Retained<Self>;
#[unsafe(method(new))]
#[unsafe(method_family = new)]
pub unsafe fn new() -> Retained<Self>;
);
}
pub type PHImageRequestID = i32;
pub static PHInvalidImageRequestID: PHImageRequestID = 0;
extern "C" {
#[cfg(feature = "objc2-core-foundation")]
pub static PHImageManagerMaximumSize: CGSize;
}
extern "C" {
pub static PHImageResultIsInCloudKey: &'static NSString;
}
extern "C" {
pub static PHImageResultIsDegradedKey: &'static NSString;
}
extern "C" {
pub static PHImageResultRequestIDKey: &'static NSString;
}
extern "C" {
pub static PHImageCancelledKey: &'static NSString;
}
extern "C" {
pub static PHImageErrorKey: &'static NSString;
}
extern_class!(
#[unsafe(super(NSObject))]
#[derive(Debug, PartialEq, Eq, Hash)]
pub struct PHImageManager;
);
unsafe impl Send for PHImageManager {}
unsafe impl Sync for PHImageManager {}
extern_conformance!(
unsafe impl NSObjectProtocol for PHImageManager {}
);
impl PHImageManager {
extern_methods!(
#[unsafe(method(defaultManager))]
#[unsafe(method_family = none)]
pub unsafe fn defaultManager() -> Retained<PHImageManager>;
#[cfg(all(
feature = "PHAsset",
feature = "PHObject",
feature = "PhotosTypes",
feature = "block2",
feature = "objc2-app-kit",
feature = "objc2-core-foundation"
))]
#[cfg(target_os = "macos")]
#[unsafe(method(requestImageForAsset:targetSize:contentMode:options:resultHandler:))]
#[unsafe(method_family = none)]
pub unsafe fn requestImageForAsset_targetSize_contentMode_options_resultHandler(
&self,
asset: &PHAsset,
target_size: CGSize,
content_mode: PHImageContentMode,
options: Option<&PHImageRequestOptions>,
result_handler: &block2::DynBlock<dyn Fn(*mut NSImage, *mut NSDictionary)>,
) -> PHImageRequestID;
#[cfg(all(
feature = "PHAsset",
feature = "PHObject",
feature = "block2",
feature = "objc2-image-io"
))]
#[unsafe(method(requestImageDataAndOrientationForAsset:options:resultHandler:))]
#[unsafe(method_family = none)]
pub unsafe fn requestImageDataAndOrientationForAsset_options_resultHandler(
&self,
asset: &PHAsset,
options: Option<&PHImageRequestOptions>,
result_handler: &block2::DynBlock<
dyn Fn(*mut NSData, *mut NSString, CGImagePropertyOrientation, *mut NSDictionary),
>,
) -> PHImageRequestID;
#[unsafe(method(cancelImageRequest:))]
#[unsafe(method_family = none)]
pub unsafe fn cancelImageRequest(&self, request_id: PHImageRequestID);
#[cfg(all(
feature = "PHAsset",
feature = "PHLivePhoto",
feature = "PHObject",
feature = "PhotosTypes",
feature = "block2",
feature = "objc2-core-foundation"
))]
#[unsafe(method(requestLivePhotoForAsset:targetSize:contentMode:options:resultHandler:))]
#[unsafe(method_family = none)]
pub unsafe fn requestLivePhotoForAsset_targetSize_contentMode_options_resultHandler(
&self,
asset: &PHAsset,
target_size: CGSize,
content_mode: PHImageContentMode,
options: Option<&PHLivePhotoRequestOptions>,
result_handler: &block2::DynBlock<dyn Fn(*mut PHLivePhoto, *mut NSDictionary)>,
) -> PHImageRequestID;
#[cfg(all(
feature = "PHAsset",
feature = "PHObject",
feature = "block2",
feature = "objc2-av-foundation"
))]
#[unsafe(method(requestPlayerItemForVideo:options:resultHandler:))]
#[unsafe(method_family = none)]
pub unsafe fn requestPlayerItemForVideo_options_resultHandler(
&self,
asset: &PHAsset,
options: Option<&PHVideoRequestOptions>,
result_handler: &block2::DynBlock<dyn Fn(*mut AVPlayerItem, *mut NSDictionary)>,
) -> PHImageRequestID;
#[cfg(all(
feature = "PHAsset",
feature = "PHObject",
feature = "block2",
feature = "objc2-av-foundation"
))]
#[unsafe(method(requestExportSessionForVideo:options:exportPreset:resultHandler:))]
#[unsafe(method_family = none)]
pub unsafe fn requestExportSessionForVideo_options_exportPreset_resultHandler(
&self,
asset: &PHAsset,
options: Option<&PHVideoRequestOptions>,
export_preset: &NSString,
result_handler: &block2::DynBlock<dyn Fn(*mut AVAssetExportSession, *mut NSDictionary)>,
) -> PHImageRequestID;
#[cfg(all(
feature = "PHAsset",
feature = "PHObject",
feature = "block2",
feature = "objc2-av-foundation"
))]
#[unsafe(method(requestAVAssetForVideo:options:resultHandler:))]
#[unsafe(method_family = none)]
pub unsafe fn requestAVAssetForVideo_options_resultHandler(
&self,
asset: &PHAsset,
options: Option<&PHVideoRequestOptions>,
result_handler: &block2::DynBlock<
dyn Fn(*mut AVAsset, *mut AVAudioMix, *mut NSDictionary),
>,
) -> PHImageRequestID;
);
}
impl PHImageManager {
extern_methods!(
#[unsafe(method(init))]
#[unsafe(method_family = init)]
pub unsafe fn init(this: Allocated<Self>) -> Retained<Self>;
#[unsafe(method(new))]
#[unsafe(method_family = new)]
pub unsafe fn new() -> Retained<Self>;
);
}
extern_class!(
#[unsafe(super(PHImageManager, NSObject))]
#[derive(Debug, PartialEq, Eq, Hash)]
pub struct PHCachingImageManager;
);
unsafe impl Send for PHCachingImageManager {}
unsafe impl Sync for PHCachingImageManager {}
extern_conformance!(
unsafe impl NSObjectProtocol for PHCachingImageManager {}
);
impl PHCachingImageManager {
extern_methods!(
#[deprecated = "This property is unused and will be removed in a future release"]
#[unsafe(method(allowsCachingHighQualityImages))]
#[unsafe(method_family = none)]
pub unsafe fn allowsCachingHighQualityImages(&self) -> bool;
#[deprecated = "This property is unused and will be removed in a future release"]
#[unsafe(method(setAllowsCachingHighQualityImages:))]
#[unsafe(method_family = none)]
pub unsafe fn setAllowsCachingHighQualityImages(
&self,
allows_caching_high_quality_images: bool,
);
#[cfg(all(
feature = "PHAsset",
feature = "PHObject",
feature = "PhotosTypes",
feature = "objc2-core-foundation"
))]
#[unsafe(method(startCachingImagesForAssets:targetSize:contentMode:options:))]
#[unsafe(method_family = none)]
pub unsafe fn startCachingImagesForAssets_targetSize_contentMode_options(
&self,
assets: &NSArray<PHAsset>,
target_size: CGSize,
content_mode: PHImageContentMode,
options: Option<&PHImageRequestOptions>,
);
#[cfg(all(
feature = "PHAsset",
feature = "PHObject",
feature = "PhotosTypes",
feature = "objc2-core-foundation"
))]
#[unsafe(method(stopCachingImagesForAssets:targetSize:contentMode:options:))]
#[unsafe(method_family = none)]
pub unsafe fn stopCachingImagesForAssets_targetSize_contentMode_options(
&self,
assets: &NSArray<PHAsset>,
target_size: CGSize,
content_mode: PHImageContentMode,
options: Option<&PHImageRequestOptions>,
);
#[unsafe(method(stopCachingImagesForAllAssets))]
#[unsafe(method_family = none)]
pub unsafe fn stopCachingImagesForAllAssets(&self);
);
}
impl PHCachingImageManager {
extern_methods!(
#[unsafe(method(init))]
#[unsafe(method_family = init)]
pub unsafe fn init(this: Allocated<Self>) -> Retained<Self>;
#[unsafe(method(new))]
#[unsafe(method_family = new)]
pub unsafe fn new() -> Retained<Self>;
);
}