    {-# LANGUAGE OverloadedStrings #-}

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

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

    Playback options.
    -}

    module Network.MPD.Commands.PlaybackOptions
        ( consume
        , crossfade
        , random
        , repeat
        , setVolume
        , single
        , replayGainMode
        , replayGainStatus
        ) where

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

    import           Prelude hiding (repeat)

    -- | Set consume mode
    consume :: MonadMPD m => Bool -> m ()
    consume :: forall (m :: * -> *). MonadMPD m => Bool -> m ()
    consume = Command () -> m ()
    forall (m :: * -> *) a. MonadMPD m => Command a -> m a
    A.runCommand (Command () -> m ()) -> (Bool -> Command ()) -> Bool -> m ()
    forall b c a. (b -> c) -> (a -> b) -> a -> c
    . Bool -> Command ()
    A.consume

    -- | Set crossfading between songs.
    crossfade :: MonadMPD m => Seconds -> m ()
    crossfade :: forall (m :: * -> *). MonadMPD m => Seconds -> m ()
    crossfade = Command () -> m ()
    forall (m :: * -> *) a. MonadMPD m => Command a -> m a
    A.runCommand (Command () -> m ()) -> (Seconds -> Command ()) -> Seconds -> m ()
    forall b c a. (b -> c) -> (a -> b) -> a -> c
    . Seconds -> Command ()
    A.crossfade

    -- | Set random playing.
    random :: MonadMPD m => Bool -> m ()
    random :: forall (m :: * -> *). MonadMPD m => Bool -> m ()
    random = Command () -> m ()
    forall (m :: * -> *) a. MonadMPD m => Command a -> m a
    A.runCommand (Command () -> m ()) -> (Bool -> Command ()) -> Bool -> m ()
    forall b c a. (b -> c) -> (a -> b) -> a -> c
    . Bool -> Command ()
    A.random

    -- | Set repeating.
    repeat :: MonadMPD m => Bool -> m ()
    repeat :: forall (m :: * -> *). MonadMPD m => Bool -> m ()
    repeat = Command () -> m ()
    forall (m :: * -> *) a. MonadMPD m => Command a -> m a
    A.runCommand (Command () -> m ()) -> (Bool -> Command ()) -> Bool -> m ()
    forall b c a. (b -> c) -> (a -> b) -> a -> c
    . Bool -> Command ()
    A.repeat

    -- | Set the volume.
    setVolume :: MonadMPD m => Volume -> m ()
    setVolume :: forall (m :: * -> *). MonadMPD m => Volume -> m ()
    setVolume = Command () -> m ()
    forall (m :: * -> *) a. MonadMPD m => Command a -> m a
    A.runCommand (Command () -> m ()) -> (Volume -> Command ()) -> Volume -> m ()
    forall b c a. (b -> c) -> (a -> b) -> a -> c
    . Volume -> Command ()
    A.setVolume

    -- | Set single mode
    single :: MonadMPD m => Bool -> m ()
    single :: forall (m :: * -> *). MonadMPD m => Bool -> m ()
    single = Command () -> m ()
    forall (m :: * -> *) a. MonadMPD m => Command a -> m a
    A.runCommand (Command () -> m ()) -> (Bool -> Command ()) -> Bool -> m ()
    forall b c a. (b -> c) -> (a -> b) -> a -> c
    . Bool -> Command ()
    A.single

    -- | Set the replay gain mode.
    replayGainMode :: MonadMPD m => ReplayGainMode -> m ()
    replayGainMode :: forall (m :: * -> *). MonadMPD m => ReplayGainMode -> m ()
    replayGainMode = Command () -> m ()
    forall (m :: * -> *) a. MonadMPD m => Command a -> m a
    A.runCommand (Command () -> m ())
    -> (ReplayGainMode -> Command ()) -> ReplayGainMode -> m ()
    forall b c a. (b -> c) -> (a -> b) -> a -> c
    . ReplayGainMode -> Command ()
    A.replayGainMode

    -- | Get the replay gain options.
    replayGainStatus :: MonadMPD m => m [(String, String)]
    replayGainStatus :: forall (m :: * -> *). MonadMPD m => m [(String, String)]
    replayGainStatus = Command [(String, String)] -> m [(String, String)]
    forall (m :: * -> *) a. MonadMPD m => Command a -> m a
    A.runCommand Command [(String, String)]
    A.replayGainStatus