module Sound.Libcdio.Device
(
Foreign.HardwareInfo ( .. )
, Foreign.emptyHardwareInfo
, Foreign.DriverId ( .. )
, Foreign.DriverReturnCode ( .. )
, Foreign.DriveCaps
, Foreign.DriveCapabilityRead ( .. )
, Foreign.DriveReadCaps
, Foreign.DriveCapabilityWrite ( .. )
, Foreign.DriveWriteCaps
, Foreign.capsWriteCd
, Foreign.capsWriteDvd
, Foreign.capsWrite
, Foreign.DriveCapabilityMisc ( .. )
, Foreign.DriveMiscCaps
, driver
, Foreign.drivers
, Foreign.osDriver
, isImageDriver
, isDevice
, setBlocksize
, setSpeed
, isMediaChanged
, Foreign.devices
, Foreign.defaultDevice
, Foreign.defaultDeviceDriver
, capabilities
, deviceCapabilities
, isCue
, Foreign.isToc
, Foreign.isNrg
, hardware
, haveAtapi
, ejectDevice
, closeDeviceTray
, closeDeviceTray'
) where
import qualified Data.Maybe as Y
import qualified Foreign.Libcdio.Device as Foreign
import Sound.Libcdio.Types.Cdio
driver :: Cdio Foreign.DriverId
driver :: Cdio DriverId
driver = (Cdio -> IO DriverId) -> Cdio DriverId
forall a. (Cdio -> IO a) -> Cdio a
liftCdio ((Cdio -> IO DriverId) -> Cdio DriverId)
-> (Cdio -> IO DriverId) -> Cdio DriverId
forall a b. (a -> b) -> a -> b
$ (Maybe DriverId -> DriverId) -> IO (Maybe DriverId) -> IO DriverId
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (DriverId -> Maybe DriverId -> DriverId
forall a. a -> Maybe a -> a
Y.fromMaybe DriverId
Foreign.DriverUnknown) (IO (Maybe DriverId) -> IO DriverId)
-> (Cdio -> IO (Maybe DriverId)) -> Cdio -> IO DriverId
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Cdio -> IO (Maybe DriverId)
Foreign.driverId
isImageDriver :: Foreign.DriverId -> Bool
isImageDriver :: DriverId -> Bool
isImageDriver = Bool -> Bool
not (Bool -> Bool) -> (DriverId -> Bool) -> DriverId -> Bool
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (DriverId -> [DriverId] -> Bool) -> [DriverId] -> DriverId -> Bool
forall a b c. (a -> b -> c) -> b -> a -> c
flip DriverId -> [DriverId] -> Bool
forall (t :: * -> *) a. (Foldable t, Eq a) => a -> t a -> Bool
elem [DriverId]
Foreign.deviceDrivers
hardware :: Cdio Foreign.HardwareInfo
hardware :: Cdio HardwareInfo
hardware = (Cdio -> IO HardwareInfo) -> Cdio HardwareInfo
forall a. (Cdio -> IO a) -> Cdio a
liftCdio ((Cdio -> IO HardwareInfo) -> Cdio HardwareInfo)
-> (Cdio -> IO HardwareInfo) -> Cdio HardwareInfo
forall a b. (a -> b) -> a -> b
$ (Maybe HardwareInfo -> HardwareInfo)
-> IO (Maybe HardwareInfo) -> IO HardwareInfo
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (HardwareInfo -> Maybe HardwareInfo -> HardwareInfo
forall a. a -> Maybe a -> a
Y.fromMaybe HardwareInfo
Foreign.emptyHardwareInfo) (IO (Maybe HardwareInfo) -> IO HardwareInfo)
-> (Cdio -> IO (Maybe HardwareInfo)) -> Cdio -> IO HardwareInfo
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Cdio -> IO (Maybe HardwareInfo)
Foreign.hwinfo
capabilities :: Cdio Foreign.DriveCaps
capabilities :: Cdio DriveCaps
capabilities = (Cdio -> IO DriveCaps) -> Cdio DriveCaps
forall a. (Cdio -> IO a) -> Cdio a
liftCdio Cdio -> IO DriveCaps
Foreign.driveCap
haveAtapi :: Cdio (Maybe Bool)
haveAtapi :: Cdio (Maybe Bool)
haveAtapi = (Cdio -> IO (Maybe Bool)) -> Cdio (Maybe Bool)
forall a. (Cdio -> IO a) -> Cdio a
liftCdio Cdio -> IO (Maybe Bool)
Foreign.haveAtapi
deviceCapabilities :: FilePath -> IO Foreign.DriveCaps
deviceCapabilities :: FilePath -> IO DriveCaps
deviceCapabilities = FilePath -> IO DriveCaps
Foreign.driveCapDevice
ejectDevice :: Maybe FilePath -> IO Foreign.DriverReturnCode
ejectDevice :: Maybe FilePath -> IO DriverReturnCode
ejectDevice = Maybe FilePath -> IO DriverReturnCode
Foreign.ejectDrive
closeDeviceTray :: Maybe FilePath -> IO Foreign.DriverReturnCode
closeDeviceTray :: Maybe FilePath -> IO DriverReturnCode
closeDeviceTray = ((DriverReturnCode, DriverId) -> DriverReturnCode)
-> IO (DriverReturnCode, DriverId) -> IO DriverReturnCode
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (DriverReturnCode, DriverId) -> DriverReturnCode
forall a b. (a, b) -> a
fst (IO (DriverReturnCode, DriverId) -> IO DriverReturnCode)
-> (Maybe FilePath -> IO (DriverReturnCode, DriverId))
-> Maybe FilePath
-> IO DriverReturnCode
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Maybe FilePath -> DriverId -> IO (DriverReturnCode, DriverId))
-> DriverId -> Maybe FilePath -> IO (DriverReturnCode, DriverId)
forall a b c. (a -> b -> c) -> b -> a -> c
flip Maybe FilePath -> DriverId -> IO (DriverReturnCode, DriverId)
Foreign.closeTray DriverId
Foreign.DriverUnknown
closeDeviceTray' :: Maybe FilePath -> Foreign.DriverId -> IO Foreign.DriverReturnCode
closeDeviceTray' :: Maybe FilePath -> DriverId -> IO DriverReturnCode
closeDeviceTray' Maybe FilePath
p = ((DriverReturnCode, DriverId) -> DriverReturnCode)
-> IO (DriverReturnCode, DriverId) -> IO DriverReturnCode
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (DriverReturnCode, DriverId) -> DriverReturnCode
forall a b. (a, b) -> a
fst (IO (DriverReturnCode, DriverId) -> IO DriverReturnCode)
-> (DriverId -> IO (DriverReturnCode, DriverId))
-> DriverId
-> IO DriverReturnCode
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Maybe FilePath -> DriverId -> IO (DriverReturnCode, DriverId)
Foreign.closeTray Maybe FilePath
p
setBlocksize :: Int -> Cdio Foreign.DriverReturnCode
setBlocksize :: Int -> Cdio DriverReturnCode
setBlocksize Int
s = (Cdio -> IO DriverReturnCode) -> Cdio DriverReturnCode
forall a. (Cdio -> IO a) -> Cdio a
liftCdio ((Cdio -> IO DriverReturnCode) -> Cdio DriverReturnCode)
-> (Cdio -> IO DriverReturnCode) -> Cdio DriverReturnCode
forall a b. (a -> b) -> a -> b
$ (Cdio -> Int -> IO DriverReturnCode)
-> Int -> Cdio -> IO DriverReturnCode
forall a b c. (a -> b -> c) -> b -> a -> c
flip Cdio -> Int -> IO DriverReturnCode
Foreign.setBlocksize Int
s
setSpeed :: Int -> Cdio Foreign.DriverReturnCode
setSpeed :: Int -> Cdio DriverReturnCode
setSpeed Int
s = (Cdio -> IO DriverReturnCode) -> Cdio DriverReturnCode
forall a. (Cdio -> IO a) -> Cdio a
liftCdio ((Cdio -> IO DriverReturnCode) -> Cdio DriverReturnCode)
-> (Cdio -> IO DriverReturnCode) -> Cdio DriverReturnCode
forall a b. (a -> b) -> a -> b
$ (Cdio -> Int -> IO DriverReturnCode)
-> Int -> Cdio -> IO DriverReturnCode
forall a b c. (a -> b -> c) -> b -> a -> c
flip Cdio -> Int -> IO DriverReturnCode
Foreign.setSpeed Int
s
isMediaChanged :: Cdio (Either Foreign.DriverReturnCode Bool)
isMediaChanged :: Cdio (Either DriverReturnCode Bool)
isMediaChanged = (Cdio -> IO (Either DriverReturnCode Bool))
-> Cdio (Either DriverReturnCode Bool)
forall a. (Cdio -> IO a) -> Cdio a
liftCdio Cdio -> IO (Either DriverReturnCode Bool)
Foreign.isMediaChanged
isCue :: FilePath -> IO Bool
isCue :: FilePath -> IO Bool
isCue = (Maybe FilePath -> Bool) -> IO (Maybe FilePath) -> IO Bool
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap Maybe FilePath -> Bool
forall a. Maybe a -> Bool
Y.isJust (IO (Maybe FilePath) -> IO Bool)
-> (FilePath -> IO (Maybe FilePath)) -> FilePath -> IO Bool
forall b c a. (b -> c) -> (a -> b) -> a -> c
. FilePath -> IO (Maybe FilePath)
Foreign.binFromCue
isDevice :: FilePath -> IO Bool
isDevice :: FilePath -> IO Bool
isDevice = (FilePath -> DriverId -> IO Bool)
-> DriverId -> FilePath -> IO Bool
forall a b c. (a -> b -> c) -> b -> a -> c
flip FilePath -> DriverId -> IO Bool
Foreign.isDevice DriverId
Foreign.DriverDevice