about summary refs log blame commit diff
path: root/services/tazblog/src/RSS.hs
blob: 913aa9a4081bdb637f170b5b8c089bc4cd3438b2 (plain) (tree)
1
2
3
4
5
6
7
8
9
                                
 


              
 
                
                            
                                                                  
                                  
               
 

                                         


                             
 


                                                                     
                           
                       
                             
                                
                                                 
 


                                              


                                
                                                                              
 
                                  
                                                       
{-# LANGUAGE RecordWildCards #-}

module RSS
  ( renderFeed
    )
where

import BlogStore
import Data.Maybe (fromJust)
import qualified Data.Text as T
import Data.Time (UTCTime (..), getCurrentTime, secondsToDiffTime)
import Network.URI (URI, parseURI)
import Text.RSS

createChannel :: UTCTime -> [ChannelElem]
createChannel now =
  [ Language "en",
    Copyright "Vincent Ambo",
    WebMaster "mail@tazj.in",
    ChannelPubDate now
    ]

createRSS :: UTCTime -> [Item] -> RSS
createRSS t =
  let link = fromJust $ parseURI "https://tazj.in"
   in RSS "tazjin's blog" link "tazjin's blog feed" (createChannel t)

createItem :: Entry -> Item
createItem Entry {..} =
  [ Title "tazjin's blog",
    Link $ entryLink entryId,
    Description $ T.unpack text,
    PubDate $ UTCTime edate $ secondsToDiffTime 0
    ]

entryLink :: EntryId -> URI
entryLink i =
  let url = "http://tazj.in/" ++ "/" ++ show i
   in fromJust $ parseURI url

createItems :: [Entry] -> [Item]
createItems = map createItem

createFeed :: [Entry] -> IO RSS
createFeed e = getCurrentTime >>= (\t -> return $ createRSS t $ createItems e)

renderFeed :: [Entry] -> IO String
renderFeed e = fmap (showXML . rssToXML) (createFeed e)