You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
44 lines
1.0 KiB
44 lines
1.0 KiB
9 years ago
|
{-# LANGUAGE OverloadedStrings #-}
|
||
|
module M3U where
|
||
|
|
||
|
import Types
|
||
|
import qualified Data.Text as TIO
|
||
|
import Data.Text.Encoding
|
||
|
import Data.Maybe
|
||
|
import Control.Applicative
|
||
|
import Data.Monoid
|
||
|
import Data.Attoparsec.Text
|
||
|
import qualified Data.Attoparsec.Text as AT
|
||
|
import Utils
|
||
|
import Playlists
|
||
|
import Search
|
||
|
|
||
|
m3uHeader = "#EXTM3U"
|
||
|
trackHeader = "#EXTINF"
|
||
|
|
||
|
makeHeader title =
|
||
|
mconcat [trackHeader,
|
||
|
":-1,",
|
||
|
title]
|
||
|
|
||
|
--toExtinf :: SearchResult -> TIO.Text
|
||
|
toExtinf track =
|
||
|
let trackTitle = title track
|
||
|
in case parseTrack trackTitle of
|
||
|
Right (artist, title) ->
|
||
|
makeHeader (artist `mappend` " - " `mappend` title `mappend` "\n")
|
||
|
Left trackname -> makeHeader $ TIO.pack (trackname `mappend` "\n")
|
||
|
|
||
|
singleTrack track = do
|
||
|
let extinf = toExtinf track
|
||
|
trackUrl <- TIO.pack <$> (getUrl $ url track)
|
||
|
return $ extinf `mappend` trackUrl `mappend` "\n"
|
||
|
|
||
|
genm3u :: [SearchResult] -> IO M3U
|
||
|
genm3u srs = do
|
||
|
tracks <- mapM singleTrack srs
|
||
|
return $
|
||
|
M3U $ m3uHeader `mappend`
|
||
|
"\n" `mappend`
|
||
|
(mconcat tracks)
|