{-# Language LambdaCase #-} module Paths where import qualified Control.Monad as CM import qualified Data.List as L import qualified System.Directory as D import qualified System.Environment as E import qualified System.FilePath as F import qualified Paths_venzone as PS import Story import Parse storyExt :: FilePath storyExt = "vns" -- tries to find data in 3 folders findStoriesFolder :: IO FilePath findStoriesFolder = -- local stories folder let lf = "." in -- where-exe-is one F.dropFileName <$> E.getExecutablePath >>= \ef -> -- data-folder PS.getDataFileName "" >>= \tf -> let sfs = map (F. "stories") [lf, ef, tf] in CM.filterM D.doesDirectoryExist sfs >>= \case (d:_) -> return d [] -> error $ "Could not find story folder! Tried:" ++ show sfs findStories :: IO [Story] findStories = -- get files findStoriesFolder >>= \sd -> D.listDirectory sd >>= \fs -> let fs' = L.sort fs sfs = filter (F.isExtensionOf storyExt) fs' sffs = map (sd F.) sfs in mapM readStory sffs -- single story (watch mode) findSingleStory :: FilePath -> IO Story findSingleStory fp = readStory fp