{- | Copyright : Will Thompson, Iñaki García Etxebarria and Jonas Platte License : LGPL-2.1 Maintainer : Iñaki García Etxebarria (inaki@blueleaf.cc) CD track abstraction to communicate TOC entries to the base class. This structure is only for use by sub-classed in connection with 'GI.GstAudio.Objects.AudioCdSrc.audioCdSrcAddTrack'. Applications will be informed of the available tracks via a TOC message on the pipeline\'s 'GI.Gst.Objects.Bus.Bus' instead. -} #define ENABLE_OVERLOADING (MIN_VERSION_haskell_gi_overloading(1,0,0) \ && !defined(__HADDOCK_VERSION__)) module GI.GstAudio.Structs.AudioCdSrcTrack ( -- * Exported types AudioCdSrcTrack(..) , newZeroAudioCdSrcTrack , noAudioCdSrcTrack , -- * Properties -- ** end #attr:end# {- | The last sector of this track (LBA) -} #if ENABLE_OVERLOADING audioCdSrcTrack_end , #endif getAudioCdSrcTrackEnd , setAudioCdSrcTrackEnd , -- ** isAudio #attr:isAudio# {- | Whether this is an audio track -} #if ENABLE_OVERLOADING audioCdSrcTrack_isAudio , #endif getAudioCdSrcTrackIsAudio , setAudioCdSrcTrackIsAudio , -- ** num #attr:num# {- | Track number in TOC (usually starts from 1, but not always) -} #if ENABLE_OVERLOADING audioCdSrcTrack_num , #endif getAudioCdSrcTrackNum , setAudioCdSrcTrackNum , -- ** start #attr:start# {- | The first sector of this track (LBA) -} #if ENABLE_OVERLOADING audioCdSrcTrack_start , #endif getAudioCdSrcTrackStart , setAudioCdSrcTrackStart , -- ** tags #attr:tags# {- | Track-specific tags (e.g. from cd-text information), or NULL -} #if ENABLE_OVERLOADING audioCdSrcTrack_tags , #endif clearAudioCdSrcTrackTags , getAudioCdSrcTrackTags , setAudioCdSrcTrackTags , ) where import Data.GI.Base.ShortPrelude import qualified Data.GI.Base.ShortPrelude as SP import qualified Data.GI.Base.Overloading as O import qualified Prelude as P import qualified Data.GI.Base.Attributes as GI.Attributes import qualified Data.GI.Base.ManagedPtr as B.ManagedPtr import qualified Data.GI.Base.GClosure as B.GClosure import qualified Data.GI.Base.GError as B.GError import qualified Data.GI.Base.GVariant as B.GVariant import qualified Data.GI.Base.GValue as B.GValue import qualified Data.GI.Base.GParamSpec as B.GParamSpec import qualified Data.GI.Base.CallStack as B.CallStack import qualified Data.GI.Base.Properties as B.Properties import qualified Data.Text as T import qualified Data.ByteString.Char8 as B import qualified Data.Map as Map import qualified Foreign.Ptr as FP import qualified GHC.OverloadedLabels as OL import qualified GI.Gst.Structs.TagList as Gst.TagList -- | Memory-managed wrapper type. newtype AudioCdSrcTrack = AudioCdSrcTrack (ManagedPtr AudioCdSrcTrack) instance WrappedPtr AudioCdSrcTrack where wrappedPtrCalloc = callocBytes 48 wrappedPtrCopy = \p -> withManagedPtr p (copyBytes 48 >=> wrapPtr AudioCdSrcTrack) wrappedPtrFree = Just ptr_to_g_free -- | Construct a `AudioCdSrcTrack` struct initialized to zero. newZeroAudioCdSrcTrack :: MonadIO m => m AudioCdSrcTrack newZeroAudioCdSrcTrack = liftIO $ wrappedPtrCalloc >>= wrapPtr AudioCdSrcTrack instance tag ~ 'AttrSet => Constructible AudioCdSrcTrack tag where new _ attrs = do o <- newZeroAudioCdSrcTrack GI.Attributes.set o attrs return o -- | A convenience alias for `Nothing` :: `Maybe` `AudioCdSrcTrack`. noAudioCdSrcTrack :: Maybe AudioCdSrcTrack noAudioCdSrcTrack = Nothing {- | Get the value of the “@is_audio@” field. When is enabled, this is equivalent to @ 'Data.GI.Base.Attributes.get' audioCdSrcTrack #isAudio @ -} getAudioCdSrcTrackIsAudio :: MonadIO m => AudioCdSrcTrack -> m Bool getAudioCdSrcTrackIsAudio s = liftIO $ withManagedPtr s $ \ptr -> do val <- peek (ptr `plusPtr` 0) :: IO CInt let val' = (/= 0) val return val' {- | Set the value of the “@is_audio@” field. When is enabled, this is equivalent to @ 'Data.GI.Base.Attributes.set' audioCdSrcTrack [ #isAudio 'Data.GI.Base.Attributes.:=' value ] @ -} setAudioCdSrcTrackIsAudio :: MonadIO m => AudioCdSrcTrack -> Bool -> m () setAudioCdSrcTrackIsAudio s val = liftIO $ withManagedPtr s $ \ptr -> do let val' = (fromIntegral . fromEnum) val poke (ptr `plusPtr` 0) (val' :: CInt) #if ENABLE_OVERLOADING data AudioCdSrcTrackIsAudioFieldInfo instance AttrInfo AudioCdSrcTrackIsAudioFieldInfo where type AttrAllowedOps AudioCdSrcTrackIsAudioFieldInfo = '[ 'AttrSet, 'AttrGet] type AttrSetTypeConstraint AudioCdSrcTrackIsAudioFieldInfo = (~) Bool type AttrBaseTypeConstraint AudioCdSrcTrackIsAudioFieldInfo = (~) AudioCdSrcTrack type AttrGetType AudioCdSrcTrackIsAudioFieldInfo = Bool type AttrLabel AudioCdSrcTrackIsAudioFieldInfo = "is_audio" type AttrOrigin AudioCdSrcTrackIsAudioFieldInfo = AudioCdSrcTrack attrGet _ = getAudioCdSrcTrackIsAudio attrSet _ = setAudioCdSrcTrackIsAudio attrConstruct = undefined attrClear _ = undefined audioCdSrcTrack_isAudio :: AttrLabelProxy "isAudio" audioCdSrcTrack_isAudio = AttrLabelProxy #endif {- | Get the value of the “@num@” field. When is enabled, this is equivalent to @ 'Data.GI.Base.Attributes.get' audioCdSrcTrack #num @ -} getAudioCdSrcTrackNum :: MonadIO m => AudioCdSrcTrack -> m Word32 getAudioCdSrcTrackNum s = liftIO $ withManagedPtr s $ \ptr -> do val <- peek (ptr `plusPtr` 4) :: IO Word32 return val {- | Set the value of the “@num@” field. When is enabled, this is equivalent to @ 'Data.GI.Base.Attributes.set' audioCdSrcTrack [ #num 'Data.GI.Base.Attributes.:=' value ] @ -} setAudioCdSrcTrackNum :: MonadIO m => AudioCdSrcTrack -> Word32 -> m () setAudioCdSrcTrackNum s val = liftIO $ withManagedPtr s $ \ptr -> do poke (ptr `plusPtr` 4) (val :: Word32) #if ENABLE_OVERLOADING data AudioCdSrcTrackNumFieldInfo instance AttrInfo AudioCdSrcTrackNumFieldInfo where type AttrAllowedOps AudioCdSrcTrackNumFieldInfo = '[ 'AttrSet, 'AttrGet] type AttrSetTypeConstraint AudioCdSrcTrackNumFieldInfo = (~) Word32 type AttrBaseTypeConstraint AudioCdSrcTrackNumFieldInfo = (~) AudioCdSrcTrack type AttrGetType AudioCdSrcTrackNumFieldInfo = Word32 type AttrLabel AudioCdSrcTrackNumFieldInfo = "num" type AttrOrigin AudioCdSrcTrackNumFieldInfo = AudioCdSrcTrack attrGet _ = getAudioCdSrcTrackNum attrSet _ = setAudioCdSrcTrackNum attrConstruct = undefined attrClear _ = undefined audioCdSrcTrack_num :: AttrLabelProxy "num" audioCdSrcTrack_num = AttrLabelProxy #endif {- | Get the value of the “@start@” field. When is enabled, this is equivalent to @ 'Data.GI.Base.Attributes.get' audioCdSrcTrack #start @ -} getAudioCdSrcTrackStart :: MonadIO m => AudioCdSrcTrack -> m Word32 getAudioCdSrcTrackStart s = liftIO $ withManagedPtr s $ \ptr -> do val <- peek (ptr `plusPtr` 8) :: IO Word32 return val {- | Set the value of the “@start@” field. When is enabled, this is equivalent to @ 'Data.GI.Base.Attributes.set' audioCdSrcTrack [ #start 'Data.GI.Base.Attributes.:=' value ] @ -} setAudioCdSrcTrackStart :: MonadIO m => AudioCdSrcTrack -> Word32 -> m () setAudioCdSrcTrackStart s val = liftIO $ withManagedPtr s $ \ptr -> do poke (ptr `plusPtr` 8) (val :: Word32) #if ENABLE_OVERLOADING data AudioCdSrcTrackStartFieldInfo instance AttrInfo AudioCdSrcTrackStartFieldInfo where type AttrAllowedOps AudioCdSrcTrackStartFieldInfo = '[ 'AttrSet, 'AttrGet] type AttrSetTypeConstraint AudioCdSrcTrackStartFieldInfo = (~) Word32 type AttrBaseTypeConstraint AudioCdSrcTrackStartFieldInfo = (~) AudioCdSrcTrack type AttrGetType AudioCdSrcTrackStartFieldInfo = Word32 type AttrLabel AudioCdSrcTrackStartFieldInfo = "start" type AttrOrigin AudioCdSrcTrackStartFieldInfo = AudioCdSrcTrack attrGet _ = getAudioCdSrcTrackStart attrSet _ = setAudioCdSrcTrackStart attrConstruct = undefined attrClear _ = undefined audioCdSrcTrack_start :: AttrLabelProxy "start" audioCdSrcTrack_start = AttrLabelProxy #endif {- | Get the value of the “@end@” field. When is enabled, this is equivalent to @ 'Data.GI.Base.Attributes.get' audioCdSrcTrack #end @ -} getAudioCdSrcTrackEnd :: MonadIO m => AudioCdSrcTrack -> m Word32 getAudioCdSrcTrackEnd s = liftIO $ withManagedPtr s $ \ptr -> do val <- peek (ptr `plusPtr` 12) :: IO Word32 return val {- | Set the value of the “@end@” field. When is enabled, this is equivalent to @ 'Data.GI.Base.Attributes.set' audioCdSrcTrack [ #end 'Data.GI.Base.Attributes.:=' value ] @ -} setAudioCdSrcTrackEnd :: MonadIO m => AudioCdSrcTrack -> Word32 -> m () setAudioCdSrcTrackEnd s val = liftIO $ withManagedPtr s $ \ptr -> do poke (ptr `plusPtr` 12) (val :: Word32) #if ENABLE_OVERLOADING data AudioCdSrcTrackEndFieldInfo instance AttrInfo AudioCdSrcTrackEndFieldInfo where type AttrAllowedOps AudioCdSrcTrackEndFieldInfo = '[ 'AttrSet, 'AttrGet] type AttrSetTypeConstraint AudioCdSrcTrackEndFieldInfo = (~) Word32 type AttrBaseTypeConstraint AudioCdSrcTrackEndFieldInfo = (~) AudioCdSrcTrack type AttrGetType AudioCdSrcTrackEndFieldInfo = Word32 type AttrLabel AudioCdSrcTrackEndFieldInfo = "end" type AttrOrigin AudioCdSrcTrackEndFieldInfo = AudioCdSrcTrack attrGet _ = getAudioCdSrcTrackEnd attrSet _ = setAudioCdSrcTrackEnd attrConstruct = undefined attrClear _ = undefined audioCdSrcTrack_end :: AttrLabelProxy "end" audioCdSrcTrack_end = AttrLabelProxy #endif {- | Get the value of the “@tags@” field. When is enabled, this is equivalent to @ 'Data.GI.Base.Attributes.get' audioCdSrcTrack #tags @ -} getAudioCdSrcTrackTags :: MonadIO m => AudioCdSrcTrack -> m (Maybe Gst.TagList.TagList) getAudioCdSrcTrackTags s = liftIO $ withManagedPtr s $ \ptr -> do val <- peek (ptr `plusPtr` 16) :: IO (Ptr Gst.TagList.TagList) result <- SP.convertIfNonNull val $ \val' -> do val'' <- (newBoxed Gst.TagList.TagList) val' return val'' return result {- | Set the value of the “@tags@” field. When is enabled, this is equivalent to @ 'Data.GI.Base.Attributes.set' audioCdSrcTrack [ #tags 'Data.GI.Base.Attributes.:=' value ] @ -} setAudioCdSrcTrackTags :: MonadIO m => AudioCdSrcTrack -> Ptr Gst.TagList.TagList -> m () setAudioCdSrcTrackTags s val = liftIO $ withManagedPtr s $ \ptr -> do poke (ptr `plusPtr` 16) (val :: Ptr Gst.TagList.TagList) {- | Set the value of the “@tags@” field to `Nothing`. When is enabled, this is equivalent to @ 'Data.GI.Base.Attributes.clear' #tags @ -} clearAudioCdSrcTrackTags :: MonadIO m => AudioCdSrcTrack -> m () clearAudioCdSrcTrackTags s = liftIO $ withManagedPtr s $ \ptr -> do poke (ptr `plusPtr` 16) (FP.nullPtr :: Ptr Gst.TagList.TagList) #if ENABLE_OVERLOADING data AudioCdSrcTrackTagsFieldInfo instance AttrInfo AudioCdSrcTrackTagsFieldInfo where type AttrAllowedOps AudioCdSrcTrackTagsFieldInfo = '[ 'AttrSet, 'AttrGet, 'AttrClear] type AttrSetTypeConstraint AudioCdSrcTrackTagsFieldInfo = (~) (Ptr Gst.TagList.TagList) type AttrBaseTypeConstraint AudioCdSrcTrackTagsFieldInfo = (~) AudioCdSrcTrack type AttrGetType AudioCdSrcTrackTagsFieldInfo = Maybe Gst.TagList.TagList type AttrLabel AudioCdSrcTrackTagsFieldInfo = "tags" type AttrOrigin AudioCdSrcTrackTagsFieldInfo = AudioCdSrcTrack attrGet _ = getAudioCdSrcTrackTags attrSet _ = setAudioCdSrcTrackTags attrConstruct = undefined attrClear _ = clearAudioCdSrcTrackTags audioCdSrcTrack_tags :: AttrLabelProxy "tags" audioCdSrcTrack_tags = AttrLabelProxy #endif #if ENABLE_OVERLOADING instance O.HasAttributeList AudioCdSrcTrack type instance O.AttributeList AudioCdSrcTrack = AudioCdSrcTrackAttributeList type AudioCdSrcTrackAttributeList = ('[ '("isAudio", AudioCdSrcTrackIsAudioFieldInfo), '("num", AudioCdSrcTrackNumFieldInfo), '("start", AudioCdSrcTrackStartFieldInfo), '("end", AudioCdSrcTrackEndFieldInfo), '("tags", AudioCdSrcTrackTagsFieldInfo)] :: [(Symbol, *)]) #endif #if ENABLE_OVERLOADING type family ResolveAudioCdSrcTrackMethod (t :: Symbol) (o :: *) :: * where ResolveAudioCdSrcTrackMethod l o = O.MethodResolutionFailed l o instance (info ~ ResolveAudioCdSrcTrackMethod t AudioCdSrcTrack, O.MethodInfo info AudioCdSrcTrack p) => OL.IsLabel t (AudioCdSrcTrack -> p) where #if MIN_VERSION_base(4,10,0) fromLabel = O.overloadedMethod (O.MethodProxy :: O.MethodProxy info) #else fromLabel _ = O.overloadedMethod (O.MethodProxy :: O.MethodProxy info) #endif #endif