packages feed

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