zwirn-0.2.3.1: app/zwirnmill/SampleBrowser/Load.hs
module SampleBrowser.Load where
import Data.List (sortBy)
import Data.Maybe (catMaybes)
import qualified Data.Text as T
import Data.Vector (Vector, fromList)
import System.Directory.OsPath (doesDirectoryExist, listDirectory)
import System.OsPath (decodeUtf, encodeUtf, takeFileName, (</>))
import System.OsPath.Types (OsPath)
import UI.Core (SampleBrowser (..))
loadSampleBrowser :: FilePath -> IO SampleBrowser
loadSampleBrowser path = loadSamples path >>= \sv -> return $ SampleB T.empty sv
loadSamples :: FilePath -> IO (Vector (T.Text, Int))
loadSamples path = do
ospath <- encodeUtf path
ps <- listDirectory ospath
samps <- catMaybes <$> mapM (loadSample ospath) ps
return $ fromList $ sortBy (\(t1, _) (t2, _) -> compare t1 t2) samps
loadSample :: OsPath -> OsPath -> IO (Maybe (T.Text, Int))
loadSample root name = do
ex <- doesDirectoryExist (root </> name)
if ex
then do
ss <- listDirectory (root </> name)
name' <- decodeUtf $ takeFileName name
return $ Just (T.pack name', length ss)
else return Nothing