module MathiasSM.Writings (discoverGroups, discoverStandalonePages) where
import Data.List (nub, sort)
import Data.Maybe (mapMaybe)
import Hakyll (MonadMetadata (getAllMetadata), toFilePath)
import MathiasSM.Config (SiteConfig (contentDir, siteEnv), pagesPattern, writingsPattern)
import MathiasSM.Content (groupOf, isHidden, isIndex)
import System.FilePath.Posix (takeBaseName)
discoverGroups :: (MonadMetadata m) => SiteConfig -> m [String]
discoverGroups :: forall (m :: * -> *). MonadMetadata m => SiteConfig -> m [String]
discoverGroups SiteConfig
cfg = do
pages <- Pattern -> m [(Identifier, Metadata)]
forall (m :: * -> *).
MonadMetadata m =>
Pattern -> m [(Identifier, Metadata)]
getAllMetadata (SiteConfig -> Pattern
writingsPattern SiteConfig
cfg)
pure $ sort $ nub $ mapMaybe (\(Identifier
ident, Metadata
metadata) -> String -> Identifier -> Metadata -> Maybe String
groupOf (SiteConfig -> String
contentDir SiteConfig
cfg) Identifier
ident Metadata
metadata) pages
discoverStandalonePages :: (MonadMetadata m) => SiteConfig -> m [String]
discoverStandalonePages :: forall (m :: * -> *). MonadMetadata m => SiteConfig -> m [String]
discoverStandalonePages SiteConfig
cfg = do
pages <- Pattern -> m [(Identifier, Metadata)]
forall (m :: * -> *).
MonadMetadata m =>
Pattern -> m [(Identifier, Metadata)]
getAllMetadata (SiteConfig -> String -> Pattern
pagesPattern SiteConfig
cfg String
"*")
pure $ sort [takeBaseName (toFilePath ident) | (ident, metadata) <- pages, not (isIndex metadata), not (isHidden (siteEnv cfg) metadata)]