42 lines
No EOL
1.3 KiB
Haskell
42 lines
No EOL
1.3 KiB
Haskell
{-# LANGUAGE RecordWildCards #-}
|
|
|
|
module RSS (renderFeed) where
|
|
|
|
import qualified Data.Text as T
|
|
|
|
import Data.Maybe (fromMaybe)
|
|
import Data.Time (getCurrentTime, UTCTime)
|
|
import Network.URI
|
|
import Text.RSS
|
|
|
|
import Locales
|
|
import BlogDB hiding (Title)
|
|
|
|
createChannel :: BlogLang -> UTCTime -> [ChannelElem]
|
|
createChannel l now = [ Language $ show l
|
|
, Copyright "Vincent Ambo"
|
|
, WebMaster "tazjin@googlemail.com"
|
|
, ChannelPubDate now
|
|
]
|
|
|
|
createRSS :: BlogLang -> UTCTime -> [Item] -> RSS
|
|
createRSS l t i = RSS (rssTitle l) (rssLink l) (rssDesc l) (createChannel l t) i
|
|
|
|
createItem :: Entry -> Item
|
|
createItem Entry{..} = [ Title $ T.unpack title
|
|
, Link $ makeLink lang entryId
|
|
, Description $ T.unpack btext
|
|
, PubDate edate]
|
|
|
|
makeLink :: BlogLang -> EntryId -> URI
|
|
makeLink l i = let url = "http://tazj.in/" ++ show l ++ "/" ++ show i
|
|
in fromMaybe nullURI $ parseURI url
|
|
|
|
createItems :: [Entry] -> [Item]
|
|
createItems = map createItem
|
|
|
|
createFeed :: BlogLang -> [Entry] -> IO RSS
|
|
createFeed l e = getCurrentTime >>= (\t -> return $ createRSS l t $ createItems e )
|
|
|
|
renderFeed :: BlogLang -> [Entry] -> IO String
|
|
renderFeed l e = createFeed l e >>= (\feed -> return $ showXML $ rssToXML feed) |