libmpd-0.8.0: tests/Unparse.hs
-- | Unparsing for MPD objects
module Unparse (Unparse(..)) where
import qualified Data.Map as M
import Network.MPD.Commands.Types
import Network.MPD.Util
class Unparse parsed where
unparse :: parsed -> String
instance Unparse Count where
unparse x = unlines
[ "songs: " ++ show (cSongs x)
, "playtime: " ++ show (cPlaytime x)
]
instance Unparse Device where
unparse x = unlines
[ "outputid: " ++ show (dOutputID x)
, "outputname: " ++ dOutputName x
, "outputenabled: " ++ showBool (dOutputEnabled x)
]
instance Unparse Song where
unparse s =
let fs = concatMap toF . M.toList $ sgTags s
id_ = maybe [] (\(Id n) -> ["Id: " ++ show n]) (sgId s)
idx = maybe [] (\n -> ["Pos: " ++ show n]) (sgIndex s)
lastModified = maybe [] (return . ("Last-Modified: " ++) . formatIso8601) (sgLastModified s)
in unlines $ ["file: " ++ (toString . sgFilePath) s]
++ ["Time: " ++ (show . sgLength) s]
++ fs
++ lastModified
++ id_
++ idx
where
toF (k, vs) = map (toF' k) vs
toF' k v = show k ++ ": " ++ toString v
instance Unparse Stats where
unparse s = unlines
[ "artists: " ++ show (stsArtists s)
, "albums: " ++ show (stsAlbums s)
, "songs: " ++ show (stsSongs s)
, "uptime: " ++ show (stsUptime s)
, "playtime: " ++ show (stsPlaytime s)
, "db_playtime: " ++ show (stsDbPlaytime s)
, "db_update: " ++ show (stsDbUpdate s)
]
instance Unparse Status where
unparse s = unlines $
[ "state: " ++ (case stState s of Playing -> "play"
Paused -> "pause"
_ -> "stop")
, "volume: " ++ show (stVolume s)
, "repeat: " ++ showBool (stRepeat s)
, "random: " ++ showBool (stRandom s)
, "playlist: " ++ show (stPlaylistVersion s)
, "playlistlength: " ++ show (stPlaylistLength s)
, "xfade: " ++ show (stXFadeWidth s)
, "time: " ++ (let (x, y) = stTime s in show x ++ ":" ++ show y)
, "bitrate: " ++ show (stBitrate s)
, "xfade: " ++ show (stXFadeWidth s)
, "audio: " ++ (let (x, y, z) = stAudio s in show x ++ ":" ++ show y ++
":" ++ show z)
, "updating_db: " ++ show (stUpdatingDb s)
, "error: " ++ show (stError s)
, "single: " ++ showBool (stSingle s)
, "consume: " ++ showBool (stConsume s)
]
++ maybe [] (\n -> ["song: " ++ show n]) (stSongPos s)
++ maybe [] (\n -> ["songid: " ++ show n]) (stSongID s)