module Network.XMMS.Result where
import Foreign
import Foreign.Ptr
import Foreign.C.Types
import Foreign.C.String
import Foreign.ForeignPtr
import Foreign.Marshal.Alloc
import Network.XMMS.Constants
import Network.XMMS.Types
import Network.XMMS.Value
import Network.XMMS.Utilities
foreign import ccall unsafe "xmmsclient/xmmsclient.h xmmsc_result_disconnect"
xmmsc_result_disconnect :: Ptr C_xmmsc_result -> IO ()
resultDisconnect :: Result -> IO ()
resultDisconnect result = withForeignPtr result xmmsc_result_disconnect
foreign import ccall "wrapper"
wrapper :: (Ptr C_xmmsc_value -> Ptr () -> IO CInt) -> IO (FunPtr (Ptr C_xmmsc_value -> Ptr () -> IO CInt))
xmmsCallback :: (XMMSCV -> IO Bool) -> IO (FunPtr (Ptr C_xmmsc_value -> Ptr () -> IO CInt))
xmmsCallback f = do
let c_f valuePtr ptr = do
value <- convertValueCtoHs valuePtr
keepAlive <- f value
if keepAlive then return 1 else return 0
wrapper c_f
foreign import ccall safe "xmmsclient/xmmsclient.h xmmsc_result_notifier_set"
xmmsc_result_notifier_set :: Ptr C_xmmsc_result -> FunPtr (Ptr C_xmmsc_value -> Ptr () -> IO CInt) -> Ptr () -> IO ()
resultNotifierSet :: Result -> (XMMSCV -> IO Bool) -> IO ()
resultNotifierSet result f = do
xmmsF <- xmmsCallback f
withForeignPtr result (\ptr -> xmmsc_result_notifier_set ptr xmmsF nullPtr)
foreign import ccall unsafe "xmmsclient/xmmsclient.h xmmsc_result_wait"
xmmsc_result_wait :: Ptr C_xmmsc_result -> IO ()
resultWait :: Result -> IO ()
resultWait result = withForeignPtr result xmmsc_result_wait
foreign import ccall unsafe "xmmsclient/xmmsclient.h xmmsc_result_get_connection"
xmmsc_result_get_connection :: Ptr C_xmmsc_result -> IO (Ptr C_xmmsc_connection)
resultGetConnection :: Result -> IO (Connection)
resultGetConnection result = do
conPtr <- withForeignPtr result xmmsc_result_get_connection
xmmsc_ref conPtr
newForeignPtr xmmsc_unref conPtr