{-# LANGUAGE OverloadedStrings #-}

{- |
Module      : Network.MPD.Commands.Status
Copyright   : (c) Ben Sinclair 2005-2009, Joachim Fasting 2012
License     : MIT (see LICENSE)

Maintainer  : joachifm@fastmail.fm
Stability   : stable
Portability : unportable

Querying MPD's status.
-}

module Network.MPD.Commands.Status
    ( clearError
    , currentSong
    , idle
    , noidle
    , stats
    , status
    ) where

import qualified Network.MPD.Applicative.Internal as A
import qualified Network.MPD.Applicative.Status as A
import           Network.MPD.Commands.Types
import           Network.MPD.Core

-- | Clear the current error message in status.
clearError :: MonadMPD m => m ()
clearError = A.runCommand A.clearError

-- | Get the currently playing song.
currentSong :: MonadMPD m => m (Maybe Song)
currentSong = A.runCommand A.currentSong

-- | Wait until there is a noteworthy change in one or more of MPD's
-- susbystems.
--
-- The first argument is a list of subsystems that should be considered.  An
-- empty list specifies that all subsystems should be considered.
--
-- A list of subsystems that have noteworthy changes is returned.
--
-- Note that running this command will block until either 'idle' returns or is
-- cancelled by 'noidle'.
idle :: MonadMPD m => [Subsystem] -> m [Subsystem]
idle = A.runCommand . A.idle

-- | Cancel 'idle'.
noidle :: MonadMPD m => m ()
noidle = A.runCommand A.noidle

-- | Get server statistics.
stats :: MonadMPD m => m Stats
stats = A.runCommand A.stats

-- | Get the server's status.
status :: MonadMPD m => m Status
status = A.runCommand A.status