{-# LANGUAGE NoImplicitPrelude #-} module Data.Foscam.Directory( getFoscamDirectoryContents , FoscamDirectoryFile(Isn't, Is) , filenames ) where import Control.Category((.), id) import Data.ByteString.UTF8 as UTF8(fromString) import Data.Eq(Eq) import Data.Foscam.File.Filename(Filename, filename) import Data.Functor(fmap, (<$>)) import Data.List(foldr) import Data.Ord(Ord) import System.Directory(getDirectoryContents) import System.IO(IO, FilePath) import Text.Trifecta(Result(Success, Failure), parseString) import Text.Trifecta.Delta(Delta(Directed)) import Prelude(Show) data FoscamDirectoryFile = Isn't FilePath | Is Filename deriving (Eq, Ord, Show) getFoscamDirectoryContents :: FilePath -> IO [FoscamDirectoryFile] getFoscamDirectoryContents p = let fromResult (Success n) = Is n fromResult (Failure _) = Isn't p in fmap (fromResult . parseString filename (Directed (UTF8.fromString p) 0 0 0 0)) <$> getDirectoryContents p filenames :: [FoscamDirectoryFile] -> [Filename] filenames = foldr (\f -> case f of Isn't _ -> id Is n -> (n:)) []