Network.MPD

libmpd-0.9.0.7: An MPD client library.

Copyright | (c) Joachim Fasting Simon Hengel 2012
License | MIT
Maintainer | Joachim Fasting <joachifm@fastmail.fm>
Stability | unstable
Portability | unportable
Safe Haskell | None
Language | Haskell2010

Network.MPD

Contents

- Basic data types
- Connections
- Types
- Subscribing to channels
- Communicating with other clients

Description

An MPD client library. MPD is a daemon for playing music that is controlled over a network socket.

To use the library, do:

    import qualified Network.MPD as MPD

Synopsis

- class (Monad m, MonadError MPDError m) => MonadMPD m
- data MPD a
- data MPDError
  - = NoMPD
  - | ConnectionError IOException
  - | Unexpected String
  - | Custom String
  - | ACK ACKType String
- data ACKType
  - = InvalidArgument
  - | InvalidPassword
  - | Auth
  - | UnknownCommand
  - | FileNotFound
  - | PlaylistMax
  - | System
  - | PlaylistLoad
  - | Busy
  - | NotPlaying
  - | FileExists
  - | UnknownACK
- type Response = Either MPDError
- type Host = String
- type Port = Integer
- type Password = String
- withMPD :: MPD a -> IO (Response a)
- withMPD_ :: Maybe String -> Maybe String -> MPD a -> IO (Response a)
- withMPDEx :: Host -> Port -> Password -> MPD a -> IO (Response a)
- data Query
- (=?) :: Metadata -> Value -> Query
- (<&>) :: Query -> Query -> Query
- anything :: Query
- class ToString a where
- type Artist = Value
- type Album = Value
- type Title = Value
- newtype PlaylistName = PlaylistName ByteString
- data Path
- data Metadata
  - = Artist
  - | ArtistSort
  - | Album
  - | AlbumArtist
  - | AlbumArtistSort
  - | Title
  - | Track
  - | Name
  - | Genre
  - | Date
  - | Composer
  - | Performer
  - | Comment
  - | Disc
  - | MUSICBRAINZ_ARTISTID
  - | MUSICBRAINZ_ALBUMID
  - | MUSICBRAINZ_ALBUMARTISTID
  - | MUSICBRAINZ_TRACKID
  - | MUSICBRAINZ_RELEASETRACKID
- data Value
- data ObjectType = SongObj
- type Seconds = Integer
- type Decibels = Integer
- data State
  - = Playing
  - | Stopped
  - | Paused
- data Subsystem
  - = DatabaseS
  - | UpdateS
  - | StoredPlaylistS
  - | PlaylistS
  - | PlayerS
  - | MixerS
  - | OutputS
  - | OptionsS
  - | StickerS
  - | SubscriptionS
  - | MessageS
- data ReplayGainMode
  - = Off
  - | TrackMode
  - | AlbumMode
- data Count = Count {
  - cSongs :: Integer
  - cPlaytime :: Seconds
  }
- data LsResult
  - = LsDirectory Path
  - | LsSong Song
  - | LsPlaylist PlaylistName
- data Device = Device {
  - dOutputID :: Int
  - dOutputName :: String
  - dOutputEnabled :: Bool
  }
- data Song = Song {
  - sgFilePath :: Path
  - sgTags :: Map Metadata [Value]
  - sgLastModified :: Maybe UTCTime
  - sgLength :: Seconds
  - sgId :: Maybe Id
  - sgIndex :: Maybe Position
  }
- type Position = Int
- newtype Id = Id Int
- sgGetTag :: Metadata -> Song -> Maybe [Value]
- sgAddTag :: Metadata -> Value -> Song -> Song
- data Stats = Stats {
  - stsArtists :: Integer
  - stsAlbums :: Integer
  - stsSongs :: Integer
  - stsUptime :: Seconds
  - stsPlaytime :: Seconds
  - stsDbPlaytime :: Seconds
  - stsDbUpdate :: Integer
  }
- data Status = Status {
  - stState :: State
  - stVolume :: Maybe Int
  - stRepeat :: Bool
  - stRandom :: Bool
  - stPlaylistVersion :: Integer
  - stPlaylistLength :: Integer
  - stSongPos :: Maybe Position
  - stSongID :: Maybe Id
  - stNextSongPos :: Maybe Position
  - stNextSongID :: Maybe Id
  - stTime :: Maybe (Double, Seconds)
  - stBitrate :: Maybe Int
  - stXFadeWidth :: Seconds
  - stMixRampdB :: Double
  - stMixRampDelay :: Double
  - stAudio :: (Int, Int, Int)
  - stUpdatingDb :: Maybe Integer
  - stSingle :: Bool
  - stConsume :: Bool
  - stError :: Maybe String
  }
- def :: Default a => a
- clearError :: MonadMPD m => m ()
- currentSong :: MonadMPD m => m (Maybe Song)
- idle :: MonadMPD m => [Subsystem] -> m [Subsystem]
- noidle :: MonadMPD m => m ()
- stats :: MonadMPD m => m Stats
- status :: MonadMPD m => m Status
- consume :: MonadMPD m => Bool -> m ()
- crossfade :: MonadMPD m => Seconds -> m ()
- random :: MonadMPD m => Bool -> m ()
- repeat :: MonadMPD m => Bool -> m ()
- setVolume :: MonadMPD m => Int -> m ()
- single :: MonadMPD m => Bool -> m ()
- replayGainMode :: MonadMPD m => ReplayGainMode -> m ()
- replayGainStatus :: MonadMPD m => m [(String, String)]
- next :: MonadMPD m => m ()
- pause :: MonadMPD m => Bool -> m ()
- play :: MonadMPD m => Maybe Position -> m ()
- playId :: MonadMPD m => Id -> m ()
- previous :: MonadMPD m => m ()
- seek :: MonadMPD m => Position -> Seconds -> m ()
- seekId :: MonadMPD m => Id -> Seconds -> m ()
- stop :: MonadMPD m => m ()
- addId :: MonadMPD m => Path -> Maybe Position -> m Id
- add :: MonadMPD m => Path -> m ()
- clear :: MonadMPD m => m ()
- delete :: MonadMPD m => Position -> m ()
- deleteId :: MonadMPD m => Id -> m ()
- move :: MonadMPD m => Position -> Position -> m ()
- moveId :: MonadMPD m => Id -> Position -> m ()
- playlist :: MonadMPD m => m [(Position, Path)]
- playlistFind :: MonadMPD m => Query -> m [Song]
- playlistInfo :: MonadMPD m => Maybe Position -> m [Song]
- playlistInfoRange :: MonadMPD m => Maybe (Position, Position) -> m [Song]
- playlistId :: MonadMPD m => Maybe Id -> m [Song]
- playlistSearch :: MonadMPD m => Query -> m [Song]
- plChanges :: MonadMPD m => Integer -> m [Song]
- plChangesPosId :: MonadMPD m => Integer -> m [(Position, Id)]
- shuffle :: MonadMPD m => Maybe (Position, Position) -> m ()
- swap :: MonadMPD m => Position -> Position -> m ()
- swapId :: MonadMPD m => Id -> Id -> m ()
- listPlaylist :: MonadMPD m => PlaylistName -> m [Path]
- listPlaylistInfo :: MonadMPD m => PlaylistName -> m [Song]
- listPlaylists :: MonadMPD m => m [PlaylistName]
- load :: MonadMPD m => PlaylistName -> m ()
- playlistAdd :: MonadMPD m => PlaylistName -> Path -> m ()
- playlistClear :: MonadMPD m => PlaylistName -> m ()
- playlistDelete :: MonadMPD m => PlaylistName -> Position -> m ()
- playlistMove :: MonadMPD m => PlaylistName -> Id -> Position -> m ()
- rename :: MonadMPD m => PlaylistName -> PlaylistName -> m ()
- rm :: MonadMPD m => PlaylistName -> m ()
- save :: MonadMPD m => PlaylistName -> m ()
- count :: MonadMPD m => Query -> m Count
- find :: MonadMPD m => Query -> m [Song]
- findAdd :: MonadMPD m => Query -> m ()
- list :: MonadMPD m => Metadata -> Maybe Artist -> m [Value]
- listAll :: MonadMPD m => Path -> m [Path]
- listAllInfo :: MonadMPD m => Path -> m [LsResult]
- lsInfo :: MonadMPD m => Path -> m [LsResult]
- search :: MonadMPD m => Query -> m [Song]
- update :: MonadMPD m => Maybe Path -> m Integer
- rescan :: MonadMPD m => Maybe Path -> m Integer
- stickerGet :: MonadMPD m => ObjectType -> String -> String -> m [String]
- stickerSet :: MonadMPD m => ObjectType -> String -> String -> String -> m ()
- stickerDelete :: MonadMPD m => ObjectType -> String -> String -> m ()
- stickerList :: MonadMPD m => ObjectType -> String -> m [(String, String)]
- stickerFind :: MonadMPD m => ObjectType -> String -> String -> m [(String, String)]
- password :: MonadMPD m => String -> m ()
- ping :: MonadMPD m => m ()
- disableOutput :: MonadMPD m => Int -> m ()
- enableOutput :: MonadMPD m => Int -> m ()
- outputs :: MonadMPD m => m [Device]
- commands :: MonadMPD m => m [String]
- notCommands :: MonadMPD m => m [String]
- tagTypes :: MonadMPD m => m [String]
- urlHandlers :: MonadMPD m => m [String]
- decoders :: MonadMPD m => m [(String, [(String, String)])]
- config :: MonadMPD m => m [(String, String)]
- type ChannelName = String
- type MessageText = String
- subscribe :: MonadMPD m => ChannelName -> m ()
- unsubscribe :: MonadMPD m => ChannelName -> m ()
- channels :: MonadMPD m => m [ChannelName]
- readMessages :: MonadMPD m => m [(ChannelName, MessageText)]
- sendMessage :: MonadMPD m => ChannelName -> MessageText -> m ()

# Basic data types

class (Monad m, MonadError MPDError m) => MonadMPD m #

A typeclass to allow for multiple implementations of a connection to an MPD server.

Minimal complete definition

open, close, send, getPassword, setPassword, getVersion

Instances

MonadMPD MPD # |
Methods open :: MPD () # close :: MPD () # send :: String -> MPD [ByteString] # getPassword :: MPD Password # setPassword :: Password -> MPD () # getVersion :: MPD (Int, Int, Int) #

data MPD a #

The main implementation of an MPD client. It actually connects to a server and interacts with it.

To use the error throwing/catching capabilities:

    import Control.Monad.Error (throwError, catchError)

To run IO actions within the MPD monad:

    import Control.Monad.Trans (liftIO)

Instances

Monad MPD # |
Methods (>>=) :: MPD a -> (a -> MPD b) -> MPD b (>>) :: MPD a -> MPD b -> MPD b return :: a -> MPD a fail :: String -> MPD a
Functor MPD # |
Methods fmap :: (a -> b) -> MPD a -> MPD b (<$) :: a -> MPD b -> MPD a
Applicative MPD # |
Methods pure :: a -> MPD a (<*>) :: MPD (a -> b) -> MPD a -> MPD b liftA2 :: (a -> b -> c) -> MPD a -> MPD b -> MPD c (*>) :: MPD a -> MPD b -> MPD b (<*) :: MPD a -> MPD b -> MPD a
MonadIO MPD # |
Methods liftIO :: IO a -> MPD a
MonadMPD MPD # |
Methods open :: MPD () # close :: MPD () # send :: String -> MPD [ByteString] # getPassword :: MPD Password # setPassword :: Password -> MPD () # getVersion :: MPD (Int, Int, Int) #
MonadError MPDError MPD # |
Methods throwError :: MPDError -> MPD a catchError :: MPD a -> (MPDError -> MPD a) -> MPD a

data MPDError #

The MPDError type is used to signal errors, both from the MPD and otherwise.

Constructors

NoMPD | MPD not responding
ConnectionError IOException | An error occurred while talking to MPD.
Unexpected String | MPD returned an unexpected response. This is a bug, either in the library or in MPD itself.
Custom String | Used for misc. errors
ACK ACKType String | ACK type and a message from the server

Instances

Eq MPDError # |
Methods (==) :: MPDError -> MPDError -> Bool (/=) :: MPDError -> MPDError -> Bool
Show MPDError # |
Methods showsPrec :: Int -> MPDError -> ShowS show :: MPDError -> String showList :: [MPDError] -> ShowS
Exception MPDError # |
Methods toException :: MPDError -> SomeException fromException :: SomeException -> Maybe MPDError displayException :: MPDError -> String
Error MPDError # |
Methods noMsg :: MPDError strMsg :: String -> MPDError
MonadError MPDError MPD |
Methods throwError :: MPDError -> MPD a catchError :: MPD a -> (MPDError -> MPD a) -> MPD a

data ACKType #

Represents various MPD errors (aka. ACKs).

Constructors

InvalidArgument | Invalid argument passed (ACK 2)
InvalidPassword | Invalid password supplied (ACK 3)
Auth | Authentication required (ACK 4)
UnknownCommand | Unknown command (ACK 5)
FileNotFound | File or directory not found ACK 50)
PlaylistMax | Playlist at maximum size (ACK 51)
System | A system error (ACK 52)
PlaylistLoad | Playlist loading failed (ACK 53)
Busy | Update already running (ACK 54)
NotPlaying | An operation requiring playback got interrupted (ACK 55)
FileExists | File already exists (ACK 56)
UnknownACK | An unknown ACK (aka. bug)

Instances

Eq ACKType # |
Methods (==) :: ACKType -> ACKType -> Bool (/=) :: ACKType -> ACKType -> Bool

type Response = Either MPDError #

A response is either an `MPDError` or some result.

type Host = String #

type Port = Integer #

type Password = String #

# Connections

withMPD :: MPD a -> IO (Response a) #

A wrapper for `withMPDEx` that uses localhost:6600 as the default host:port, or whatever is found in the environment variables MPD_HOST and MPD_PORT. If MPD_HOST is of the form "password@host" the password will be supplied as well.

Examples:

    withMPD $ play Nothing
    withMPD $ add_ "tool" >> play Nothing >> currentSong

withMPD_ #

Arguments

:: Maybe String | optional override for MPD_HOST
-> Maybe String | optional override for MPD_PORT
-> MPD a |
-> IO (Response a) |

Same as `withMPD`, but takes optional arguments that override MPD_HOST and MPD_PORT.

This is e.g. useful for clients that optionally take `--port` and `--host` as command line arguments, and fall back to `withMPD`'s defaults if those arguments are not given.

withMPDEx :: Host -> Port -> Password -> MPD a -> IO (Response a) #

The most configurable API for running an MPD action.

data Query #

An interface for creating MPD queries.

For example, to match any song where the value of artist is "Foo", we use:

    Artist =? "Foo"

We can also compose queries, thus narrowing the search. For example, to match any song where the value of artist is "Foo" and the value of album is "Bar", we use:

    Artist =? "Foo" <&> Album =? "Bar"

Instances

Show Query # |
Methods showsPrec :: Int -> Query -> ShowS show :: Query -> String showList :: [Query] -> ShowS
Monoid Query # |
Methods mempty :: Query mappend :: Query -> Query -> Query mconcat :: [Query] -> Query

(=?) :: Metadata -> Value -> Query #

Create a query.

(<&>) :: Query -> Query -> Query infixr 6 #

Combine queries.

anything :: Query #

An empty query. Matches anything.

class ToString a where #

A type class for values that can be converted to `String`s.

Minimal complete definition

toString, toText, toUtf8

Methods

toString :: a -> String #

Convert given value to `String`.

toText :: a -> Text #

Convert given value to `Text`.

toUtf8 :: a -> ByteString #

Convert given value to a UTF-8 encoded `ByteString`.

Instances

ToString Value # |
Methods toString :: Value -> String # toText :: Value -> Text # toUtf8 :: Value -> ByteString #
ToString Path # |
Methods toString :: Path -> String # toText :: Path -> Text # toUtf8 :: Path -> ByteString #
ToString PlaylistName # |
Methods toString :: PlaylistName -> String # toText :: PlaylistName -> Text # toUtf8 :: PlaylistName -> ByteString #

type Artist = Value #

type Album = Value #

type Title = Value #

newtype PlaylistName #

Used for commands which require a playlist name. If empty, the current playlist is used.

Constructors

PlaylistName ByteString |

Instances

Eq PlaylistName # |
Methods (==) :: PlaylistName -> PlaylistName -> Bool (/=) :: PlaylistName -> PlaylistName -> Bool
Show PlaylistName # |
Methods showsPrec :: Int -> PlaylistName -> ShowS show :: PlaylistName -> String showList :: [PlaylistName] -> ShowS
IsString PlaylistName # |
Methods fromString :: String -> PlaylistName
ToString PlaylistName # |
Methods toString :: PlaylistName -> String # toText :: PlaylistName -> Text # toUtf8 :: PlaylistName -> ByteString #

data Path #

Used for commands which require a path within the database. If empty, the root path is used.

Instances

Eq Path # |
Methods (==) :: Path -> Path -> Bool (/=) :: Path -> Path -> Bool
Show Path # |
Methods showsPrec :: Int -> Path -> ShowS show :: Path -> String showList :: [Path] -> ShowS
IsString Path # |
Methods fromString :: String -> Path
ToString Path # |
Methods toString :: Path -> String # toText :: Path -> Text # toUtf8 :: Path -> ByteString #

data Metadata #

Available metadata types/scope modifiers, used for searching the database for entries with certain metadata values.

Constructors

Artist |
ArtistSort |
Album |
AlbumArtist |
AlbumArtistSort |
Title |
Track |
Name |
Genre |
Date |
Composer |
Performer |
Comment |
Disc |
MUSICBRAINZ_ARTISTID |
MUSICBRAINZ_ALBUMID |
MUSICBRAINZ_ALBUMARTISTID |
MUSICBRAINZ_TRACKID |
MUSICBRAINZ_RELEASETRACKID |

Instances

Bounded Metadata # |
Methods minBound :: Metadata maxBound :: Metadata
Enum Metadata # |
Methods succ :: Metadata -> Metadata pred :: Metadata -> Metadata toEnum :: Int -> Metadata fromEnum :: Metadata -> Int enumFrom :: Metadata -> [Metadata] enumFromThen :: Metadata -> Metadata -> [Metadata] enumFromTo :: Metadata -> Metadata -> [Metadata] enumFromThenTo :: Metadata -> Metadata -> Metadata -> [Metadata]
Eq Metadata # |
Methods (==) :: Metadata -> Metadata -> Bool (/=) :: Metadata -> Metadata -> Bool
Ord Metadata # |
Methods compare :: Metadata -> Metadata -> Ordering (<) :: Metadata -> Metadata -> Bool (<=) :: Metadata -> Metadata -> Bool (>) :: Metadata -> Metadata -> Bool (>=) :: Metadata -> Metadata -> Bool max :: Metadata -> Metadata -> Metadata min :: Metadata -> Metadata -> Metadata
Show Metadata # |
Methods showsPrec :: Int -> Metadata -> ShowS show :: Metadata -> String showList :: [Metadata] -> ShowS

data Value #

A metadata value.

Instances

Eq Value # |
Methods (==) :: Value -> Value -> Bool (/=) :: Value -> Value -> Bool
Show Value # |
Methods showsPrec :: Int -> Value -> ShowS show :: Value -> String showList :: [Value] -> ShowS
IsString Value # |
Methods fromString :: String -> Value
ToString Value # |
Methods toString :: Value -> String # toText :: Value -> Text # toUtf8 :: Value -> ByteString #

data ObjectType #

Object types.

Constructors

SongObj |

Instances

Eq ObjectType # |
Methods (==) :: ObjectType -> ObjectType -> Bool (/=) :: ObjectType -> ObjectType -> Bool
Show ObjectType # |
Methods showsPrec :: Int -> ObjectType -> ShowS show :: ObjectType -> String showList :: [ObjectType] -> ShowS

type Seconds = Integer #

type Decibels = Integer #

data State #

Represents the different playback states.

Constructors

Playing |
Stopped |
Paused |

Instances

Eq State # |
Methods (==) :: State -> State -> Bool (/=) :: State -> State -> Bool
Show State # |
Methods showsPrec :: Int -> State -> ShowS show :: State -> String showList :: [State] -> ShowS

data Subsystem #

Represents the various MPD subsystems.

Constructors

DatabaseS | The song database
UpdateS | Database updates
StoredPlaylistS | Stored playlists
PlaylistS | The current playlist
PlayerS | The player
MixerS | The volume mixer
OutputS | Audio outputs
OptionsS | Playback options
StickerS | Sticker database
SubscriptionS | Subscription
MessageS | Message on subscribed channel

Instances

Eq Subsystem # |
Methods (==) :: Subsystem -> Subsystem -> Bool (/=) :: Subsystem -> Subsystem -> Bool
Show Subsystem # |
Methods showsPrec :: Int -> Subsystem -> ShowS show :: Subsystem -> String showList :: [Subsystem] -> ShowS

data ReplayGainMode #

Constructors

Off | Disable replay gain
TrackMode | Per track mode
AlbumMode | Per album mode

Instances

Eq ReplayGainMode # |
Methods (==) :: ReplayGainMode -> ReplayGainMode -> Bool (/=) :: ReplayGainMode -> ReplayGainMode -> Bool
Show ReplayGainMode # |
Methods showsPrec :: Int -> ReplayGainMode -> ShowS show :: ReplayGainMode -> String showList :: [ReplayGainMode] -> ShowS

data Count #

Represents the result of running `count`.

Constructors

Count |
Fields cSongs :: Integer Number of songs matching the query cPlaytime :: Seconds Total play time of matching songs

Instances

Eq Count # |
Methods (==) :: Count -> Count -> Bool (/=) :: Count -> Count -> Bool
Show Count # |
Methods showsPrec :: Int -> Count -> ShowS show :: Count -> String showList :: [Count] -> ShowS
Default Count # |
Methods def :: Count #

data LsResult #

Result of the lsInfo operation

Constructors

LsDirectory Path | Directory
LsSong Song | Song
LsPlaylist PlaylistName | Playlist

Instances

Eq LsResult # |
Methods (==) :: LsResult -> LsResult -> Bool (/=) :: LsResult -> LsResult -> Bool
Show LsResult # |
Methods showsPrec :: Int -> LsResult -> ShowS show :: LsResult -> String showList :: [LsResult] -> ShowS

data Device #

Represents an output device.

Constructors

Device |
Fields dOutputID :: Int Output's ID number dOutputName :: String Output's name as defined in the MPD configuration file dOutputEnabled :: Bool

Instances

Eq Device # |
Methods (==) :: Device -> Device -> Bool (/=) :: Device -> Device -> Bool
Show Device # |
Methods showsPrec :: Int -> Device -> ShowS show :: Device -> String showList :: [Device] -> ShowS
Default Device # |
Methods def :: Device #

data Song #

Represents a single song item.

Constructors

Song |
Fields sgFilePath :: Path sgTags :: Map Metadata [Value] Map of available tags (multiple occurrences of one tag type allowed) sgLastModified :: Maybe UTCTime Last modification date sgLength :: Seconds Length of the song in seconds sgId :: Maybe Id Id in playlist sgIndex :: Maybe Position Position in playlist

Instances

Eq Song # |
Methods (==) :: Song -> Song -> Bool (/=) :: Song -> Song -> Bool
Show Song # |
Methods showsPrec :: Int -> Song -> ShowS show :: Song -> String showList :: [Song] -> ShowS

type Position = Int #

The position of a song in a playlist.

newtype Id #

Constructors

Id Int |

Instances

Eq Id # |
Methods (==) :: Id -> Id -> Bool (/=) :: Id -> Id -> Bool
Show Id # |
Methods showsPrec :: Int -> Id -> ShowS show :: Id -> String showList :: [Id] -> ShowS

sgGetTag :: Metadata -> Song -> Maybe [Value] #

Get list of specific tag type

sgAddTag :: Metadata -> Value -> Song -> Song #

Add metadata tag value.

data Stats #

Container for database statistics.

Constructors

Stats |
Fields stsArtists :: Integer Number of artists. stsAlbums :: Integer Number of albums. stsSongs :: Integer Number of songs. stsUptime :: Seconds Daemon uptime in seconds. stsPlaytime :: Seconds Total playing time. stsDbPlaytime :: Seconds Total play time of all the songs in the database. stsDbUpdate :: Integer Last database update in UNIX time.

Instances

Eq Stats # |
Methods (==) :: Stats -> Stats -> Bool (/=) :: Stats -> Stats -> Bool
Show Stats # |
Methods showsPrec :: Int -> Stats -> ShowS show :: Stats -> String showList :: [Stats] -> ShowS
Default Stats # |
Methods def :: Stats #

data Status #

Container for MPD status.

Constructors

Status |
Fields stState :: State stVolume :: Maybe Int A percentage (0-100). `Nothing` indicates that the output lacks mixer support. stRepeat :: Bool stRandom :: Bool stPlaylistVersion :: Integer A value that is incremented by the server every time the playlist changes. stPlaylistLength :: Integer The number of items in the current playlist. stSongPos :: Maybe Position Current song's position in the playlist. stSongID :: Maybe Id Current song's playlist ID. stNextSongPos :: Maybe Position Next song's position in the playlist. stNextSongID :: Maybe Id Next song's playlist ID. stTime :: Maybe (Double, Seconds) Time elapsed/total time of playing song (if any). stBitrate :: Maybe Int Bitrate (in kilobytes per second) of playing song (if any). stXFadeWidth :: Seconds Crossfade time. stMixRampdB :: Double MixRamp threshold in dB stMixRampDelay :: Double MixRamp extra delay in seconds stAudio :: (Int, Int, Int) Samplerate/bits/channels for the chosen output device (see mpd.conf). stUpdatingDb :: Maybe Integer Job ID of currently running update (if any). stSingle :: Bool If True, MPD will play only one song and stop after finishing it. stConsume :: Bool If True, a song will be removed after it has been played. stError :: Maybe String Last error message (if any).

Instances

Eq Status # |
Methods (==) :: Status -> Status -> Bool (/=) :: Status -> Status -> Bool
Show Status # |
Methods showsPrec :: Int -> Status -> ShowS show :: Status -> String showList :: [Status] -> ShowS
Default Status # |
Methods def :: Status #

def :: Default a => a #

clearError :: MonadMPD m => m () #

Clear the current error message in status.

currentSong :: MonadMPD m => m (Maybe Song) #

Get the currently playing song.

idle :: MonadMPD m => [Subsystem] -> m [Subsystem] #

Wait until there is a noteworthy change in one or more of MPD's susbystems.

The first argument is a list of subsystems that should be considered. An empty list specifies that all subsystems should be considered.

A list of subsystems that have noteworthy changes is returned.

Note that running this command will block until either `idle` returns or is cancelled by `noidle`.

noidle :: MonadMPD m => m () #

Cancel `idle`.

stats :: MonadMPD m => m Stats #

Get server statistics.

status :: MonadMPD m => m Status #

Get the server's status.

consume :: MonadMPD m => Bool -> m () #

Set consume mode

crossfade :: MonadMPD m => Seconds -> m () #

Set crossfading between songs.

random :: MonadMPD m => Bool -> m () #

Set random playing.

repeat :: MonadMPD m => Bool -> m () #

Set repeating.

setVolume :: MonadMPD m => Int -> m () #

Set the volume (0-100 percent).

single :: MonadMPD m => Bool -> m () #

Set single mode

replayGainMode :: MonadMPD m => ReplayGainMode -> m () #

Set the replay gain mode.

replayGainStatus :: MonadMPD m => m [(String, String)] #

Get the replay gain options.

next :: MonadMPD m => m () #

Play the next song.

pause :: MonadMPD m => Bool -> m () #

Pause playing.

play :: MonadMPD m => Maybe Position -> m () #

Begin/continue playing.

playId :: MonadMPD m => Id -> m () #

Play a file with given id.

previous :: MonadMPD m => m () #

Play the previous song.

seek :: MonadMPD m => Position -> Seconds -> m () #

Seek to some point in a song.

seekId :: MonadMPD m => Id -> Seconds -> m () #

Seek to some point in a song (id version)

stop :: MonadMPD m => m () #

Stop playing.

addId :: MonadMPD m => Path -> Maybe Position -> m Id #

Like `add`, but returns a playlist id.

add :: MonadMPD m => Path -> m () #

Add a song (or a whole directory) to the current playlist.

clear :: MonadMPD m => m () #

Clear the current playlist.

delete :: MonadMPD m => Position -> m () #

Remove a song from the current playlist.

deleteId :: MonadMPD m => Id -> m () #

Remove a song from the current playlist.

move :: MonadMPD m => Position -> Position -> m () #

Move a song to a given position in the current playlist.

moveId :: MonadMPD m => Id -> Position -> m () #

Move a song from (songid) to (playlist index) in the playlist. If to is negative, it is relative to the current song in the playlist (if there is one).

playlist :: MonadMPD m => m [(Position, Path)] #

Warning: this is deprecated; please use `playlistInfo` instead.

Retrieve file paths and positions of songs in the current playlist. Note that this command is only included for completeness sake; it's deprecated and likely to disappear at any time, please use `playlistInfo` instead.

playlistFind :: MonadMPD m => Query -> m [Song] #

Search for songs in the current playlist with strict matching.

playlistInfo :: MonadMPD m => Maybe Position -> m [Song] #

Retrieve metadata for songs in the current playlist.

playlistInfoRange :: MonadMPD m => Maybe (Position, Position) -> m [Song] #

Like `playlistInfo` but can restrict to a range of songs.

playlistId :: MonadMPD m => Maybe Id -> m [Song] #

Displays a list of songs in the playlist. If id is specified, only its info is returned.

playlistSearch :: MonadMPD m => Query -> m [Song] #

Search case-insensitively with partial matches for songs in the current playlist.

plChanges :: MonadMPD m => Integer -> m [Song] #

Retrieve a list of changed songs currently in the playlist since a given playlist version.

plChangesPosId :: MonadMPD m => Integer -> m [(Position, Id)] #

Like `plChanges` but only returns positions and ids.

shuffle #

Arguments

:: MonadMPD m |
=> Maybe (Position, Position) | Optional range (start, end)
-> m () |

Shuffle the playlist.

swap :: MonadMPD m => Position -> Position -> m () #

Swap the positions of two songs.

swapId :: MonadMPD m => Id -> Id -> m () #

Swap the positions of two songs (Id version)

listPlaylist :: MonadMPD m => PlaylistName -> m [Path] #

Retrieve a list of files in a given playlist.

listPlaylistInfo :: MonadMPD m => PlaylistName -> m [Song] #

Retrieve metadata for files in a given playlist.

listPlaylists :: MonadMPD m => m [PlaylistName] #

Retreive a list of stored playlists.

load :: MonadMPD m => PlaylistName -> m () #

Load an existing playlist.

playlistAdd :: MonadMPD m => PlaylistName -> Path -> m () #

Add a song (or a whole directory) to a stored playlist. Will create a new playlist if the one specified does not already exist.

playlistClear :: MonadMPD m => PlaylistName -> m () #

Clear a playlist. If the specified playlist does not exist, it will be created.

playlistDelete :: MonadMPD m => PlaylistName -> Position -> m () #

Remove a song from a playlist.

playlistMove :: MonadMPD m => PlaylistName -> Id -> Position -> m () #

Move a song to a given position in the playlist specified.

rename #

Arguments

:: MonadMPD m |
=> PlaylistName | Original playlist
-> PlaylistName | New playlist name
-> m () |

Rename an existing playlist.

rm :: MonadMPD m => PlaylistName -> m () #

Delete existing playlist.

save :: MonadMPD m => PlaylistName -> m () #

Save the current playlist.

count :: MonadMPD m => Query -> m Count #

Count the number of entries matching a query.

find :: MonadMPD m => Query -> m [Song] #

Search the database for entries exactly matching a query.

findAdd :: MonadMPD m => Query -> m () #

Adds songs matching a query to the current playlist.

list #

Arguments

:: MonadMPD m |
=> Metadata | Metadata to list
-> Maybe Artist |
-> m [Value] |

List all tags of the specified type.

listAll :: MonadMPD m => Path -> m [Path] #

List the songs (without metadata) in a database directory recursively.

listAllInfo :: MonadMPD m => Path -> m [LsResult] #

Recursive `lsInfo`.

lsInfo :: MonadMPD m => Path -> m [LsResult] #

Non-recursively list the contents of a database directory.

search :: MonadMPD m => Query -> m [Song] #

Search the database using case insensitive matching.

update :: MonadMPD m => Maybe Path -> m Integer #

Update the server's database.

If no path is given, the whole library will be scanned. Unreadable or non-existent paths are silently ignored.

The update job id is returned.

rescan :: MonadMPD m => Maybe Path -> m Integer #

Like `update` but also rescans unmodified files.

stickerGet #

Arguments

:: MonadMPD m |
=> ObjectType |
-> String | Object URI
-> String | Sticker name
-> m [String] |

Reads a sticker value for the specified object.

stickerSet #

Arguments

:: MonadMPD m |
=> ObjectType |
-> String | Object URI
-> String | Sticker name
-> String | Sticker value
-> m () |

Adds a sticker value to the specified object.

stickerDelete #

Arguments

:: MonadMPD m |
=> ObjectType |
-> String | Object URI
-> String | Sticker name
-> m () |

Delete a sticker value from the specified object.

stickerList #

Arguments

:: MonadMPD m |
=> ObjectType |
-> String | Object URI
-> m [(String, String)] | Sticker name/sticker value

Lists the stickers for the specified object.

stickerFind #

Arguments

:: MonadMPD m |
=> ObjectType |
-> String | Path
-> String | Sticker name
-> m [(String, String)] | URI/sticker value

Searches the sticker database for stickers with the specified name, below the specified path.

password :: MonadMPD m => String -> m () #

Send password to server to authenticate session. Password is sent as plain text.

ping :: MonadMPD m => m () #

Check that the server is still responding.

disableOutput :: MonadMPD m => Int -> m () #

Turn off an output device.

enableOutput :: MonadMPD m => Int -> m () #

Turn on an output device.

outputs :: MonadMPD m => m [Device] #

Retrieve information for all output devices.

commands :: MonadMPD m => m [String] #

Retrieve a list of available commands.

notCommands :: MonadMPD m => m [String] #

Retrieve a list of unavailable (due to access restrictions) commands.

tagTypes :: MonadMPD m => m [String] #

Retrieve a list of available song metadata.

urlHandlers :: MonadMPD m => m [String] #

Retrieve a list of supported urlhandlers.

decoders :: MonadMPD m => m [(String, [(String, String)])] #

Retreive a list of decoder plugins with associated suffix and mime types.

config :: MonadMPD m => m [(String, String)] #

Retrieve configuration keys and values.

# Types

type ChannelName = String #

type MessageText = String #

# Subscribing to channels

subscribe :: MonadMPD m => ChannelName -> m () #

unsubscribe :: MonadMPD m => ChannelName -> m () #

channels :: MonadMPD m => m [ChannelName] #

# Communicating with other clients

readMessages :: MonadMPD m => m [(ChannelName, MessageText)] #

sendMessage :: MonadMPD m => ChannelName -> MessageText -> m () #