{- This file is part of the Haskell package playlists. It is subject to the license terms in the LICENSE file found in the top-level directory of this distribution and at git://pmade.com/playlists/LICENSE. No part of playlists package, including this file, may be copied, modified, propagated, or distributed except according to the terms contained in the LICENSE file. -} -------------------------------------------------------------------------------- module Text.Playlist.PLS.Writer ( writePlaylist , writeTrack ) where -------------------------------------------------------------------------------- import Data.ByteString.Lazy.Builder (Builder) import qualified Data.ByteString.Lazy.Builder as B import Data.Monoid import Data.Text.Encoding (encodeUtf8) import Text.Playlist.Types -------------------------------------------------------------------------------- writePlaylist :: Playlist -> Builder writePlaylist x = B.byteString "[playlist]\n" <> mconcat (map writeTrack $ zip x [1..]) <> B.byteString "NumberOfEntries=" <> B.stringUtf8 (show . length $ x) <> B.byteString "\nVersion=2\n" -------------------------------------------------------------------------------- writeTrack :: (Track, Int) -> Builder writeTrack x = writeFileN x <> writeTitle x -------------------------------------------------------------------------------- writeFileN :: (Track, Int) -> Builder writeFileN (x, n) = B.byteString "File" <> B.stringUtf8 (show n) <> B.charUtf8 '=' <> B.byteString (encodeUtf8 . trackURL $ x) <> B.charUtf8 '\n' -------------------------------------------------------------------------------- writeTitle :: (Track, Int) -> Builder writeTitle (x, n) = case trackTitle x of Nothing -> mempty Just y -> B.byteString "Title" <> B.stringUtf8 (show n) <> B.charUtf8 '=' <> B.byteString (encodeUtf8 y) <> B.charUtf8 '\n'