packages feed

xmms2-client-0.0.6.0: src/XMMS2/Client/Medialib.hs

-- -*-haskell-*-
--  XMMS2 client library.
--
--  Author:  Oleg Belozeorov
--  Created: 15 Feb. 2010
--
--  Copyright (C) 2009-2010 Oleg Belozeorov
--
--  This library is free software; you can redistribute it and/or
--  modify it under the terms of the GNU Lesser General Public
--  License as published by the Free Software Foundation; either
--  version 3 of the License, or (at your option) any later version.
--
--  This library is distributed in the hope that it will be useful,
--  but WITHOUT ANY WARRANTY; without even the implied warranty of
--  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
--  Lesser General Public License for more details.
--

module XMMS2.Client.Medialib
  ( BrowseEntry (..)
  , medialibAddEntry
  , medialibAddEntryFull
  , medialibAddEntryEncoded
  , medialibGetInfo
  , medialibImportPath
  , medialibImportPathEncoded
  , medialibRehash
  , medialibGetId
  , medialibGetIdEncoded
  , medialibRemoveEntry
  , medialibMoveEntry
  , medialibEntryPropertySet
  , medialibEntryPropertyRemove
  , xformMediaBrowse
  , xformMediaBrowseEncoded
  , broadcastMedialibEntryChanged
  , broadcastMedialibEntryAdded
  ) where

import Control.Applicative
import Control.Monad

import XMMS2.Client.Types
import XMMS2.Client.Result

import XMMS2.Client.Bindings.Connection
import qualified XMMS2.Client.Bindings.Medialib as B


data BrowseEntry
  = BrowseEntry
    { entryPath  :: EncodedURL
    , entryIsDir :: Bool
    }

instance ValueGet BrowseEntry where
  valueGet v = do
    dict <- valueGet v
    maybe (fail "not a browse entry") return $ do
      path <- lookupString "realpath" dict <|> lookupString "path" dict
      dirp <- (1 ==) <$> lookupInt32 "isdir" dict
      return BrowseEntry { entryPath = path, entryIsDir = dirp }


medialibAddEntry
  :: Connection
  -> URL
  -> IO (Result Default ())
medialibAddEntry xmmsc url =
  liftResult $ B.medialibAddEntry xmmsc url

medialibAddEntryFull
  :: Connection
  -> URL
  -> Dict String
  -> IO (Result Default ())
medialibAddEntryFull xmmsc url args =
  liftResult $ B.medialibAddEntryFull xmmsc url =<< valueNew args

medialibAddEntryEncoded
  :: Connection
  -> EncodedURL
  -> IO (Result Default ())
medialibAddEntryEncoded xmmsc url =
  liftResult $ B.medialibAddEntryEncoded xmmsc url

medialibGetInfo
  :: Connection
  -> MediaId
  -> IO (Result Default PropDict)
medialibGetInfo xmmsc id =
  liftResult $ B.medialibGetInfo xmmsc id

medialibImportPath
  :: Connection
  -> URL
  -> IO (Result Default ())
medialibImportPath xmmsc url =
  liftResult $ B.medialibImportPath xmmsc url

medialibImportPathEncoded
  :: Connection
  -> EncodedURL
  -> IO (Result Default ())
medialibImportPathEncoded xmmsc url =
  liftResult $ B.medialibImportPathEncoded xmmsc url

medialibRehash
  :: Connection
  -> MediaId
  -> IO (Result Default ())
medialibRehash xmmsc id =
  liftResult $ B.medialibRehash xmmsc id

medialibGetId
  :: Connection
  -> URL
  -> IO (Result Default MediaId)
medialibGetId xmmsc url =
  liftResult $ B.medialibGetId xmmsc url

medialibGetIdEncoded
  :: Connection
  -> EncodedURL
  -> IO (Result Default MediaId)
medialibGetIdEncoded xmmsc url =
  liftResult $ B.medialibGetIdEncoded xmmsc url

medialibRemoveEntry
  :: Connection
  -> MediaId
  -> IO (Result Default ())
medialibRemoveEntry xmmsc id =
  liftResult $ B.medialibRemoveEntry xmmsc id

medialibMoveEntry
  :: Connection
  -> MediaId
  -> EncodedURL
  -> IO (Result Default ())
medialibMoveEntry xmmsc id url =
  liftResult $ B.medialibMoveEntry xmmsc id url

medialibEntryPropertySet
  :: Connection
  -> MediaId
  -> Maybe String
  -> String
  -> Property
  -> IO (Result Default ())
medialibEntryPropertySet xmmsc id (Just src) key (PropInt32 val) =
  liftResult $ B.medialibEntryPropertySetIntWithSource xmmsc id src key val
medialibEntryPropertySet xmmsc id Nothing key (PropInt32 val) =
  liftResult $ B.medialibEntryPropertySetInt xmmsc id key val
medialibEntryPropertySet xmmsc id (Just src) key (PropString val) =
  liftResult $ B.medialibEntryPropertySetStrWithSource xmmsc id src key val
medialibEntryPropertySet xmmsc id Nothing key (PropString val) =
  liftResult $ B.medialibEntryPropertySetStr xmmsc id key val

medialibEntryPropertyRemove
  :: Connection
  -> MediaId
  -> Maybe String
  -> String
  -> IO (Result Default ())
medialibEntryPropertyRemove xmmsc id (Just src) key =
  liftResult $ B.medialibEntryPropertyRemoveWithSource xmmsc id src key
medialibEntryPropertyRemove xmmsc id Nothing key =
  liftResult $ B.medialibEntryPropertyRemove xmmsc id key

xformMediaBrowse
  :: Connection
  -> URL
  -> IO (Result Default [BrowseEntry])
xformMediaBrowse xmmsc url =
  liftResult $ B.xformMediaBrowse xmmsc url

xformMediaBrowseEncoded
  :: Connection
  -> EncodedURL
  -> IO (Result Default [BrowseEntry])
xformMediaBrowseEncoded xmmsc url =
  liftResult $ B.xformMediaBrowseEncoded xmmsc url


broadcastMedialibEntryChanged
  :: Connection
  -> IO (Result Broadcast MediaId)
broadcastMedialibEntryChanged =
  liftResult . B.broadcastMedialibEntryChanged

broadcastMedialibEntryAdded
  :: Connection
  -> IO (Result Broadcast MediaId)
broadcastMedialibEntryAdded =
  liftResult . B.broadcastMedialibEntryAdded