Network.MPD.Core

libmpd-0.6.0: An MPD client library.

Stability | alpha
Maintainer | Joachim Fasting <joachim.fasting@gmail.com>

Network.MPD.Core

Contents

- Classes
- Data types
- Running
- Interacting

Description

The core datatypes and operations are defined here, including the primary instance of the `MonadMPD` class, `MPD`.

Synopsis

- class (Monad m, MonadError MPDError m) => MonadMPD m where
  - open :: m ()
  - close :: m ()
  - send :: String -> m String
  - getHandle :: m (Maybe Handle)
  - getPassword :: m Password
  - setPassword :: String -> m ()
  - getVersion :: m (Int, Int, Int)
- data MPD a
- data MPDError
  - = NoMPD
  - | TimedOut
  - | 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
- withMPDEx :: Host -> Port -> Password -> MPD a -> IO (Response a)
- getResponse :: MonadMPD m => String -> m [String]
- kill :: MonadMPD m => m ()

# Classes

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

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

Methods

open :: m ()

Open (or re-open) a connection to the MPD server.

close :: m ()

Close the connection.

send :: String -> m String

Send a string to the server and return its response.

getHandle :: m (Maybe Handle)

Get underlying Handle (or Nothing, if no connection is estabilished)

getPassword :: m Password

Produce a password to send to the server should it ask for one.

setPassword :: String -> m ()

Alters password to be sent to the server.

getVersion :: m (Int, Int, Int)

Get MPD protocol version

Instances

MonadMPD MPD |

# Data types

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 |
Functor MPD |
Applicative MPD |
MonadIO MPD |
MonadMPD MPD |
MonadError MPDError MPD |

data MPDError

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

Constructors

NoMPD | MPD not responding
TimedOut | The connection timed out
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 |
Show MPDError |
Error MPDError |
MonadError MPDError MPD |

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 |

type Response = Either MPDError

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

type Host = String

type Port = Integer

type Password = String

# Running

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

The most configurable API for running an MPD action.

# Interacting

getResponse :: MonadMPD m => String -> m [String]

Send a command to the MPD server and return the result.

kill :: MonadMPD m => m ()

Kill the server. Obviously, the connection is then invalid.