2017-10-08 22:32:13 -04:00
|
|
|
{-# LANGUAGE NoImplicitPrelude #-}
|
|
|
|
{-# LANGUAGE OverloadedStrings #-}
|
|
|
|
module Handler.Feed where
|
|
|
|
|
|
|
|
import Import
|
|
|
|
|
|
|
|
import Data.Time.Clock.POSIX ( posixSecondsToUTCTime )
|
2017-10-11 08:34:36 -04:00
|
|
|
import Model.Entry ( entryTitle )
|
2017-10-08 22:32:13 -04:00
|
|
|
import Widget.Entry ( entryR )
|
|
|
|
|
|
|
|
import qualified Data.Text as T
|
2017-10-10 21:44:33 -04:00
|
|
|
import qualified Model.Entry.Kind as K
|
2017-10-08 22:32:13 -04:00
|
|
|
|
|
|
|
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
|
2017-10-08 22:50:26 -04:00
|
|
|
{ feedTitle = siteTitle compileTimeAppSettings
|
2017-10-08 22:32:13 -04:00
|
|
|
, 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
|
2017-10-11 08:34:36 -04:00
|
|
|
, feedEntryTitle = entryTitle $ entityVal entry
|
2017-10-08 22:32:13 -04:00
|
|
|
, feedEntryContent = toHtml . entryContent . entityVal $ entry
|
|
|
|
, feedEntryEnclosure = Nothing
|
|
|
|
}
|