{-# LANGUAGE OverloadedStrings #-}
module Network.MPD.Applicative.Database
( count
, find
, findAdd
, list
, listAll
, listAllInfo
, lsInfo
, readComments
, search
, searchAdd
, searchAddPl
, update
, rescan
) where
import qualified Network.MPD.Commands.Arg as Arg
import Network.MPD.Commands.Arg hiding (Command)
import Network.MPD.Commands.Parse
import Network.MPD.Commands.Query
import Network.MPD.Util
import Network.MPD.Commands.Types
import Network.MPD.Applicative.Internal
import Network.MPD.Applicative.Util
count :: Query -> Command Count
count :: Query -> Command Count
count Query
q = forall a. Parser a -> [String] -> Command a
Command (forall a. ([ByteString] -> Either String a) -> Parser a
liftParser [ByteString] -> Either String Count
parseCount) [Command
"count" forall a. MPDArg a => Command -> a -> String
<@> Query
q]
find :: Query -> Command [Song]
find :: Query -> Command [Song]
find Query
q = forall a. Parser a -> [String] -> Command a
Command Parser [Song]
p [Command
"find" forall a. MPDArg a => Command -> a -> String
<@> Query
q]
where
p :: Parser [Song]
p :: Parser [Song]
p = forall a. ([ByteString] -> Either String a) -> Parser a
liftParser [ByteString] -> Either String [Song]
takeSongs
findAdd :: Query -> Command ()
findAdd :: Query -> Command ()
findAdd Query
q = forall a. Parser a -> [String] -> Command a
Command Parser ()
emptyResponse [Command
"findadd" forall a. MPDArg a => Command -> a -> String
<@> Query
q]
list :: Metadata -> Query -> Command [Value]
list :: Metadata -> Query -> Command [Value]
list Metadata
m Query
q = forall a. Parser a -> [String] -> Command a
Command Parser [Value]
p [String]
c
where
p :: Parser [Value]
p = forall a b. (a -> b) -> [a] -> [b]
map ByteString -> Value
Value forall b c a. (b -> c) -> (a -> b) -> a -> c
. [ByteString] -> [ByteString]
takeValues forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Parser [ByteString]
getResponse
c :: [String]
c = [Command
"list" forall a. MPDArg a => Command -> a -> String
<@> Metadata
m forall a b. (MPDArg a, MPDArg b) => a -> b -> Args
<++> Query
q]
listAll :: Path -> Command [Path]
listAll :: Path -> Command [Path]
listAll Path
path = forall a. Parser a -> [String] -> Command a
Command Parser [Path]
p [Command
"listall" forall a. MPDArg a => Command -> a -> String
<@> Path
path]
where
p :: Parser [Path]
p :: Parser [Path]
p = forall a b. (a -> b) -> [a] -> [b]
map (ByteString -> Path
Path forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a b. (a, b) -> b
snd) forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. (a -> Bool) -> [a] -> [a]
filter ((forall a. Eq a => a -> a -> Bool
== ByteString
"file") forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a b. (a, b) -> a
fst)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [ByteString] -> [(ByteString, ByteString)]
toAssocList forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Parser [ByteString]
getResponse
lsInfo' :: Arg.Command -> Path -> Command [LsResult]
lsInfo' :: Command -> Path -> Command [LsResult]
lsInfo' Command
cmd Path
path = forall a. Parser a -> [String] -> Command a
Command Parser [LsResult]
p [Command
cmd forall a. MPDArg a => Command -> a -> String
<@> Path
path]
where
p :: Parser [LsResult]
p :: Parser [LsResult]
p = forall a. ([ByteString] -> Either String a) -> Parser a
liftParser [ByteString] -> Either String [LsResult]
takeEntries
listAllInfo :: Path -> Command [LsResult]
listAllInfo :: Path -> Command [LsResult]
listAllInfo = Command -> Path -> Command [LsResult]
lsInfo' Command
"listallinfo"
lsInfo :: Path -> Command [LsResult]
lsInfo :: Path -> Command [LsResult]
lsInfo = Command -> Path -> Command [LsResult]
lsInfo' Command
"lsinfo"
readComments :: Path -> Command [(String, String)]
Path
uri = forall a. Parser a -> [String] -> Command a
Command Parser [(String, String)]
p [Command
"readcomments" forall a. MPDArg a => Command -> a -> String
<@> Path
uri]
where p :: Parser [(String, String)]
p = forall a b. (a -> b) -> [a] -> [b]
map (ByteString, ByteString) -> (String, String)
decodePair forall b c a. (b -> c) -> (a -> b) -> a -> c
. [ByteString] -> [(ByteString, ByteString)]
toAssocList forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Parser [ByteString]
getResponse
search :: Query -> Command [Song]
search :: Query -> Command [Song]
search Query
q = forall a. Parser a -> [String] -> Command a
Command Parser [Song]
p [Command
"search" forall a. MPDArg a => Command -> a -> String
<@> Query
q]
where
p :: Parser [Song]
p :: Parser [Song]
p = forall a. ([ByteString] -> Either String a) -> Parser a
liftParser [ByteString] -> Either String [Song]
takeSongs
searchAdd :: Query -> Command ()
searchAdd :: Query -> Command ()
searchAdd Query
q = forall a. Parser a -> [String] -> Command a
Command Parser ()
emptyResponse [Command
"searchadd" forall a. MPDArg a => Command -> a -> String
<@> Query
q]
searchAddPl :: PlaylistName -> Query -> Command ()
searchAddPl :: PlaylistName -> Query -> Command ()
searchAddPl PlaylistName
pl Query
q = forall a. Parser a -> [String] -> Command a
Command Parser ()
emptyResponse [Command
"searchaddpl" forall a. MPDArg a => Command -> a -> String
<@> PlaylistName
pl forall a b. (MPDArg a, MPDArg b) => a -> b -> Args
<++> Query
q]
update :: Maybe Path -> Command Integer
update :: Maybe Path -> Command Integer
update = Command -> Maybe Path -> Command Integer
update_ Command
"update"
rescan :: Maybe Path -> Command Integer
rescan :: Maybe Path -> Command Integer
rescan = Command -> Maybe Path -> Command Integer
update_ Command
"rescan"
update_ :: Arg.Command -> Maybe Path -> Command Integer
update_ :: Command -> Maybe Path -> Command Integer
update_ Command
cmd Maybe Path
mPath = forall a. Parser a -> [String] -> Command a
Command Parser Integer
p [Command
cmd forall a. MPDArg a => Command -> a -> String
<@> Maybe Path
mPath]
where
p :: Parser Integer
p :: Parser Integer
p = do
[ByteString]
r <- Parser [ByteString]
getResponse
case [ByteString] -> [(ByteString, ByteString)]
toAssocList [ByteString]
r of
[(ByteString
"updating_db", ByteString
id_)] -> forall b a. b -> (a -> b) -> Maybe a -> b
maybe (forall a. [ByteString] -> Parser a
unexpected [ByteString]
r)
forall (m :: * -> *) a. Monad m => a -> m a
return
(forall a. (Read a, Integral a) => ByteString -> Maybe a
parseNum ByteString
id_)
[(ByteString, ByteString)]
_ -> forall a. [ByteString] -> Parser a
unexpected [ByteString]
r