module Network.MPD.Commands.Types where
import Network.MPD.Commands.Arg (MPDArg(prep), Args(Args))
type Artist = String
type Album = String
type Title = String
type PlaylistName = String
type Path = String
data Meta = Artist | Album | Title | Track | Name | Genre | Date
| Composer | Performer | Disc | Any | Filename
deriving Show
instance MPDArg Meta
data ObjectType = SongObj
deriving (Eq, Show)
instance MPDArg ObjectType where
prep SongObj = Args ["song"]
type Seconds = Integer
data PLIndex = Pos Integer
| ID Integer
deriving (Show, Eq)
data State = Playing
| Stopped
| Paused
deriving (Show, Eq)
data Subsystem
= Database
| Update
| StoredPlaylist
| Playlist
| Player
| Mixer
| Output
| Options
deriving (Eq, Show)
instance MPDArg Subsystem where
prep Database = Args ["database"]
prep Update = Args ["update"]
prep StoredPlaylist = Args ["stored_playlist"]
prep Playlist = Args ["playlist"]
prep Player = Args ["player"]
prep Mixer = Args ["mixer"]
prep Output = Args ["output"]
prep Options = Args ["options"]
data ReplayGainMode
= Off
| TrackMode
| AlbumMode
deriving (Eq, Show)
instance MPDArg ReplayGainMode where
prep Off = Args ["off"]
prep TrackMode = Args ["track"]
prep AlbumMode = Args ["album"]
data Count =
Count { cSongs :: Integer
, cPlaytime :: Seconds
}
deriving (Eq, Show)
defaultCount :: Count
defaultCount = Count { cSongs = 0, cPlaytime = 0 }
data Device =
Device { dOutputID :: Int
, dOutputName :: String
, dOutputEnabled :: Bool }
deriving (Eq, Show)
defaultDevice :: Device
defaultDevice =
Device { dOutputID = 0, dOutputName = "", dOutputEnabled = False }
data Stats =
Stats { stsArtists :: Integer
, stsAlbums :: Integer
, stsSongs :: Integer
, stsUptime :: Seconds
, stsPlaytime :: Seconds
, stsDbPlaytime :: Seconds
, stsDbUpdate :: Integer
}
deriving (Eq, Show)
defaultStats :: Stats
defaultStats =
Stats { stsArtists = 0, stsAlbums = 0, stsSongs = 0, stsUptime = 0
, stsPlaytime = 0, stsDbPlaytime = 0, stsDbUpdate = 0 }
data Song =
Song { sgArtist, sgAlbum, sgTitle, sgFilePath, sgGenre, sgName, sgComposer
, sgPerformer :: String
, sgLength :: Seconds
, sgDate :: Int
, sgTrack :: (Int, Int)
, sgDisc :: Maybe (Int, Int)
, sgIndex :: Maybe PLIndex
, sgAux :: [(String, String)] }
deriving (Eq, Show)
defaultSong :: Song
defaultSong =
Song { sgArtist = "", sgAlbum = "", sgTitle = ""
, sgGenre = "", sgName = "", sgComposer = ""
, sgPerformer = "", sgDate = 0, sgTrack = (0,0)
, sgDisc = Nothing, sgFilePath = "", sgLength = 0
, sgIndex = Nothing, sgAux = [] }
data Status =
Status { stState :: State
, stVolume :: Int
, stRepeat :: Bool
, stRandom :: Bool
, stPlaylistVersion :: Integer
, stPlaylistLength :: Integer
, stSongPos :: Maybe PLIndex
, stSongID :: Maybe PLIndex
, stNextSongPos :: Maybe PLIndex
, stNextSongID :: Maybe PLIndex
, stTime :: (Seconds, Seconds)
, stBitrate :: Int
, stXFadeWidth :: Seconds
, stAudio :: (Int, Int, Int)
, stUpdatingDb :: Integer
, stSingle :: Bool
, stConsume :: Bool
, stError :: String }
deriving (Eq, Show)
defaultStatus :: Status
defaultStatus =
Status { stState = Stopped, stVolume = 0, stRepeat = False
, stRandom = False, stPlaylistVersion = 0, stPlaylistLength = 0
, stSongPos = Nothing, stSongID = Nothing, stTime = (0,0)
, stNextSongPos = Nothing, stNextSongID = Nothing
, stBitrate = 0, stXFadeWidth = 0, stAudio = (0,0,0)
, stUpdatingDb = 0, stSingle = False, stConsume = False
, stError = "" }