1 {-# LANGUAGE OverloadedStrings #-} 2 module Databrary.Store.Transcoder 3 ( runTranscoder 4 , initTranscoder 5 , transcodeEnabled 6 ) where 7 8 import Data.Maybe (isJust) 9 import Data.Version (showVersion) 10 import System.Process (readProcessWithExitCode) 11 import System.Exit (ExitCode(..)) 12 13 import Paths_databrary (version, getDataFileName) 14 import qualified Databrary.Store.Config as C 15 import Databrary.Store.Types 16 17 runTranscoder :: Transcoder -> [String] -> IO (ExitCode, String, String) 18 runTranscoder (Transcoder cmd arg) args = 19 readProcessWithExitCode cmd (arg ++ args) "" 20 21 initTranscoder :: C.Config -> IO (Maybe Transcoder) 22 initTranscoder conf = 23 case (host, dir) of 24 (Nothing, Nothing) -> return Nothing 25 _ -> Just <$> do 26 cmd <- getDataFileName "transctl.sh" 27 let t = Transcoder cmd $ 28 [ "-v", showVersion version ] 29 ++ maybe [] (\d -> ["-d", d]) dir 30 ++ maybe [] (\h -> ["-h", h]) host 31 ++ maybe [] (\m -> ["-m", m]) mount 32 (r, out, err) <- runTranscoder t ["-t"] 33 case r of 34 ExitSuccess -> return t 35 ExitFailure e -> fail $ "initTranscoder test: " ++ show e ++ "\n" ++ out ++ err 36 where 37 host = conf C.! "host" 38 dir = conf C.! "dir" 39 mount = conf C.! "mount" 40 41 transcodeEnabled :: Storage -> Bool 42 transcodeEnabled = isJust . storageTranscoder