Add support for Atom and RSS content feeds - this info is available through mf2 anyway so Atom and RSS are kinda redundant, but we'll include them anyway

This commit is contained in:
Danielle McLean 2017-10-09 13:32:13 +11:00
parent 1f1108a886
commit 4088735c69
Signed by: 00dani
GPG key ID: 5A5D2D1AFF12EEC5
6 changed files with 65 additions and 1 deletions

53
src/Handler/Feed.hs Normal file
View file

@ -0,0 +1,53 @@
{-# LANGUAGE NoImplicitPrelude #-}
{-# LANGUAGE OverloadedStrings #-}
module Handler.Feed where
import Import
import Data.Time.Clock.POSIX ( posixSecondsToUTCTime )
import Widget.Entry ( entryR )
import qualified Data.Text as T
import qualified Entry.Kind as K
getFeedR :: Handler TypedContent
getFeedR = do
entries <- runDB $ selectList [] [Desc EntryPublished]
newsFeed $ toFeed entries
getFeedKindR :: K.EntryKind -> Handler TypedContent
getFeedKindR kind = do
entries <- runDB $ selectList [EntryKind ==. kind] [Desc EntryPublished]
let basicFeed = toFeed entries
newsFeed $ basicFeed
{ feedTitle = T.concat [K.pluralise kind, " ~ ", feedTitle basicFeed]
, feedDescription = toHtml $ T.concat ["feed of all ", K.pluralise kind]
, feedLinkSelf = FeedKindR kind
, feedLinkHome = EntriesR kind
}
toFeed :: [Entity Entry] -> Feed (Route App)
toFeed entries@(latestEntry:_) = (toFeed [])
{ feedEntries = toFeedEntry <$> entries
, feedUpdated = entryUpdated $ entityVal latestEntry
}
toFeed [] = Feed
{ feedTitle = fromMaybe "" . appTitle $ compileTimeAppSettings
, feedLinkSelf = FeedR
, feedLinkHome = HomeR
, feedAuthor = ""
, feedDescription = "sitewide feed of all entries"
, feedLanguage = "en-au"
, feedUpdated = posixSecondsToUTCTime 0
, feedLogo = Nothing
, feedEntries = []
}
toFeedEntry :: Entity Entry -> FeedEntry (Route App)
toFeedEntry entry = FeedEntry
{ feedEntryLink = entryR entry
, feedEntryUpdated = entryUpdated $ entityVal entry
, feedEntryTitle = entryName $ entityVal entry
, feedEntryContent = toHtml . entryContent . entityVal $ entry
, feedEntryEnclosure = Nothing
}