venzone-1.0.0.0: src/Paths.hs
{-# 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