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:
parent
1f1108a886
commit
4088735c69
6 changed files with 65 additions and 1 deletions
53
src/Handler/Feed.hs
Normal file
53
src/Handler/Feed.hs
Normal 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
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue