objc2-media-player 0.3.2

Bindings to the MediaPlayer framework
Documentation
//! This file has been automatically generated by `objc2`'s `header-translator`.
//! DO NOT EDIT
use core::ffi::*;
use core::ptr::NonNull;
use objc2::__framework_prelude::*;
use objc2_foundation::*;

use crate::*;

/// [Apple's documentation](https://developer.apple.com/documentation/mediaplayer/mpmusicplaybackstate?language=objc)
// NS_ENUM
#[repr(transparent)]
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
pub struct MPMusicPlaybackState(pub NSInteger);
impl MPMusicPlaybackState {
    #[doc(alias = "MPMusicPlaybackStateStopped")]
    pub const Stopped: Self = Self(0);
    #[doc(alias = "MPMusicPlaybackStatePlaying")]
    pub const Playing: Self = Self(1);
    #[doc(alias = "MPMusicPlaybackStatePaused")]
    pub const Paused: Self = Self(2);
    #[doc(alias = "MPMusicPlaybackStateInterrupted")]
    pub const Interrupted: Self = Self(3);
    #[doc(alias = "MPMusicPlaybackStateSeekingForward")]
    pub const SeekingForward: Self = Self(4);
    #[doc(alias = "MPMusicPlaybackStateSeekingBackward")]
    pub const SeekingBackward: Self = Self(5);
}

unsafe impl Encode for MPMusicPlaybackState {
    const ENCODING: Encoding = NSInteger::ENCODING;
}

unsafe impl RefEncode for MPMusicPlaybackState {
    const ENCODING_REF: Encoding = Encoding::Pointer(&Self::ENCODING);
}

/// [Apple's documentation](https://developer.apple.com/documentation/mediaplayer/mpmusicrepeatmode?language=objc)
// NS_ENUM
#[repr(transparent)]
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
pub struct MPMusicRepeatMode(pub NSInteger);
impl MPMusicRepeatMode {
    #[doc(alias = "MPMusicRepeatModeDefault")]
    pub const Default: Self = Self(0);
    #[doc(alias = "MPMusicRepeatModeNone")]
    pub const None: Self = Self(1);
    #[doc(alias = "MPMusicRepeatModeOne")]
    pub const One: Self = Self(2);
    #[doc(alias = "MPMusicRepeatModeAll")]
    pub const All: Self = Self(3);
}

unsafe impl Encode for MPMusicRepeatMode {
    const ENCODING: Encoding = NSInteger::ENCODING;
}

unsafe impl RefEncode for MPMusicRepeatMode {
    const ENCODING_REF: Encoding = Encoding::Pointer(&Self::ENCODING);
}

/// [Apple's documentation](https://developer.apple.com/documentation/mediaplayer/mpmusicshufflemode?language=objc)
// NS_ENUM
#[repr(transparent)]
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
pub struct MPMusicShuffleMode(pub NSInteger);
impl MPMusicShuffleMode {
    #[doc(alias = "MPMusicShuffleModeDefault")]
    pub const Default: Self = Self(0);
    #[doc(alias = "MPMusicShuffleModeOff")]
    pub const Off: Self = Self(1);
    #[doc(alias = "MPMusicShuffleModeSongs")]
    pub const Songs: Self = Self(2);
    #[doc(alias = "MPMusicShuffleModeAlbums")]
    pub const Albums: Self = Self(3);
}

unsafe impl Encode for MPMusicShuffleMode {
    const ENCODING: Encoding = NSInteger::ENCODING;
}

unsafe impl RefEncode for MPMusicShuffleMode {
    const ENCODING_REF: Encoding = Encoding::Pointer(&Self::ENCODING);
}

extern_protocol!(
    /// [Apple's documentation](https://developer.apple.com/documentation/mediaplayer/mpsystemmusicplayercontroller?language=objc)
    pub unsafe trait MPSystemMusicPlayerController: NSObjectProtocol {
        #[cfg(feature = "MPMusicPlayerQueueDescriptor")]
        /// Switches to Music to play the content provided by the queue descriptor.
        #[unsafe(method(openToPlayQueueDescriptor:))]
        #[unsafe(method_family = none)]
        unsafe fn openToPlayQueueDescriptor(&self, queue_descriptor: &MPMusicPlayerQueueDescriptor);
    }
);

extern_class!(
    /// [Apple's documentation](https://developer.apple.com/documentation/mediaplayer/mpmusicplayercontroller?language=objc)
    #[unsafe(super(NSObject))]
    #[derive(Debug, PartialEq, Eq, Hash)]
    pub struct MPMusicPlayerController;
);

#[cfg(feature = "MPMediaPlayback")]
extern_conformance!(
    unsafe impl MPMediaPlayback for MPMusicPlayerController {}
);

extern_conformance!(
    unsafe impl NSObjectProtocol for MPMusicPlayerController {}
);

impl MPMusicPlayerController {
    extern_methods!(
        /// Playing items with applicationMusicPlayer does not affect Music's playback state.
        #[unsafe(method(applicationMusicPlayer))]
        #[unsafe(method_family = none)]
        pub unsafe fn applicationMusicPlayer() -> Retained<MPMusicPlayerController>;

        #[cfg(feature = "MPMusicPlayerApplicationController")]
        /// Similar to applicationMusicPlayer, but allows direct manipulation of the queue.
        #[unsafe(method(applicationQueuePlayer))]
        #[unsafe(method_family = none)]
        pub unsafe fn applicationQueuePlayer() -> Retained<MPMusicPlayerApplicationController>;

        /// Playing media items with the systemMusicPlayer will replace the user's current Music state.
        #[unsafe(method(systemMusicPlayer))]
        #[unsafe(method_family = none)]
        pub unsafe fn systemMusicPlayer() -> Retained<MPMusicPlayerController>;

        #[unsafe(method(new))]
        #[unsafe(method_family = new)]
        pub unsafe fn new() -> Retained<Self>;

        #[unsafe(method(init))]
        #[unsafe(method_family = init)]
        pub unsafe fn init(this: Allocated<Self>) -> Retained<Self>;

        #[unsafe(method(playbackState))]
        #[unsafe(method_family = none)]
        pub unsafe fn playbackState(&self) -> MPMusicPlaybackState;

        #[unsafe(method(repeatMode))]
        #[unsafe(method_family = none)]
        pub unsafe fn repeatMode(&self) -> MPMusicRepeatMode;

        /// Setter for [`repeatMode`][Self::repeatMode].
        #[unsafe(method(setRepeatMode:))]
        #[unsafe(method_family = none)]
        pub unsafe fn setRepeatMode(&self, repeat_mode: MPMusicRepeatMode);

        #[unsafe(method(shuffleMode))]
        #[unsafe(method_family = none)]
        pub unsafe fn shuffleMode(&self) -> MPMusicShuffleMode;

        /// Setter for [`shuffleMode`][Self::shuffleMode].
        #[unsafe(method(setShuffleMode:))]
        #[unsafe(method_family = none)]
        pub unsafe fn setShuffleMode(&self, shuffle_mode: MPMusicShuffleMode);

        #[deprecated = "Use MPVolumeView for volume control."]
        #[unsafe(method(volume))]
        #[unsafe(method_family = none)]
        pub unsafe fn volume(&self) -> c_float;

        /// Setter for [`volume`][Self::volume].
        #[deprecated = "Use MPVolumeView for volume control."]
        #[unsafe(method(setVolume:))]
        #[unsafe(method_family = none)]
        pub unsafe fn setVolume(&self, volume: c_float);

        #[cfg(all(feature = "MPMediaEntity", feature = "MPMediaItem"))]
        #[unsafe(method(nowPlayingItem))]
        #[unsafe(method_family = none)]
        pub unsafe fn nowPlayingItem(&self) -> Option<Retained<MPMediaItem>>;

        #[cfg(all(feature = "MPMediaEntity", feature = "MPMediaItem"))]
        /// Setter for [`nowPlayingItem`][Self::nowPlayingItem].
        ///
        /// This is [copied][objc2_foundation::NSCopying::copy] when set.
        #[unsafe(method(setNowPlayingItem:))]
        #[unsafe(method_family = none)]
        pub unsafe fn setNowPlayingItem(&self, now_playing_item: Option<&MPMediaItem>);

        #[unsafe(method(indexOfNowPlayingItem))]
        #[unsafe(method_family = none)]
        pub unsafe fn indexOfNowPlayingItem(&self) -> NSUInteger;

        #[cfg(feature = "MPMediaQuery")]
        #[unsafe(method(setQueueWithQuery:))]
        #[unsafe(method_family = none)]
        pub unsafe fn setQueueWithQuery(&self, query: &MPMediaQuery);

        #[cfg(all(feature = "MPMediaEntity", feature = "MPMediaItemCollection"))]
        #[unsafe(method(setQueueWithItemCollection:))]
        #[unsafe(method_family = none)]
        pub unsafe fn setQueueWithItemCollection(&self, item_collection: &MPMediaItemCollection);

        #[unsafe(method(setQueueWithStoreIDs:))]
        #[unsafe(method_family = none)]
        pub unsafe fn setQueueWithStoreIDs(&self, store_i_ds: &NSArray<NSString>);

        #[cfg(feature = "MPMusicPlayerQueueDescriptor")]
        #[unsafe(method(setQueueWithDescriptor:))]
        #[unsafe(method_family = none)]
        pub unsafe fn setQueueWithDescriptor(&self, descriptor: &MPMusicPlayerQueueDescriptor);

        #[cfg(feature = "MPMusicPlayerQueueDescriptor")]
        #[unsafe(method(prependQueueDescriptor:))]
        #[unsafe(method_family = none)]
        pub unsafe fn prependQueueDescriptor(&self, descriptor: &MPMusicPlayerQueueDescriptor);

        #[cfg(feature = "MPMusicPlayerQueueDescriptor")]
        #[unsafe(method(appendQueueDescriptor:))]
        #[unsafe(method_family = none)]
        pub unsafe fn appendQueueDescriptor(&self, descriptor: &MPMusicPlayerQueueDescriptor);

        #[cfg(feature = "block2")]
        #[unsafe(method(prepareToPlayWithCompletionHandler:))]
        #[unsafe(method_family = none)]
        pub unsafe fn prepareToPlayWithCompletionHandler(
            &self,
            completion_handler: &block2::DynBlock<dyn Fn(*mut NSError)>,
        );

        #[unsafe(method(skipToNextItem))]
        #[unsafe(method_family = none)]
        pub unsafe fn skipToNextItem(&self);

        #[unsafe(method(skipToBeginning))]
        #[unsafe(method_family = none)]
        pub unsafe fn skipToBeginning(&self);

        #[unsafe(method(skipToPreviousItem))]
        #[unsafe(method_family = none)]
        pub unsafe fn skipToPreviousItem(&self);

        #[unsafe(method(beginGeneratingPlaybackNotifications))]
        #[unsafe(method_family = none)]
        pub unsafe fn beginGeneratingPlaybackNotifications(&self);

        #[unsafe(method(endGeneratingPlaybackNotifications))]
        #[unsafe(method_family = none)]
        pub unsafe fn endGeneratingPlaybackNotifications(&self);

        #[deprecated]
        #[unsafe(method(iPodMusicPlayer))]
        #[unsafe(method_family = none)]
        pub unsafe fn iPodMusicPlayer() -> Retained<MPMusicPlayerController>;
    );
}

extern "C" {
    /// [Apple's documentation](https://developer.apple.com/documentation/mediaplayer/mpmusicplayercontrollerplaybackstatedidchangenotification?language=objc)
    pub static MPMusicPlayerControllerPlaybackStateDidChangeNotification:
        &'static NSNotificationName;
}

extern "C" {
    /// [Apple's documentation](https://developer.apple.com/documentation/mediaplayer/mpmusicplayercontrollernowplayingitemdidchangenotification?language=objc)
    pub static MPMusicPlayerControllerNowPlayingItemDidChangeNotification:
        &'static NSNotificationName;
}

extern "C" {
    /// [Apple's documentation](https://developer.apple.com/documentation/mediaplayer/mpmusicplayercontrollervolumedidchangenotification?language=objc)
    pub static MPMusicPlayerControllerVolumeDidChangeNotification: &'static NSNotificationName;
}