module Network.XMMS.Playback (
SeekMode(..),
tickle,
stop,
pause,
start,
seekmsAbs,
seekmsRel,
seekms,
seekSamplesAbs,
seekSamplesRel,
seekSamples,
broadcastStatus,
status,
broadcastCurrentID,
currentID,
signalPlaytime,
playtime,
volumeGet,
volumeSet,
broadcastVolumeChanged
) where
import Network.XMMS.Constants
import Network.XMMS.Types
import Network.XMMS.Utilities
import Foreign
import Foreign.Ptr
import Foreign.C.Types
import Network.XMMS.UTF8Strings
import Foreign.ForeignPtr
import Foreign.Marshal.Alloc
foreign import ccall unsafe "xmmsclient/xmmsclient.h xmmsc_playback_tickle"
xmmsc_playback_tickle :: Ptr C_xmmsc_connection -> IO (Ptr C_xmmsc_result)
tickle :: Connection -> IO Result
tickle = wrapCallResult xmmsc_playback_tickle
foreign import ccall unsafe "xmmsclient/xmmsclient.h xmmsc_playback_stop"
xmmsc_playback_stop :: Ptr C_xmmsc_connection -> IO (Ptr C_xmmsc_result)
stop :: Connection -> IO Result
stop = wrapCallResult xmmsc_playback_stop
foreign import ccall unsafe "xmmsclient/xmmsclient.h xmmsc_playback_pause"
xmmsc_playback_pause :: Ptr C_xmmsc_connection -> IO (Ptr C_xmmsc_result)
pause :: Connection -> IO Result
pause = wrapCallResult xmmsc_playback_pause
foreign import ccall unsafe "xmmsclient/xmmsclient.h xmmsc_playback_start"
xmmsc_playback_start :: Ptr C_xmmsc_connection -> IO (Ptr C_xmmsc_result)
start :: Connection -> IO Result
start = wrapCallResult xmmsc_playback_start
foreign import ccall unsafe "xmmsclient/xmmsclient.h xmmsc_playback_seek_ms_abs"
xmmsc_playback_seek_ms_abs :: Ptr C_xmmsc_connection -> CInt -> IO (Ptr C_xmmsc_result)
seekmsAbs :: Connection -> Int -> IO Result
seekmsAbs = flip $ wrapCallResult.(flip xmmsc_playback_seek_ms_abs).fromIntegral
foreign import ccall unsafe "xmmsclient/xmmsclient.h xmmsc_playback_seek_ms_rel"
xmmsc_playback_seek_ms_rel :: Ptr C_xmmsc_connection -> CInt -> IO (Ptr C_xmmsc_result)
seekmsRel :: Connection -> Int -> IO Result
seekmsRel = flip $ wrapCallResult.(flip xmmsc_playback_seek_ms_rel).fromIntegral
foreign import ccall unsafe "xmmsclient/xmmsclient.h xmmsc_playback_seek_ms"
xmmsc_playback_seek_ms :: Ptr C_xmmsc_connection -> CInt -> CInt -> IO (Ptr C_xmmsc_result)
seekms :: Connection -> Int -> SeekMode -> IO Result
seekms connection ms mode =
wrapCallResult (\c -> xmmsc_playback_seek_ms c
(fromIntegral ms)
(fromSeekMode mode)) connection
foreign import ccall unsafe "xmmsclient/xmmsclient.h xmmsc_playback_seek_samples_abs"
xmmsc_playback_seek_samples_abs :: Ptr C_xmmsc_connection -> CInt -> IO (Ptr C_xmmsc_result)
seekSamplesAbs :: Connection -> Int -> IO Result
seekSamplesAbs = flip $ wrapCallResult.(flip xmmsc_playback_seek_samples_abs).fromIntegral
foreign import ccall unsafe "xmmsclient/xmmsclient.h xmmsc_playback_seek_samples_rel"
xmmsc_playback_seek_samples_rel :: Ptr C_xmmsc_connection -> CInt -> IO (Ptr C_xmmsc_result)
seekSamplesRel :: Connection -> Int -> IO Result
seekSamplesRel = flip $ wrapCallResult.(flip xmmsc_playback_seek_samples_rel).fromIntegral
foreign import ccall unsafe "xmmsclient/xmmsclient.h xmmsc_playback_seek_samples"
xmmsc_playback_seek_samples :: Ptr C_xmmsc_connection -> CInt -> CInt -> IO (Ptr C_xmmsc_result)
seekSamples :: Connection -> Int -> SeekMode -> IO Result
seekSamples connection samples mode =
wrapCallResult (\c -> xmmsc_playback_seek_samples c
(fromIntegral samples)
(fromSeekMode mode)) connection
foreign import ccall unsafe "xmmsclient/xmmsclient.h xmmsc_broadcast_playback_status"
xmmsc_broadcast_playback_status :: Ptr C_xmmsc_connection -> IO (Ptr C_xmmsc_result)
broadcastStatus :: Connection -> IO Result
broadcastStatus = wrapCallResult xmmsc_broadcast_playback_status
foreign import ccall unsafe "xmmsclient/xmmsclient.h xmmsc_playback_status"
xmmsc_playback_status :: Ptr C_xmmsc_connection -> IO (Ptr C_xmmsc_result)
status :: Connection -> IO Result
status = wrapCallResult xmmsc_playback_status
foreign import ccall unsafe "xmmsclient/xmmsclient.h xmmsc_broadcast_playback_current_id"
xmmsc_broadcast_playback_current_id :: Ptr C_xmmsc_connection -> IO (Ptr C_xmmsc_result)
broadcastCurrentID :: Connection -> IO Result
broadcastCurrentID = wrapCallResult xmmsc_broadcast_playback_current_id
foreign import ccall unsafe "xmmsclient/xmmsclient.h xmmsc_playback_current_id"
xmmsc_playback_current_id :: Ptr C_xmmsc_connection -> IO (Ptr C_xmmsc_result)
currentID :: Connection -> IO Result
currentID = wrapCallResult xmmsc_playback_current_id
foreign import ccall unsafe "xmmsclient/xmmsclient.h xmmsc_signal_playback_playtime"
xmmsc_signal_playback_playtime :: Ptr C_xmmsc_connection -> IO (Ptr C_xmmsc_result)
signalPlaytime :: Connection -> IO Result
signalPlaytime = wrapCallResult xmmsc_signal_playback_playtime
foreign import ccall unsafe "xmmsclient/xmmsclient.h xmmsc_playback_playtime"
xmmsc_playback_playtime :: Ptr C_xmmsc_connection -> IO (Ptr C_xmmsc_result)
playtime :: Connection -> IO Result
playtime = wrapCallResult xmmsc_playback_playtime
foreign import ccall unsafe "xmmsclient/xmmsclient.h xmmsc_playback_volume_set"
xmmsc_playback_volume_set :: Ptr C_xmmsc_connection -> CString -> CInt -> IO (Ptr C_xmmsc_result)
volumeSet :: Connection -> String -> Int -> IO Result
volumeSet connection name volume = do
c_name <- newCString name
res <- wrapCallResult (\c -> xmmsc_playback_volume_set c
c_name
(fromIntegral volume)) connection
free c_name
return res
foreign import ccall unsafe "xmmsclient/xmmsclient.h xmmsc_playback_volume_get"
xmmsc_playback_volume_get :: Ptr C_xmmsc_connection -> IO (Ptr C_xmmsc_result)
volumeGet :: Connection -> IO Result
volumeGet = wrapCallResult xmmsc_playback_volume_get
foreign import ccall unsafe "xmmsclient/xmmsclient.h xmmsc_broadcast_playback_volume_changed"
xmmsc_broadcast_playback_volume_changed :: Ptr C_xmmsc_connection -> IO (Ptr C_xmmsc_result)
broadcastVolumeChanged :: Connection -> IO Result
broadcastVolumeChanged = wrapCallResult xmmsc_broadcast_playback_volume_changed