mpd-current-json-1.5.0.1: Print current MPD song and status as JSON
Safe HaskellSafe-Inferred
LanguageHaskell2010

Network.MPD.Parse

Synopsis

Documentation

getStatusField :: Response Status -> (Status -> a) -> Maybe a Source #

Extract a field from the returned MPD.Status data record.

Helper to extract a specific field from the Network.MPD.Status data record by providing the corresponding field label. If the input status "st" is not Right a, indicating an error, or the field label function is not applicable, it returns Nothing.

Example:

ghci> import qualified Network.MPD as MPD
ghci> st <- MPD.withMPD MPD.status
ghci> getStatusField st MPD.stVolume

Just (Just 100)

getStatusFieldElement :: Response Status -> (Status -> Maybe a) -> Maybe a Source #

Go a level deeper than getStatusField. For nested Maybe a fields from Status.

Example:

ghci> import qualified Network.MPD as MPD
ghci> st <- MPD.withMPD MPD.status
ghci> getStatusFieldElement st MPD.stVolume

Just 100

getTag :: Metadata -> Either a (Maybe Song) -> Maybe String Source #

Either check for the returned value of currentSong, then call processSong or return Nothing.

processSong :: Metadata -> Maybe Song -> Maybe String Source #

Use sgGetTag to extract a tag from a song, safely get only the head item of the returned Maybe list, then safely convert it to a string.

maybePathCurrentSong :: Response (Maybe Song) -> Maybe String Source #

Get the current Song relative path with sgFilePath

maybePathNextPlaylistSong :: Response [Song] -> Maybe String Source #

Get the next song's relative path in the current playlist.

Using sgFilePath from the returned Response [Song].

headMay :: [a] -> Maybe a Source #

Safely get the head of a list. Same as Safe.headMay.

valueToStringMay :: Value -> Maybe String Source #

Convert Value to String within a Maybe context.

This Value is from MPD and is basically the same as a String but used internally to store metadata values.

Example:

processSong :: Metadata -> Maybe Song -> Maybe String
processSong _ Nothing = Nothing
processSong tag (Just song) = do
  let tagVal = MPD.sgGetTag tag song
  valueToStringMay =<< (headMay =<< tagVal)

sgGetTag returns a Maybe [Value]. libmpd also provides toString that can convert, along other types, a Value to a String.

(.=?) :: (KeyValue e a, ToJSON v) => Key -> Maybe v -> Maybe a Source #

Check if Maybe v exists and is of type expected by object as defined in Value, if it is return both the key and value within the Maybe context tied with .=. This gives support to 'optional' fields using catMaybes that discard Nothing values and is meant to prevent creating JSON key/value pairs with null values, e.g.:

jsonTags = object . catMaybes $
    [ "artist"  .=? artist
    , "album"   .=? album
    , "title"   .=? title
    ]

Where if a value on the right is Nothing that key/value pair will not be included in object because of catMaybes.

objectJson :: [Maybe Pair] -> Value Source #

Helper function for creating an JSON object where catMaybes won't include items from the '[Maybe Pair]' list that return Nothing.

getStatusIdInt :: (Status -> Maybe Id) -> Either MPDError Status -> Maybe Int Source #

Extracts the Int value from an Id within Status, if present and the Either value is a Right.