vision-0.0.2.2: src/Playlist/Format/Format.hs
-- -*-haskell-*-
-- Vision (for the Voice): an XMMS2 client.
--
-- Author: Oleg Belozeorov
-- Created: 23 Feb. 2010
--
-- Copyright (C) 2009-2010 Oleg Belozeorov
--
-- This program is free software; you can redistribute it and/or
-- modify it under the terms of the GNU General Public License as
-- published by the Free Software Foundation; either version 3 of
-- the License, or (at your option) any later version.
--
-- This program is distributed in the hope that it will be useful,
-- but WITHOUT ANY WARRANTY; without even the implied warranty of
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-- General Public License for more details.
--
module Playlist.Format.Format
( Fe (..)
, cookFormat
, formatMediaInfo
) where
import Prelude hiding (lookup)
import Control.Applicative
import Control.Monad
import Control.Monad.Writer
import Control.Monad.Error
import Graphics.UI.Gtk (escapeMarkup)
import Properties
data Fe a
= FeP a
| FeL String
| FeO [Fe a]
cookFormat fmt = runErrorT (mapM f fmt)
where f (FeP n) =
maybe (throwError "") (return . FeP) =<< (liftIO $ property n)
f (FeL s) =
return $ FeL s
f (FeO l) =
FeO <$> mapM f l
formatMediaInfo [] _ = Nothing
formatMediaInfo (fmt:fmts) m =
execWriterT (mapM_ f fmt) `mplus` formatMediaInfo fmts m
where f (FeP p) = tell . escapeMarkup =<< (lift $ lookup p m)
f (FeL s) = tell s
f (FeO l) = mapM_ f l `mplus` return ()