{-# LANGUAGE OverloadedStrings #-}
module Network.MPD.Applicative.CurrentPlaylist
( add
, addId
, clear
, delete
, deleteRange
, deleteId
, move
, moveId
, moveRange
, playlistFind
, playlistInfo
, playlistInfoRange
, playlistId
, playlistSearch
, plChanges
, plChangesPosId
, prio
, prioId
, shuffle
, swap
, swapId
, addTagId
, clearTagId
, rangeId
) where
import Network.MPD.Commands.Arg hiding (Command)
import qualified Network.MPD.Commands.Arg as Arg
import Network.MPD.Util
import Network.MPD.Commands.Query
import Network.MPD.Commands.Parse
import Network.MPD.Commands.Types
import Network.MPD.Applicative.Internal
import Network.MPD.Applicative.Util
add :: Path -> Command ()
add :: Path -> Command ()
add Path
path = forall a. Parser a -> [[Char]] -> Command a
Command Parser ()
emptyResponse [Command
"add" forall a. MPDArg a => Command -> a -> [Char]
<@> Path
path]
addId :: Path -> Maybe Position -> Command Id
addId :: Path -> Maybe Position -> Command Id
addId Path
path Maybe Position
pos = forall a. Parser a -> [[Char]] -> Command a
Command Parser Id
p [[Char]]
c
where
c :: [[Char]]
c = [Command
"addid" forall a. MPDArg a => Command -> a -> [Char]
<@> Path
path forall a b. (MPDArg a, MPDArg b) => a -> b -> Args
<++> Maybe Position
pos]
p :: Parser Id
p = do
[ByteString]
r <- Parser [ByteString]
getResponse
case [ByteString] -> [(ByteString, ByteString)]
toAssocList [ByteString]
r of
[(ByteString
"Id", ByteString
n)] -> 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 b c a. (b -> c) -> (a -> b) -> a -> c
. Position -> Id
Id) (forall a. (Read a, Integral a) => ByteString -> Maybe a
parseNum ByteString
n)
[(ByteString, ByteString)]
_ -> forall a. [ByteString] -> Parser a
unexpected [ByteString]
r
clear :: Command ()
clear :: Command ()
clear = forall a. Parser a -> [[Char]] -> Command a
Command Parser ()
emptyResponse [[Char]
"clear"]
delete :: Position -> Command ()
delete :: Position -> Command ()
delete Position
pos = forall a. Parser a -> [[Char]] -> Command a
Command Parser ()
emptyResponse [Command
"delete" forall a. MPDArg a => Command -> a -> [Char]
<@> Position
pos]
deleteRange :: Range -> Command ()
deleteRange :: Range -> Command ()
deleteRange Range
range = forall a. Parser a -> [[Char]] -> Command a
Command Parser ()
emptyResponse [Command
"delete" forall a. MPDArg a => Command -> a -> [Char]
<@> Range
range]
deleteId :: Id -> Command ()
deleteId :: Id -> Command ()
deleteId Id
i = forall a. Parser a -> [[Char]] -> Command a
Command Parser ()
emptyResponse [Command
"deleteid" forall a. MPDArg a => Command -> a -> [Char]
<@> Id
i]
move :: Position -> Position -> Command ()
move :: Position -> Position -> Command ()
move Position
pos Position
to = forall a. Parser a -> [[Char]] -> Command a
Command Parser ()
emptyResponse [Command
"move" forall a. MPDArg a => Command -> a -> [Char]
<@> Position
pos forall a b. (MPDArg a, MPDArg b) => a -> b -> Args
<++> Position
to]
moveRange :: Range -> Position -> Command ()
moveRange :: Range -> Position -> Command ()
moveRange Range
range Position
to = forall a. Parser a -> [[Char]] -> Command a
Command Parser ()
emptyResponse [Command
"move" forall a. MPDArg a => Command -> a -> [Char]
<@> Range
range forall a b. (MPDArg a, MPDArg b) => a -> b -> Args
<++> Position
to]
moveId :: Id -> Position -> Command ()
moveId :: Id -> Position -> Command ()
moveId Id
i Position
to = forall a. Parser a -> [[Char]] -> Command a
Command Parser ()
emptyResponse [Command
"moveid" forall a. MPDArg a => Command -> a -> [Char]
<@> Id
i forall a b. (MPDArg a, MPDArg b) => a -> b -> Args
<++> Position
to]
playlist' :: MPDArg a => Arg.Command -> a -> Command [Song]
playlist' :: forall a. MPDArg a => Command -> a -> Command [Song]
playlist' Command
cmd a
q = forall a. Parser a -> [[Char]] -> Command a
Command (forall a. ([ByteString] -> Either [Char] a) -> Parser a
liftParser [ByteString] -> Either [Char] [Song]
takeSongs) [Command
cmd forall a. MPDArg a => Command -> a -> [Char]
<@> a
q]
playlistFind :: Query -> Command [Song]
playlistFind :: Query -> Command [Song]
playlistFind = forall a. MPDArg a => Command -> a -> Command [Song]
playlist' Command
"playlistfind"
playlistInfo :: Maybe Position -> Command [Song]
playlistInfo :: Maybe Position -> Command [Song]
playlistInfo = forall a. MPDArg a => Command -> a -> Command [Song]
playlist' Command
"playlistinfo"
playlistInfoRange :: Maybe Range -> Command [Song]
playlistInfoRange :: Maybe Range -> Command [Song]
playlistInfoRange = forall a. MPDArg a => Command -> a -> Command [Song]
playlist' Command
"playlistinfo"
playlistId :: Maybe Id -> Command [Song]
playlistId :: Maybe Id -> Command [Song]
playlistId = forall a. MPDArg a => Command -> a -> Command [Song]
playlist' Command
"playlistid"
playlistSearch :: Query -> Command [Song]
playlistSearch :: Query -> Command [Song]
playlistSearch = forall a. MPDArg a => Command -> a -> Command [Song]
playlist' Command
"playlistsearch"
plChanges :: Integer -> Command [Song]
plChanges :: Integer -> Command [Song]
plChanges = forall a. MPDArg a => Command -> a -> Command [Song]
playlist' Command
"plchanges"
plChangesPosId :: Integer -> Command [(Position, Id)]
plChangesPosId :: Integer -> Command [(Position, Id)]
plChangesPosId Integer
ver = forall a. Parser a -> [[Char]] -> Command a
Command Parser [(Position, Id)]
p [Command
"plchangesposid" forall a. MPDArg a => Command -> a -> [Char]
<@> Integer
ver]
where
p :: Parser [(Position, Id)]
p :: Parser [(Position, Id)]
p = forall a. ([ByteString] -> Either [Char] a) -> Parser a
liftParser forall a b. (a -> b) -> a -> b
$ forall (t :: * -> *) (m :: * -> *) a b.
(Traversable t, Monad m) =>
(a -> m b) -> t a -> m (t b)
mapM forall {a} {a}.
(Eq a, IsString a, IsString a) =>
[(a, ByteString)] -> Either a (Position, Id)
f forall b c a. (b -> c) -> (a -> b) -> a -> c
. [ByteString]
-> [(ByteString, ByteString)] -> [[(ByteString, ByteString)]]
splitGroups [ByteString
"cpos"] forall b c a. (b -> c) -> (a -> b) -> a -> c
. [ByteString] -> [(ByteString, ByteString)]
toAssocList
f :: [(a, ByteString)] -> Either a (Position, Id)
f [(a, ByteString)]
xs | [(a
"cpos", ByteString
x), (a
"Id", ByteString
y)] <- [(a, ByteString)]
xs
, Just (Position
x', Position
y') <- forall a.
(ByteString -> Maybe a) -> (ByteString, ByteString) -> Maybe (a, a)
pair forall a. (Read a, Integral a) => ByteString -> Maybe a
parseNum (ByteString
x, ByteString
y)
= forall a b. b -> Either a b
Right (Position
x', Position -> Id
Id Position
y')
| Bool
otherwise = forall a b. a -> Either a b
Left a
""
prio :: Priority -> Range -> Command ()
prio :: Priority -> Range -> Command ()
prio Priority
p Range
range = forall a. Parser a -> [[Char]] -> Command a
Command Parser ()
emptyResponse [Command
"prio" forall a. MPDArg a => Command -> a -> [Char]
<@> Priority
p forall a b. (MPDArg a, MPDArg b) => a -> b -> Args
<++> Range
range]
prioId :: Priority -> Id -> Command ()
prioId :: Priority -> Id -> Command ()
prioId Priority
p Id
ids = forall a. Parser a -> [[Char]] -> Command a
Command Parser ()
emptyResponse [Command
"prioid" forall a. MPDArg a => Command -> a -> [Char]
<@> Priority
p forall a b. (MPDArg a, MPDArg b) => a -> b -> Args
<++> Id
ids]
shuffle :: Maybe Range -> Command ()
shuffle :: Maybe Range -> Command ()
shuffle Maybe Range
mbRange = forall a. Parser a -> [[Char]] -> Command a
Command Parser ()
emptyResponse [Command
"shuffle" forall a. MPDArg a => Command -> a -> [Char]
<@> Maybe Range
mbRange]
swap :: Position -> Position -> Command ()
swap :: Position -> Position -> Command ()
swap Position
pos1 Position
pos2 = forall a. Parser a -> [[Char]] -> Command a
Command Parser ()
emptyResponse [Command
"swap" forall a. MPDArg a => Command -> a -> [Char]
<@> Position
pos1 forall a b. (MPDArg a, MPDArg b) => a -> b -> Args
<++> Position
pos2]
swapId :: Id -> Id -> Command ()
swapId :: Id -> Id -> Command ()
swapId Id
id1 Id
id2 = forall a. Parser a -> [[Char]] -> Command a
Command Parser ()
emptyResponse [Command
"swapid" forall a. MPDArg a => Command -> a -> [Char]
<@> Id
id1 forall a b. (MPDArg a, MPDArg b) => a -> b -> Args
<++> Id
id2]
addTagId :: Id -> Metadata -> Value -> Command ()
addTagId :: Id -> Metadata -> Value -> Command ()
addTagId Id
id' Metadata
tag Value
val = forall a. Parser a -> [[Char]] -> Command a
Command Parser ()
emptyResponse [Command
"addtagid" forall a. MPDArg a => Command -> a -> [Char]
<@> Id
id' forall a b. (MPDArg a, MPDArg b) => a -> b -> Args
<++> Metadata
tag forall a b. (MPDArg a, MPDArg b) => a -> b -> Args
<++> Value
val]
clearTagId :: Id -> Metadata -> Command ()
clearTagId :: Id -> Metadata -> Command ()
clearTagId Id
id' Metadata
tags = forall a. Parser a -> [[Char]] -> Command a
Command Parser ()
emptyResponse [Command
"cleartagid" forall a. MPDArg a => Command -> a -> [Char]
<@> Id
id' forall a b. (MPDArg a, MPDArg b) => a -> b -> Args
<++> Metadata
tags]
rangeId :: Id -> (Maybe Double, Maybe Double) -> Command ()
rangeId :: Id -> (Maybe Double, Maybe Double) -> Command ()
rangeId Id
id' (Maybe Double
mbStart, Maybe Double
mbEnd) = forall a. Parser a -> [[Char]] -> Command a
Command Parser ()
emptyResponse [[Char]
"rangeid " forall a. [a] -> [a] -> [a]
++ forall a. Show a => a -> [Char]
show Id
id' forall a. [a] -> [a] -> [a]
++ [Char]
" " forall a. [a] -> [a] -> [a]
++ [Char]
arg ]
where arg :: [Char]
arg = forall b a. b -> (a -> b) -> Maybe a -> b
maybe [Char]
"" forall a. Show a => a -> [Char]
show Maybe Double
mbStart forall a. [a] -> [a] -> [a]
++ [Char]
":" forall a. [a] -> [a] -> [a]
++ forall b a. b -> (a -> b) -> Maybe a -> b
maybe [Char]
"" forall a. Show a => a -> [Char]
show Maybe Double
mbEnd