mpd-current-json
Safe HaskellSafe-Inferred
LanguageHaskell2010

Main

Synopsis

Documentation

main :: IO () Source #

Where the program connects to MPD and uses the helper functions to extract values, organize them into a list of key/value pairs, make them a Value using object, then encode it to a conventional JSON ByteString with encodePretty for the pretty-print version.

getStatusItem :: Either MPDError Status -> (Status -> a) -> Maybe a Source #

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

This takes an Either MPDError Status value and a field label function f as arguments. It returns Just (f st) if the input status is Right st, where st is the Status value. This function helps to extract a specific field from the MPD.Status data record by providing the corresponding field label function. If the input status "st" is not Right st, indicating an error, or the field label function is not applicable, it returns Nothing.

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.

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

Safely get the head of a list. Same as 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]. MPD also provides toString that can convert, along other types, a Value to a String.

(.=?) :: (KeyValue 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.